之前做.net,发布、引用webservice很容易,最近转做java,需要调用.net发布的webservice,于是网上找了几种方案,感觉很容易,实则遇到很多困难,放上来分享给大家。
WebService地址:http://localhost:8080/Service.asmx
请求SOAP:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<SecurityContext xmlns="http://tempuri.org/">
<UserName>string</UserName>
<Password>string</Password>
</SecurityContext>
</soap:Header>
<soap:Body>
<GetProject xmlns="http://tempuri.org/">
<strPrjCode>string</strPrjCode>
</GetProject>
</soap:Body>
</soap:Envelope>
响应SOAP:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetProjectResponse xmlns="http://tempuri.org/">
<GetProjectResult>string</GetProjectResult>
</GetProjectResponse>
</soap:Body>
</soap:Envelope>
其中有安全验证是重点,就是这个折腾我好久。请求需要用户名、密码,在SOAP Header里构造。
使用方案:axis2、jax-ws、url connection
一、axis2,用的比较多的方式,功能强大,需要了解详细资料,请自行百度。优点:使用简单,可发布、请求webservice,可以生成类文件,也会生成SOAP header节点安全验证类。缺点:比较重,如果只是请求webservice,不发布,也需要依赖很多第三方jar包。
axis2使用说明:
1、下载地址:http://archive.apache.org/dist/axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip
2、生成类文件。axis2提供了一个生成类文件的工具,类似JDK提供的wsimport工具一样,可以根据webservice的WSDL生成类文件,使用这些类,可以像调用本地类一样调用webservice提供的服务。
cmd进入axis2-1.6.2\bin路径,执行wsdl2java -uri http://localhost:8080/Service.asmx?WSDL -p test.webservice -o stub -a -u Unpacks the databinding classes
参数说明:
-uri参数指定发布webservice地址。
-p指定生成的java类的包名。
-o指定生成一系列文件保存的根目录。
-a指定使用异步生成,默认同步生成。
-u Unpacks the databinding classes 避免生成的ServiceStub类特别大。
执行完,在当前目录下多了一个stub目录,可以看