本次项目需求要改造一个现有的webservice接口,增加参数;这里先简略记录一下开发步骤。
至于webservice是什么,就暂时不谈了。
1.首先,从需求文档中找到目标接口url,以及方法名method,顺便看一下入参出参。
例如:
url:http://127.0.0.1/webservice/userService?wsdl
method:getUser
2.然后准备修改代码,找到代码中对应的方法,例如:
@WebMethod(operationName="getUser")
public String getUser(String username, String password){
//根据username与password从数据库查询用户信息,并返回,省略
//这个WebServiceUtil.getUser()是自己封装的一个方法,返回String,内含xml标签,见下方的返回报文
return WebServiceUtil.getUser(username,password);
}
3.然后打开软件SoapUI,点击File->New SOAP Project,然后在Initial WSDL框中输入接口url,注意要加?wsdl,否则会出错。
http://127.0.0.1/webservice/userService?wsdl
4.然后SoapUI就会帮我们扫描到这个url里有哪些方法,显示在左侧栏;然后双击目标方法,会弹出Request对话框,其中有请求体的具体格式,SoapUI帮我们自动生成好了,例如:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:iw="http://iw.webservice.udp.COMPANYNAME.com/">
<soapenv:Header />
<soapenv:Body>
<iw:getUser>
<arg0>abc</arg0>
<arg1>123456</arg1>
</iw:getUser>
</soapenv:Body>
</soapenv:Envelope>
注意,请求报文仅供参考,如果直接使用不一定能用!
因为iw是xmlns:iw那里配置的,其中的网址信息不同项目可能会不同!
getUser对应代码中的@WebMethod(operationName="getUser")与getUser()方法!
传入参数时,需要使用arg0、arg1的格式,而不是getUser()里的入参名username,password!
5.在请求体中修改传入的参数,点击绿色三角按钮,就会实际访问这个接口,在右侧会显示接口的返回消息,与代码中getUser()方法返回的String对应,例如:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getUserResponse xmlns:ns2="http://iw.webservice.udp.COMPANYNAME.com/">
<return>{"result":"T","msg":"success"}</return>
</ns2:getUserResponse>
</soap:Body>
</soap:Envelope>
注意,响应报文仅供参考,如果直接使用不一定能用!
因为其中ns2与getUserResponse也是与代码对应的!不同项目不同代码的标签是不同的!
其中,整个响应报文是String;return标签中返回的是一个json,供客户端处理。
6.如果程序中有断点,就会进入断点,这样就可以调试了;需要注意,如果调试断点时间过长,之后放开断点继续运行时,也会导致SoapUI无法收到返回报文,以及程序报错;这时只要去掉断点等,让程序尽快执行完即可,SoapUI就可以正常收到返回报文了。
7.如果用Postman调试webservice接口,便稍微复杂一些,要注意请求体必须按照xml格式才可以,而且xml的标签不能乱写,否则会返回错误报文。(请求体应该按照SoapUI中自动生成的标准请求体的样子,不同项目不同方法生成的有些微不同)
8.如果Postman调试webservice接口,收到的返回报文是错误信息,很可能是请求体的xml标签格式不对,所以建议尽量使用SoapUI,这个软件可以帮我们生成标准的webservice请求体xml格式的报文。