Вы на правильном пути с XmlJavaTypeAdapter, но я подозреваю, что foo должен быть XmlElement, а не XmlAttribute:
@XmlRootElement(name="bar")
public class Bar {
@XmlElement
@XmlJavaTypeAdapter(FooAdapter.class)
private Foo foo;
@XmlAttribute
private String baz;
}
FooAdapter может быть простым, как показано ниже, но выводкрасивее, если вы создаете прокси-объект для представления Foo и маршала, а не Object [].
class FooAdapter extends XmlAdapter<Object[], Foo> {
@Override
public Object[] marshal(Foo v) throws Exception {
return new Object[]{ v.x, v.y, v.z };
}
@Override
public Foo unmarshal(Object[] v) throws Exception {
Foo foo = new Foo();
foo.x = (String) v[0];
foo.y = (Integer) v[1];
foo.z = (Double) v[2];
return foo;
}
}