1

私のコードベースにはあります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();

しかし、これは機能しません

4

2 に答える 2

1

答えはここにあります:

JAXBマーシャリング中にラッパークラスを無視することは可能ですか?

答えは、不可能です。

実際、私の質問はその質問の一種です。しかし、私の質問は問題のアーキテクチャ面に関連しています。

XMLJAXB は使用するのに最適なものではないようです。以前のような構造にとどまりたい場合(変更する必要はないが、それでもクラスを変更したいと考えていると想像してください)、クラスの接続方法を変更しますXMLREST APIお互い。

It( jaxb)は自由を壊します。クラスは少し(つまり、あまりにも)貧血になります..

于 2013-06-12T14:47:09.433 に答える
0

これを試して

@XmlAccessorType(XmlAccessType.NONE)
public class B {

@XmlElement
private String aString;// you don't need to create the class A (aString  is like bString lement)

@XmlElement
private String bString;
于 2013-06-10T23:24:24.260 に答える