首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MOXy:继承和列表

MOXy:继承和列表
EN

Stack Overflow用户
提问于 2013-12-03 23:02:33
回答 1查看 163关注 0票数 1

我使用的是MOXy 2.5.1、Jersey2.4和Hibernate。我在MOXy中看到了一种奇怪的编组行为,它有一组特定的类。

我有一些类似于下面的类(为了简洁,去掉了一些额外的东西):

代码语言:javascript
复制
public abstract class ListWrapper<M> {
    protected List<M> records = new ArrayList<M>();
    public abstract List<M> getRecords();
    // plus functions to make it look like a List / Iterator
}

public abstract class RecordList<T extends Record> extends ListWrapper<T> {
    protected Person person;
    @XmlElement
    public Person getPerson() { return person; }
}

public class FooList extends RecordList<Foo> {
    @Override
    @XmlElement(type=Foo.class)
    public List<Foo> getRecords() { return super.records; }
}

public class Holder {
    @XmlElement
    public FooList getFooList() { /* ... */ }
}

当使用MOXy将Holder编组为XML时,我得到了以下内容:

代码语言:javascript
复制
<holder>
    <fooList>
        <records>...</records>
        <records>...</records>
        <person>...</person>
    </fooList>
</holder>

我原以为这些<records>元素会被命名为<foos>

如果我在FooList中的@XmlElement声明中放入一个name="foos"条目,我会得到我想要的名字,但是MOXy做了另一件有点奇怪的事情。它仍然会在<fooList>元素中输出名为<records>的元素,但是这些<records>将只包含对应的(Hibernate)数据库条目的<id>值。所以它看起来像这样:

代码语言:javascript
复制
<holder>
    <fooList>
        <records><id>5</id></records>
        <records><id>10</id></records>
        <person>...</person>
        <foos>...</foos>
        <foos>...</foos>
    </fooList>
</holder>

无论我使用的是@XmlElementWrapper@XmlJavaTypeAdapter还是我能想到的任何其他东西,都无关紧要。我要么得到错误的名称,要么得到包含有限数据集的第二组元素。这几乎就像是MOXy不理解这里的继承结构之类的。

在此期间,我将尝试其他一些东西(例如,ListWrapper应用程序接口;这不是我的设计),但对我来说,这看起来像是MOXy中的一个bug。请注意,同样的行为也会发生在JSON中,因此这并不局限于XML。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 21:14:06

我找到了一个解决方案。我只是将@XmlAccessorType(XmlAccessType.NONE)放在ListWrapperRecordList类上(在我的代码中,它已经放在FooList类上)。我认为MOXy是(错误的?)在树中查找ListWrapper,并在此基础上创建输出条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20354575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档