【发布时间】:2017-06-22 20:02:17
【问题描述】:
我收到了一个用 .NET 编写的 SOAP Web 服务的 WSDL 文件。我正在使用 JAX-WS(JBoss 附带的实现)构建 Java 客户端。
我运行wsimport 来生成类,我可以使用它们调用服务。问题是 JAX-WS 对 WSDL 文件的解释似乎与 .NET 不同。
这是 WSDL 文件的摘录。感兴趣的元素被命名为minorgroups:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:complexType name="traffichistoryrequest">
<xs:sequence>
<xs:element name="startmonth" type="xs:string" nillable="true"/>
<xs:element name="endmonth" type="xs:string" nillable="true" minOccurs="0"/>
<xs:element name="minorgroups" type="minorgrouplist" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="traffichistoryrequest" type="traffichistoryrequest" nillable="true"/>
<xs:complexType name="minorgrouplist">
<xs:sequence>
<xs:element name="minorgroupcode" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="minorgrouplist" type="minorgrouplist" nillable="true"/>
JAX-WS 生成的请求如下所示。注意<minorgrouplist></minorgrouplist>:
<ns2:request>
<startmonth>2017-01</startmonth>
<endmonth>2017-12</endmonth>
<minorgrouplist>
<minorgroupcode>group1</minorgroupcode>
<minorgroupcode>group2</minorgroupcode>
</minorgrouplist>
</ns2:request>
.NET 服务需要 <minorgroups></minorgroups>。如果我使用 Visual Studio 从这个 WSDL 生成客户端,这也是我得到的。
我可以通过编辑 WSDL sn-p 的最后一行,将全局元素重命名为 minorgroups 来修复 JAX-WS 客户端请求。但是对 XML Schema 不太熟悉,我不知道全局元素正在提供什么功能,更不用说 JAX-WS 使用其名称而不是 traffichistoryrequest中的元素名称是否正确>.
那么 JAX-WS 的行为是否正确?
【问题讨论】: