XSD を作成しようとしている興味深い XML の状況があります。私が使用している Web サービスは、ある意味で一般的であるという点で、通常とは異なる方法で応答を送信します。
例えば、
Web サービス呼び出し 1:
<rootElement>
<result>
<resultset>
<row attr="some value" attr2="some value 2" />
</resultset>
</result>
</rootElement>
Web サービス呼び出し 2:
<rootElement>
<result>
<resultset>
<row someOtherAttr="some value" someOtherAttr2="some value 2" />
</resultset>
</result>
</rootElement>
ご覧のとおり、2 つの Web サービス応答を区別する唯一の要素は、row 要素内の属性です。
結果要素に抽象要素を使用することで、いくつかの異なるアプローチを試しましたが、これはある程度機能しますが、マーシャリング時に使用する結果要素を JAXB が選択できるようにする方法がわかりません。
すなわち
... other xs declarations excluded for sanity ...
<xs:element ref="abstractResult" />
... snip ...
<xs:element name="abstractResult" type="ResultType" abstract="true" />
<xs:complexType name="ResultType" abstract="true" />
<xs:complexType name="SomeResultType">
<xs:complexContent>
<xs:extension base="ResultType">
... snip ...
このアプローチの問題は、適切な実装を検索するのではなく、マーシャリング中に JAXB が抽象的な ResultType をインスタンス化しようとすることです。
これを回避する方法はありますか?
本当にありがとう!