我的 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文件将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>
这是在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 <{}empid></faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
我不想在请求XML中保留arg0
最佳答案
我只是在研究了自己的代码后才将其修复。更改<arg0>
唯一需要做的就是,我们需要使用@WebParam
批注来声明自定义名称,而不是“arg0”。
例如:
我的服务名称是getEmpDetail,而EmpID是服务的输入参数,然后这是服务impl类中所需的声明:
public Emp getEmpDetail(@WebParam(name="EmpDetail") String EmpId)
从WSDL生成后,请求XML将如下所示
<ns:getEmpDetail>
<EmpDetail>
<EmdID>?</EmpID>
</EmpDetail>
<ns:getEmpDetail>
关于java - 摆脱<arg0>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23475189/