我有一个 XSD 文件。使用 xjc 我从中生成类。如何从生成的类中的 XmlType 注释中更改 propOrder 值?我不想更改 XSD 文件,只要我不是它的所有者并且我不想更改从此模式生成的类。有没有办法通过自定义绑定文件(xjb)来实现这一点?问题是 propOrder 值对我来说是不可取的。作为最后一个解决方案,我考虑对此类使用 parseMethod/printMethod,但这太棘手了。
我正在处理 FpML(XML 基本格式),这是一个 XSD 元素:
<xsd:complexType name="TradeIdentifier">
<xsd:sequence>
<xsd:choice>
<xsd:sequence>
<xsd:element name="issuer" type="IssuerId"></xsd:element>
<xsd:element name="tradeId" type="TradeId"></xsd:element>
</xsd:sequence>
<xsd:sequence>
<xsd:group ref="PartyAndAccountReferences.model">
</xsd:group>
<xsd:element name="reportingRole" type="ReportingRole" minOccurs="0"></xsd:element>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="tradeId" type="TradeId"></xsd:element>
<xsd:element name="versionedTradeId" type="VersionedTradeId"></xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
这是propOrder:
@XmlType(name = "TradeIdentifier", propOrder = {
"issuer",
"tradeId",
"partyReference",
"accountReference",
"reportingRole",
"tradeIdOrVersionedTradeId"
})
当我在对象partyReference 和tradeId 中设置时,生成的xml 是:
<partyTradeIdentifier>
<tradeId>NONREF</tradeId>
<partyReference href="Party2"/>
</partyTradeIdentifier>
XSD 验证失败并出现错误:
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'tradeId'. One of '{"http://www.nsd.ru/repository/fpml-5.4":issuer, "http://www.nsd.ru/repository/fpml-5.4":partyReference}' is expected.]
解决方案是将partyReference 元素放在tradeId 之前。当我手动执行时,一切正常。但我不想手动更改生成的类,因为在模式更改的情况下我将不得不重复这样的操作。这是一条通往地狱的路。
我试图重命名一个tradeId,所以会有两个字段。但是,只有一个 tradeId 字段被重命名,问题仍然存在。