` SoapUI调用webservice接口,http+post方式模仿soapui调用webservice接口
项目上调用一个第三方公司提的的webservice短信接口,使用了以下几种接口调用技术都不行
- 使用PB自带的 Web Service Proxy Wizard 输入wsdl地址后加载不出方法名
- 使用java xfire客户端调用报错
- 使用java jax-ws 生成客户端报错(jax-ws虽然需要生成很多调用客户端,会生成很多class引入到项目,但是之前碰到的绝大多数webservice jax-ws都能解析生成调用客户端的)
soapui调用测试
soapui新建 new soap project 输入wsdl地址自动加载接口已发布方法,
输入接口调用参数,接口调用成功后返回发送的短信ID
现在已知soapui可以调用接口,其他的方式目前都测试不行,但是只要soapui可以调用,我们可以模仿soapui,把soapui的参数放到HTTP+POST请求中调用,soapui调用webservice接口就是通过http+post调用的
http+post调用webservice接口,查看post调用地址,入参等
接口调用成功后切换到request1的Raw 窗口
- POST请求的地址在上方
- content-type 为Content-Type: text/xml;charset=UTF-8 也写明
- 方法入参, <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:tem=“http://tempuri.org/”>
soapenv:Header/ …
使用Postman测试
上面已经知道了使用post模仿soapui调用必要的请求地址,content-type,以及body参数,使用postman输入这些数据测试
soapui设置的 content-type:text/xml;charset=UTF-8
postman中我设置 content-type:text/xml;charset=UTF-8或者
content-type:text/plain
content-type:application/json
都可以调用的。
java httpclient调用webservice接口
postman工具中 post请求已经可以了就好办了,使用httpclient封装一个http+post的工具类即可
package com.bsoft.tjwsyy.myutils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.