我正试图找到一种方法来编组我无法访问的类。我正在努力实现这样的目标:
@XmlRootElement(name="bar")
class Bar {
@XmlAttribute
private Foo foo;
@XmlAttribute
private String baz;
}
应该产生这样的xml文件:
<bar baz="stuff" foo="otherstuff"/>
这可能吗?我试图摆弄@XmlJavaTypeAdapter
没有成功。
答案 0 :(得分:1)
如果您无权访问用于生成XML文件的类,但您可以访问基于/用于生成这些类的模式,那么您应该能够使用xjc重新生成这些类。模式定义(xsd)文件。
答案 1 :(得分:1)
你使用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;
}
}