Ich habe eine WSDL-Datei eines SOAP-Webdienstes erhalten, der in .NET geschrieben wurde. Ich baue einen Java-Client mit JAX-WS (die Implementierung, die mit JBoss kommt).JAX-WS SOAP-Anfrage stimmt nicht mit WSDL-Datei überein
Ich lief wsimport
, um die Klassen zu generieren, und ich kann den Dienst mit ihnen aufrufen. Das Problem ist, dass JAX-WS die WSDL-Datei anders zu interpretieren scheint als .NET.
Hier ist ein Auszug aus der WSDL-Datei. Das Element von Interesse minorgroups genannt:
<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"/>
Die JAX-WS-generierte Anfrage sieht wie folgt aus. Beachten Sie die <minorgrouplist></minorgrouplist>
:
<ns2:request>
<startmonth>2017-01</startmonth>
<endmonth>2017-12</endmonth>
<minorgrouplist>
<minorgroupcode>group1</minorgroupcode>
<minorgroupcode>group2</minorgroupcode>
</minorgrouplist>
</ns2:request>
Das .NET Service <minorgroups></minorgroups>
stattdessen erwartet. Das bekomme ich auch, wenn ich einen Client aus dieser WSDL mit Visual Studio erzeuge.
Ich kann die JAX-WS-Clientanforderung beheben, indem ich die letzte Zeile des WSDL-Snippets bearbeite und das globale Element in minorroups umbenennt. Aber da ich mit XML Schema nicht so vertraut bin, weiß ich nicht, welche Funktion dieses globale Element erfüllt, geschweige denn, ob JAX-WS seinen Namen anstelle des Namens des Elements innerhalb von traffichistoryrequest korrekt verwendet.
Also verhält sich JAX-WS korrekt oder nicht?