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 列表的 Root

@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 编组到 Systetem.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 编组期间是否可以忽略包装类

答案是:不可能

实际上我的问题是那个问题的重复。但我的问题与问题的架构方面有关

似乎 JAXB 不是最好XML使用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 回答