webService 客户端接口调用【java】
最近实际项目中使用到了WebService,简单总结下使用方式:
1、拿到接口:http://*******:8080/osms/services/OrderWebService?wsdl
我们可以将该接口地址在浏览器打开,查看其接口描述:
2、导出接口类,用以后续客户端调用,方法有两种:
方法一:
1)新建后缀名为“.wsdl”文件,直接拷贝上一步在浏览器打开的内容到该文件中:
在eclipse中新建一个WebService的Client项目:
选中刚新建的.wsdl文件:
eclipse会自动解析wsdl文件,并生成相应的类文件:
方法二:使用jdk自带的wsimport命令:
命令:e \> wsimport -s . ********:2080/osms/services/OrderWebService?wsdl
打开e盘,我们可看到已经生成对应的java类文件(其中class文件可以忽略):
3、客户端调用:
以下环境为java环境,我们使用JaxWsProxyFactoryBean来调用:
- package test;
- import java.io.BufferedReader;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.rmi.RemoteException;
- import org.apache.commons.codec.binary.Base64;
- import org.apache.commons.codec.digest.DigestUtils;
- import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
- import com.sf.osms.wbs.services.order.server.impl.OrderWebService;
- //import com.sf.novatar.util.codec.Base64Codec;
- public class Test_apiOrderService{
- public static void main(String[] args) throws RemoteException {
- JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
- //设置代理接口类
- svr.setServiceClass(OrderWebService.class);
- //设置接口调用地址
- svr.setAddress("******:8080/osms/services/OrderWebService?wsdl");
- //创建代理接口
- OrderWebService orderWebService = (OrderWebService)svr.create();
- //读取报文:参数为请求报文xml文件路径
- String xml = readTxtFile("/config/"+"apiOrderService.xml");
- //通过客户的validateCode加密报文数据 --全包加密
- String data = decodingValidCode(xml);
- System.out.println("加密报文:" + data);
- //验证数据完整性加密 -- 签值 fc34c561a34f
- String validateStr = jm("fc34c561a34f", xml);
- //调用接口 --调用对方的接口
- //当使用WEBSERVICE接口时,报文通过方法参数传入(三个参数分别为:xml报文、校验码、客户编码)
- String s = orderWebService.sfexpressService(data, validateStr, "OSMS_1");
- System.out.println("响应结果:" + s);
- }
- /**
- * 报文加密
- * @param orderData 报文
- * @return
- */
- private static String decodingValidCode(String orderData) {
- // 1、使用org.apache.commons.codec.binary.Base64加密
- return new Base64().encodeToString(orderData.getBytes());
- // 2、使用sun.misc.BASE64Encoder加密
- // return new sun.misc.BASE64Encoder().encode(orderData.getBytes());
- }
- /**
- * 报文加签:验证报文完整性
- * @param validCode 秘钥
- * @param xml 报文
- * verifyCode校验码的生成规则:接入IBS平台前,IBS平台系统管理员会为每个接入客户分配一个“密钥”,以下把密钥简称为checkword,verifyCode的生成规则为:
- 将xml报文进行Base64编码
- 将编码后的报文与checkword前后连接。
- 把连接后的字符串做MD5编码。
- 把MD5编码后的数据进行Base64编码,此时编码后的字符串即为verifyCode。
- */
- public static String jm(String validCode ,String xml){
- //校验加密测试
- // xml = "123456";
- // System.out.println("xml=" + xml);
- // System.out.println("checkword=" + validCode);
- //(1)xml+validCode
- String bind = xml + validCode;
- // System.out.println("xml+validCode:\n" + bind);
- //(2)对连接后的字符串做md5编码
- String md5 = DigestUtils.md5Hex(bind);
- System.out.println("md5连接后的字符串:" + md5);
- //(3)把MD5编码后的数据进行Base64编码
- // --1、使用sun.misc.BASE64Encoder加密
- // BASE64Encoder base64Sun = new sun.misc.BASE64Encoder();
- // String result = base64Sun.encode(md5.getBytes());
- // --2、使用org.apache.commons.codec.binary.Base64加密
- Base64 base64Apache = new Base64();
- String result = base64Apache.encodeToString(md5.getBytes());
- System.out.println("base64加签结果:" + result);
- return result;
- }
- /**
- * 读取接口xml文档
- * @param filePath 接口文档路径
- * @return
- */
- public static String readTxtFile(String filePath) {
- StringBuilder builder = new StringBuilder();
- try {
- String encoding = "UTF-8";
- //请求报文输出
- InputStream is = Test_apiOrderService.class.getResourceAsStream(filePath);
- byte[] buf = new byte[3072];
- int len = is.read(buf);
- System.out.println("请求报文:\n"+new String(buf,0,len,"utf-8"));
- InputStreamReader read = new InputStreamReader(Test_apiOrderService.class
- .getResourceAsStream(filePath), encoding);// 考虑到编码格式
- BufferedReader bufferedReader = new BufferedReader(read);
- String lineTxt = null;
- while ((lineTxt = bufferedReader.readLine()) != null) {
- builder.append(lineTxt);
- }
- read.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return builder.toString();
- }
- }
由于在实际生产中,我们是需要对请求报文做动态赋值的,所以对接口做了从新封装:传入对象,解析取值,xml报文通过xslt模板转换,请求服务端,获取响应,解析对端报文。
改造后的工程目录如下,因为比较简单,就不详细写:
其中lib支持使用了apache-cxf-2.1.4.tar.gz
最后,附上测试结果:
webService 客户端接口调用【java】的更多相关文章
- Axis2 WebService客户端Axis2调用
第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.client; ...
- 微信退款和支付宝退款接口调用(java版)
项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...
- Webservice客户端动态调用服务端功能方法
一.发布WebService服务 方式一:在服务端生成wsdl文件,下方客户端直接引用即可 优点:针对要发布的方法生成一个wsdl文件即可,无需多余配置. 缺点:每次服务端方法发生改变都需 ...
- 模板短信接口调用java,pythoy版(二) 阿里大于
说明 功能:短信通知发送 + 短信发送记录查询,所有参数我没有改动,实测有效! 请自行参考 + 官方API! 短信模板示例:尊敬的${name},您的快递已在飞奔的路上,将在今天${time}送达您的 ...
- 模板短信接口调用java,pythoy版(一) 网易云信
说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...
- 基于JAVA的全国天气预报接口调用示例
step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...
- JAVA的免费天气api接口调用示例
step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...
- 使用GSoap开发WebService客户端与服务端
Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...
随机推荐
- 在Windows 下为PHP5.4安装PEAR, PHPUnit , phpDoc2
1.安装PEAR 官方网站: http://pear.php.net/ PHP 5.4 的 Windows 包中没有自带 PEAR,下载 http://pear.php.net/go-pear ...
- 【剑指offer】二叉树深度
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27249675 题目描写叙述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点 ...
- [Regex Expression] Find Sets of Characters
Regular Expression Character Classes define a group of characters we can use in conjunction with qua ...
- [Redux] Extracting Container Components (FilterLink)
Learn how to avoid the boilerplate of passing the props down the intermediate components by introduc ...
- 多路复用I/O select()
select(),poll(),epoll()的总结:http://www.cnblogs.com/Anker/p/3265058.html 在socket编程中,仅仅使用connect,accept ...
- Hacker(16)----防范端口扫描与嗅探
端口扫描与嗅探都是黑客常用的招数,其目的是定位目标计算机和窃取隐私信息.为确保自己计算机的安全,用户需要掌握防范嗅探与端口扫描的常见措施,保障个人隐私信息安全. 一.掌握防范端口扫描的常用措施 防范端 ...
- VB6.0连接MySQL数据库
VB6.0连接MySQL数据库
- 代码,显示IPhone剩余磁盘空间
#include <sys/mount.h> //这段代码示范怎么取得 iPhone 的剩余磁盘空间,还有全部磁盘空间 long long freeSpace() { struct sta ...
- 创建和管理表【weber出品必属精品】
创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespa ...
- 0129——UINavigationController
1.创建一个UINavigationController self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].boun ...