3

我有一个 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 字段被重命名,问题仍然存在。

4

1 回答 1

1

绑定.xml

尝试使用以下绑定文件从您的 XML 模式生成类:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xsi:schemaLocation="
http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
    version="2.1">
    <globalBindings>
        <xjc:simple />
    </globalBindings>
</bindings>

XJC 呼叫

xjc -extension -b binding.xml schema.xsd
于 2013-04-24T12:18:05.867 回答