摆脱<arg0>

RaG*_*RaG 8 java wsdl web-services jax-ws java2wsdl

我的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>
Run Code Online (Sandbox Code Playgroud)

我的wsdl文件contqins agr0作为我不想要的名字,因为当我将它导入SoapUI时.它在字段周围添加标记.

这是与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>
Run Code Online (Sandbox Code Playgroud)

这是在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>
Run Code Online (Sandbox Code Playgroud)

如果我删除标签,我会收到以下回复:

<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>
Run Code Online (Sandbox Code Playgroud)

我不想在请求XML中保留arg0

RaG*_*RaG 15

我在对自己的代码进行一些研究后修改了它.唯一需要改变的<arg0>是我们需要使用@WebParam注释来声明客户名而不是"arg0".

例如:

我的服务名称是getEmpDetail,EmpID是服务的输入参数,这里是服务impl类所需的声明:

public Emp getEmpDetail(@WebParam(name="EmpDetail") String EmpId)
Run Code Online (Sandbox Code Playgroud)

从WSDL生成后,请求XML将如下所示

<ns:getEmpDetail>
<EmpDetail>
<EmdID>?</EmpID>
</EmpDetail>
<ns:getEmpDetail>
Run Code Online (Sandbox Code Playgroud)