我有一个名为@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>
答案 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>
相关问题
了解更多信息