我有一个有趣的 XML 情况,我正在尝试为其编写 XSD。我正在使用的 Web 服务有一种不同寻常的发送响应的方式,因为它在某种程度上是通用的。
例如,
网络服务调用 1:
<rootElement>
<result>
<resultset>
<row attr="some value" attr2="some value 2" />
</resultset>
</result>
</rootElement>
网络服务调用 2:
<rootElement>
<result>
<resultset>
<row someOtherAttr="some value" someOtherAttr2="some value 2" />
</resultset>
</result>
</rootElement>
如您所见,唯一区分两个 Web 服务响应的是行元素中的属性。
我已经尝试了几种不同的方法,通过为结果元素设置一个抽象元素,这在一定程度上起作用,但我不知道如何允许 JAXB 在编组时选择要使用的结果元素。
IE
... 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。
有没有办法避免这种情况?
非常感谢!