2014-05-05 16 views
6

Ich habe Java WebService-Code in meiner Eclipse. Ich habe @WebService @Webmethod, @XmlElements, @XmlType, @XmlAccessorType verwendetLoswerden <arg0>

Jetzt erzeuge ich wsdl mit java2ws Befehl von CXF-Framework. Hier ist der Befehl

F:\....\code\java2wsdl>java2ws -o CustomerVxRR.wsdl -d <myOutputDir> -wsdl -cp <myClassesFolder> <ServiceImpl class> 

meine WSDL-Datei agr0 als Name contqins, die will ich nicht, denn wenn ich es SoapUI bin importieren. Es fügt Tag um das Feld hinzu. Hier

ist Wsdl Teil mit arg0

<xs:schema ..... > 
<xs:complexType name="myServiceMethodName"> 
<xs:sequence> 
<xs:element minOccurs="0" name="arg0" type="tns:ServiceInputClassName"/> 
</xs:sequence> 
</xs:complexType> 
<xs:complexType name="ServiceInputClassName"> 
<xs:sequence> 
<xs:element minOccurs="0" name="EmpID" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 
</xz:schema> 

Hier wird das Request-Objekt, das in SOAPUI erzeugt wird

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://customeroffer.manage.ws.hello.my.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <cus:myServiceMethodName> 
     <!--Optional:--> 
     <arg0> 
      <EmpID >123456</EmpID> 
     </arg0> 
     </cus:myServiceMethodName> 
    </soapenv:Body> 
</soapenv:Envelope> 

Wenn ich Tag entfernen erhalte ich diese Antwort:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <soap:Fault> 
     <faultcode>soap:Client</faultcode> 
     <faultstring>Unmarshalling Error: unexpected element (uri:"", local:"EmpID"). Expected elements are &lt;{}empid></faultstring> 
     </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

Ich möchte arg0 in der Anfrage XML

nicht behalten

Antwort

11

Ich habe es gerade nach einigen Recherchen meines eigenen Codes behoben. Das einzige, was erforderlich ist, um <arg0> zu ändern, ist, dass wir @WebParam annotation verwenden müssen, um custome name anstelle von "arg0" zu deklarieren.

Zum Beispiel:

mein Service-Name ist getEmpDetail und EmpID ist der Eingabeparameter für den Dienst dann ist hier die im Dienst impl Klasse erforderlich Erklärung:

public Emp getEmpDetail(@WebParam(name="EmpDetail") String EmpId) 

nach WSDL generatingfrom die Anforderung XML wird wie folgt aussehen:

+0

Hinzufügen zu den oben genannten, müssen Sie möglicherweise sicherstellen, dass die Schnittstellenklasse das @WebParam hat, wenn Sie eins haben. –