Xml JAXB2将xsd:restrictions映射为子类和(un)marshall xsi:type
我已经做了很多研究试图弄明白这一点,但我 仍然不成功 我有许多遵循此模式的XSD: 简单_标识.xsdXml JAXB2将xsd:restrictions映射为子类和(un)marshall xsi:type,xml,xsd,jaxb,marshalling,jaxb2,Xml,Xsd,Jaxb,Marshalling,Jaxb2,我已经做了很多研究试图弄明白这一点,但我 仍然不成功 我有许多遵循此模式的XSD: 简单_标识.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:include schemaLocation="./Base_3039.xsd"/> <xsd:include schemaLocation="./Simple_A.xsd"/> <xs
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="./Base_3039.xsd"/>
<xsd:include schemaLocation="./Simple_A.xsd"/>
<xsd:include schemaLocation="./Simple_S.xsd"/>
<xsd:include schemaLocation="./Simple_N.xsd"/>
<xsd:include schemaLocation="./Simple_V1.xsd"/>
<xsd:include schemaLocation="./Simple_L.xsd"/>
<xsd:include schemaLocation="./Simple_V.xsd"/>
<xsd:include schemaLocation="./Simple_C.xsd"/>
<xsd:simpleType name="Simple_Identification">
<xsd:restriction base="Base_3039"/>
</xsd:simpleType>
</xsd:schema>
例如,Simple_.xsd如下所示:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="./Simple_Identification.xsd"/>
<xsd:simpleType name="Simple_S">
<xsd:restriction base="Simple_Identification">
<xsd:minLength value="14"/>
<xsd:maxLength value="14"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<Identification xsi:type="Simple_S">XYZUVW</Identification>
最后,我希望能够生成包含
标签如下所示:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="./Simple_Identification.xsd"/>
<xsd:simpleType name="Simple_S">
<xsd:restriction base="Simple_Identification">
<xsd:minLength value="14"/>
<xsd:maxLength value="14"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<Identification xsi:type="Simple_S">XYZUVW</Identification>
XYZUVW
现在,如果不启用mapSimpleTypeDef,我可以
marshall/unmarshall XML文件,忽略简单类型,如simple\S
启用MapSimpleType后,将为简单
类型。简单_标识映射到包含基本_3039字段的类。并且Base_3039类包含一个字符串字段。但是,简单_标识的不同子类型的类不扩展简单_标识,而只包含简单_标识类型的字段,这在编组/解编组时没有帮助
例如,在解组此XML文件时:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="...">
<Identification>EDS-200708021031-950012222329</Identification>
<Time>2007-08-02T10:31:44.449+01:00</Time>
<Function>9</Function>
<Sender>
<Identity xsi:type="Simple_S">111111380002111</Identity>
</Sender>
</Header>
EDS-200708021031-9500122222329
2007-08-02T10:31:44.449+01:00
9
111111380002111
Identity的值不可拆分为简单的\u标识对象,而不是专门的简单\u对象。此外,如果我重新整理所有xsi:type属性,它们将丢失在生成的XML中
所以,基本上,我的问题是如何正确地解组并生成包含xsi:type的XML。我正在使用的模式是否不适合这样做?xsd:restriction没有被JAXB解释为一种继承类型吗
请注意,XSD不是我可以修改的,我只需要使用它们来正确读取和生成XML
谢谢你花时间帮我解决这个问题
-AncaJAXB确实支持
xsi:type
,但在处理复杂类型而不是简单类型时,您只会看到生成的不同子类(以及创建的实例对象)
仅使用方面限制简单类型不会导致使用JAXB创建新类。这是因为,纯粹用面向对象的术语来说,派生类无论如何看起来都与超级类完全相同。Hi xcut-谢谢你的回答,它让事情变得更清楚了。在这种情况下,我想,我不可能仅基于我拥有的XSD生成类似于上面示例的XML文件。为了能够生成包含xsi:types的内容,我考虑使用JDOM来构造XMLs,然后根据模式进行验证。你有更好的建议吗?