WebService是一种实现异构系统之间的方法互相调用的传统经典开发技术,常见的各种平台基本上都支持WebService,包括java,c++,.net,delphi等。但不同的语言和平台上的数据类型是不一样的,那又如何实现异构平台之间的webservice调用呢?本文将以java调用.net实现的webservice为例加以说明。
java平台有多种webservice的实现,常见的有cxf(前身为xfire),axis,axis2及java(java9)平台自带的SOAPConnectionFactory实现webservice的调用。其中,cxf非常容易与spring整合,通常用于解决同种java平台上的不同业务系统之间的webservice调用,而axis通常用于实现异构平台上不同系统之间的webservcie的调用。这里,将以axis生成Stub调用.net实现的WebService.
一、调用webService的基本原理
调用外部系统的webservice时,外部系统会提供一个WebService的接入地址,如http://xxx.xx.xxx.xx/NewJianGuanWebService/NewOutProvinceService.asmx,
调用者则要根据此地址,生成远程WebService的本地代理,再通过本地代理去调用远程的webservice里的方法。听起来有点费解,简单说,根据webservice的
地址,生成Stub程序,然后调用Stub的方法。Stub是什么?术语可以叫骨架程序。是不是一头雾水?- -!大家可以直接把Stub理解为根据webservice地址生成
的Client。调用stub这个client的方法时,就相当于调用了远程WebService服务的方法。
二、axis实现调用.net的webservice
原理大家都知晓了,But how to do?
首先搭建一个java开发环境, jdk 1.8或更高,eclipse版本在eclipse_mars_2以上,过程从略。
接下来新建一个普通的java工程或maven工程,笔者建立的普通工程(偷懒),如下
![](https://img.haomeiwen.com/i10632856/1e395b8414fcea50.png)
接下来,在src上右键--new--other,选择webservices下面的Web Service Client,如图
![](https://img.haomeiwen.com/i10632856/2526a86104f937a6.png)
点击next,如下图输入webservice接入地址,选择client type,点击next
![](https://img.haomeiwen.com/i10632856/1c3871a37f6488f4.png)
点击finish生成的webservice stub代码如下
![](https://img.haomeiwen.com/i10632856/cec818539c094b64.png)
如果你打开看这些文件,仔细的、认真的阅读生成的调用webService的代码,一定要认真仔细地看!小样儿,看不晕你!
其实,这几个文件里,你真正关注的、调用的是NewOutProvinceServiceSoapStub,所有的webservice的方法,都在这个文件里。
接下来写个main()方法,里面写
NewOutProvinceServiceSoapStub sub = NewOutProvinceServiceSoapStub();
String hello = sub.helloworld();
System.out.println("----->:" + hello);
我保证你的代码多半会报错,报错信息大约是:
发生的报错信息为:
AxisFault
faultCode: {http://xml.apache.org/axis/}Server.NoEndpoint
faultSubcode:
faultString: No endpoint
正确的方式是这样的,如图这样写就可以了,运行看结果。
![](https://img.haomeiwen.com/i10632856/5c629f723b252a29.png)
三、总结
真心没啥总结的了,异构系统的数据类型问题一般都是通过xml等进行数据转换的,而这些事情axis或其他的工具、实现已经替我们解决了。
网友评论