在JAXB编组期间禁用List <t>实现者的特殊处理</t>

时间:2013-05-08 09:12:33

标签: java jaxb jax-ws cxf jax-ws-customization

我有一个名为@XmlTransient的{​​{1}}类,它实现了ListBase<T>。然后我将该列表子类化为List<T>@XmlType StringList等。

似乎JAXB以特殊方式处理这些类,例如当该类的实例是某个其他类的成员时,该成员将被封送为

@XmlType PersonList

而不是

<xs:element maxOccurs="unbounded" type="whatever the type of T" .../>

也就是说,列表的内容被封送而不是列表本身。

<xs:element type="type of my list implementor" .../>` 通过封装实现ListBase<T>,即它有一个List<T>类型的字段,它通过标记为List<T>的访问器公开该字段,以便内部列表获得该类型的编组。如果我从列表实现者中删除@XmlElement,那么我得到第二个(期望的)变体,但这意味着修改应用程序的其余部分,以便它知道封装。

如何禁用我的List实现者的特殊处理,以便它被编组为任何其他非集合复杂类型?

implements List<T>

1 个答案:

答案 0 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

如果您使用MOXy作为JAXB提供程序,那么您可以利用外部绑定文件覆盖类型的超类。

<?xml version="1.0"?>
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="forum116436770">
    <java-types>
        <java-type name="StringList" super-type="java.lang.Object" />
    </java-types>
</xml-bindings>

相关问题

了解更多信息