前言
在几年前,webservice流行了一阵子,所以当年有很多项目是基于webservice开发了接口,不过后来因为其比较复杂,被后来Json方式的Http的API接口取代了。不过还是有一些老的项目在用,今天就遇到了一个需求,需要调用webservice来对接数据。
现在再去研究webservice的技术就显得很不值得了,还要在新项目中增加相关的依赖(比如AXIS、wsdl4j等等),对项目的侵入性很大。所以想能否把WSDL的规则转成用Http的POST的方式的XML(因为它的本质最后也是通过HTTP来提交的)
实现
后来找到一个免费开源的软件,可以很简单的做这种转化,叫:SoupUI MacOS和Windows下都能安装
安装好后,新建一个SOAP Project
如上图,填写Project名字和WSDL地址(也可以通过Browse浏览wsdl文件),就可以生成需要POST的XML啦:如下:
好了,接下来我们把测试的XML写一个测试用OKHttp提交测试下(其他语言,或者用HttpUrlConnection也类似,总之就是把XML用Content-Type是application/xml POST到WSDL地址上去就好了):
public static void main(String[] args) throws Exception { String wsdl = "http://www.example.com/WS_Server/xxx"; String string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:my=\"http://my.server.ws.com/\">\n" + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + " <my:instruInfo>\n" + " <insCode>abc</insCode>\n" + " <instruType>4</instruType>\n" + " </my:instruInfo>\n" + " </soapenv:Body>\n" + "</soapenv:Envelope>"; OkHttpClient client = new OkHttpClient().newBuilder().build(); RequestBody requestBody = RequestBody.create(MediaType.parse("application/xop+xml; charset=UTF-8;"), string); Request request = new Request.Builder().url(wsdl).post(requestBody) .addHeader("Content-Type", "application/xop+xml; charset=UTF-8;") .addHeader("Content-Length", String.valueOf(string.length())) .build(); Response response = client.newCall(request).execute(); String body = response.body().string(); System.out.println(body); }
以上测试过Content-Type可能是如下几个(如遇到:服务器无法为请求提供服务,因为不支持该媒体类型):
text/xml; charset=UTF-8;
application/xop+xml; charset=UTF-8;
application/soap+xml; charset=utf-8;
文章评论