私のコードベースにはありますB extdnds A
が、それを作りたいです: B uses A
. これは私の試みです:
@XmlAccessorType(XmlAccessType.NONE)
public class A {
@XmlElement(name ="aString")
private String aString;
B クラスには A (構成) が含まれます。
@XmlAccessorType(XmlAccessType.NONE)
public class B {
@XmlElement
private A a = new A(); // has A
@XmlElement
private String bString;
Bのリストを含むルートがあります
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class ABs {
@XmlElement(name = "b-list")
private final List<B> bList = Constraints.constrainedList(new ArrayList<B>(), Constraints.notNull());
public void add(B...bb) {
for(B b : bb) {
bList.add(b);
}
}
}
私のテストでは、Bs を System.out にマーシャリングします。
ABs abs = new ABs();
abs.add( new B("bStringValue", "aStringValue"));
JAXBContext context = JAXBContext.newInstance(ABs.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(abs, System.out);
結果:
<aBs>
<b-list>
<a>
<aString>aStringValue</aString>
</a>
<bString>bStringValue</bString>
</b-list>
</aBs>
しかし、私はこのような結果が欲しいです:まるで私が継承を使っているかのように。のようにB extends A
:
<aBs>
<b-list>
<aString>aStringValue</aString>
<bString>bStringValue</bString>
</b-list>
</aBs>
これどうやってするの?
編集:
質問は実際には次のとおりです。Bクラスで使用するときにAクラスのタグを省略/無視する方法。<a>
つまり、マーシャリングでは<a>
なく、内部のすべてのフィールド/タグにマーシャリングします<a>
お気に入り:
@XmlElement(name = "") // empty
private A a = new A();
しかし、これは機能しません