XSDファイルがあります。xjc を使用して、そこからクラスを生成します。生成されたクラスの XmlType アノテーションから propOrder 値を変更するにはどうすればよいですか? 私が XSD ファイルの所有者でない限り、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.]
解決策は、tradeId の前に partyReference 要素を配置することです。手動で行うと、すべてが機能します。しかし、生成されたクラスを手動で変更したくありません。スキーマが変更された場合、そのような操作を繰り返さなければならないからです。これは地獄への道です。
1 つの tradeId の名前を変更しようとしたため、2 つのフィールドが存在します。しかし、代わりに 1 つの tradeId フィールドの名前が変更されるだけで、問題は残ります。