JAXB物业订单

时间:2013-04-24 10:23:22

标签: java jaxb xjc xjb

我有一个XSD文件。使用xjc我从中生成类。 如何在生成的clases中更改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"
})

当我在object 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.]

解决方案是在tradeId之前放置partyReference元素。当我手动完成时,一切正常。但是我不想手动更改生成的类,因为在模式更改的情况下,我将不得不重复这样的操作。这是一种下地狱的方式。

我试图重命名一个tradeId,所以会有两个字段。但是只重命名了一个tradeId字段,问题仍然存在。

1 个答案:

答案 0 :(得分:1)

<强> binding.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