本次项目需求要改造一个现有的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格式的报文