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 工程, 笔者建立的普通工程 (偷懒), 如下
接下来, 在 src 上右键 --new--other, 选择 webservices 下面的 Web Service Client, 如图
点击 next, 如下图输入 webservice 接入地址, 选择 client type, 点击 next
点击 finish 生成的 webservice stub 代码如下
如果你打开看这些文件, 仔细的, 认真的阅读生成的调用 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
正确的方式是这样的, 如图这样写就可以了, 运行看结果.
三, 总结
真心没啥总结的了, 异构系统的数据类型问题一般都是通过 xml 等进行数据转换的, 而这些事情 axis 或其他的工具, 实现已经替我们解决了.
来源: http://www.jianshu.com/p/719b954b2884