我有一个基于 Java spring 的 Web 服务,它返回许多响应。我想设计响应,使其具有通用性,因为许多字段始终可用,并且调用服务的结果放置在 JAXB 响应中的“有效负载”元素中。为此,我提出了以下响应类型定义:
<xs:element name="serviceResponse">
<xs:element name="responseStatus" type="xs:int"/>
<xs:element name="errorNumber" type="xs:int"/>
<xs:element name="errorDescription" type="xs:string"/>
<xs:element name="payLoad" type="?????"/>
</xs:element>
如果 payLoad 元素的类型可能因服务类型而异,我该如何声明该元素。每个服务都会生成不同的 JAXB 类型,我想将其添加到“PayloadElement”中。例如,以下是我期望的几个示例响应:
客户名单:
<serviceResponse>
<responseStatus>0</responsesStatus>
<errorNumber>0</errorNumber>
<errorDescription>null</errorDescription>
<payLoad>
<customers>
<customer>
<customerId>2323</customer>
<customerName>Joe Bloggs</customerName>
<invoiceNumber>90347347</invoiceNumber>
</customer>
<customer>
<customerId>54</customer>
<customerName>Dave hewitt</customerName>
<invoiceNumber>342343</invoiceNumber>
</customer>
</customers>
</payLoad>
</serviceResponse>
订单列表
<serviceResponse>
<responseStatus>0</responsesStatus>
<errorNumber>0</errorNumber>
<errorDescription>null</errorDescription>
<payLoad>
<orders>
<order>
<orderId>567</orderId>
<ProductList>
<product>
<productId>234324</product>
<Quantity>5</Quantity>
</product>
<product>
<productId>23434</product>
<Quantity>7</Quantity>
</product>
</ProductList>
</order>
<order>
<orderId>34232</orderId>
<ProductList>
<product>
<productId>1231</product>
<Quantity>5</Quantity>
</product>
</ProductList>
</order>
</orders>
</payLoad>
</serviceResponse>
正如您所看到的,有效负载元素可以包含一个 xml 文档,该文档可以是多种类型之一。我如何在 serviceResponse 元素定义中声明这一点?
谢谢
最佳答案
为什么不在有效负载中声明所有可能的类型?像这样:
<xs:element name="payloadContent">
<xs:complexType>
<xs:sequence>
<xs:element ref="customers" minOccurs="0"/>
<xs:element ref="orders" minOccurs="0"/>
<!-- more elements -->
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="payload" ref="payloadContent"/>
关于java - 如何在现有类型中声明或定义通用 xsd 类型。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811279/