11

Eclipse に Java WebService コードがあります。@WebService @Webmethod、@XmlElements、@XmlType、@XmlAccessorType を使用しました

現在、cxf フレームワークから java2ws コマンドを使用して wsdl を生成しています。これがコマンドです

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

私のwsdlファイルは、SoapUIにインポートするときのために、私が望まない名前としてagr0をcontqinsします。フィールドの周りにタグを追加しています。

ここに arg0 の wsdl 部分があります

<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>

SOAPUI で生成されるリクエスト オブジェクトは次のとおりです。

<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>

タグを削除すると、次の応答が返されます。

<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>

リクエスト XML に arg0 を保持したくない

4

1 に答える 1

20

自分のコードを調査した後、修正しました。変更が必要な唯一のことは、「arg0」の代わりにカスタム名を宣言するために注釈を<arg0>使用する必要があることです。@WebParam

例えば:

私のサービス名は getEmpDetail で、EmpID はサービスへの入力パラメーターです。サービスの impl クラスで必要な宣言は次のとおりです。

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

WSDL から生成した後、リクエスト XML は次のようになります。

<ns:getEmpDetail>
<EmpDetail>
<EmdID>?</EmpID>
</EmpDetail>
<ns:getEmpDetail>
于 2014-05-06T10:44:03.103 に答える