4 Stimmen

Welche Anpassung für JAX-WS anwenden, um Rückgabeobjekte in Listen zu entpacken?

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, z. B. CSID2ExtRefs Einsatz für ChemSpider WebService die eine Liste von Zeichenketten als eines der Argumente erhält und die Liste der Objekte zurückgibt:

<!-- Request element: -->
<s:element name="CSID2ExtRefs">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="CSID" type="s:int"/>
      <s:element minOccurs="0" maxOccurs="1" name="datasources" type="tns:ArrayOfString"/>
      <s:element minOccurs="0" maxOccurs="1" name="token" type="s:string"/>
    </s:sequence>
  </s:complexType>
</s:element>
<!-- Response element: -->
<s:element name="CSID2ExtRefsResponse">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="CSID2ExtRefsResult" type="tns:ArrayOfExtRef"/>
    </s:sequence>
  </s:complexType>
</s:element>
<s:complexType name="ArrayOfExtRef">
  <s:sequence>
    <s:element minOccurs="0" maxOccurs="unbounded" name="ExtRef" type="tns:ExtRef"/>
  </s:sequence>
</s:complexType>
<s:complexType name="ArrayOfString">
  <s:sequence>
    <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string"/>
  </s:sequence>
</s:complexType>

Die von wsimport Interface-Methode ist (mit jaxws:enableWrapperStyle = true ) :

@WebMethod(operationName = "CSID2ExtRefs", action = "http://www.chemspider.com/CSID2ExtRefs")
@WebResult(name = "CSID2ExtRefsResult", targetNamespace = "http://www.chemspider.com/")
@RequestWrapper(localName = "CSID2ExtRefs", targetNamespace = "http://www.chemspider.com/", className = "chemspider.core.CSID2ExtRefsRequest")
@ResponseWrapper(localName = "CSID2ExtRefsResponse", targetNamespace = "http://www.chemspider.com/", className = "chemspider.core.CSID2ExtRefsResponse")
public ArrayOfExtRef csid2ExtRefs(
    @WebParam(name = "CSID", targetNamespace = "http://www.chemspider.com/")
    int csid,
    @WebParam(name = "datasources", targetNamespace = "http://www.chemspider.com/")
    ArrayOfString datasources,
    @WebParam(name = "token", targetNamespace = "http://www.chemspider.com/")
    String token);

aber ich hätte gerne ArrayOfExtRef y ArrayOfString ausgepackt und in Listen umgewandelt werden, z.B. folgendes erhalten:

public List<ExtRef> csid2ExtRefs(
    @WebParam(...)
    int csid,
    @WebParam(...)
    List<String> datasources,
    @WebParam(...)
    String token);

Wenn ich diese Änderung manuell vornehme, funktioniert JAX-WS einwandfrei. Ich frage mich, ob es eine Möglichkeit gibt, eine entsprechende Personalisierung dafür?

3voto

Jitendra Vispute Punkte 689

Zunächst einmal sind alle Webservice-Standards noch nicht zu 100 % portabel. Ersetzen Sie

<s:element minOccurs="0" maxOccurs="1" name="datasources" type="tns:ArrayOfString"/>

mit

<s:element name="datasources" type="xs:string" form="qualified" minOccurs="0" maxOccurs="unbounded" />

auch ersetzen

<s:element minOccurs="0" maxOccurs="1" name="CSID2ExtRefsResult" type="tns:ArrayOfExtRef"/>

mit

<s:element minOccurs="0" maxOccurs="unbounded" name="CSID2ExtRefsResult" type="tns:ExtRef"/>

Sie können auch complexType wie "ArrayOfString", ArrayOfExtRef entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X