最近实际项目中使用到了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】的更多相关文章

  1. Axis2 WebService客户端Axis2调用

    第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.client; ...

  2. 微信退款和支付宝退款接口调用(java版)

    项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可 ...

  3. Webservice客户端动态调用服务端功能方法

    一.发布WebService服务 方式一:在服务端生成wsdl文件,下方客户端直接引用即可     优点:针对要发布的方法生成一个wsdl文件即可,无需多余配置.   缺点:每次服务端方法发生改变都需 ...

  4. 模板短信接口调用java,pythoy版(二) 阿里大于

    说明 功能:短信通知发送 + 短信发送记录查询,所有参数我没有改动,实测有效! 请自行参考 + 官方API! 短信模板示例:尊敬的${name},您的快递已在飞奔的路上,将在今天${time}送达您的 ...

  5. 模板短信接口调用java,pythoy版(一) 网易云信

    说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...

  6. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用

    近来由于项目需要,需要用到手机短信验证码的功能,其中最主要的是用到了第三方提供的短信平台接口WebService客户端接口,下面我把我在项目中用到的记录一下,以便给大家提供个思路,由于本人的文采有限, ...

  7. 基于JAVA的全国天气预报接口调用示例

    step1:选择本文所示例的接口"全国天气预报接口" url:https://www.juhe.cn/docs/api/id/39/aid/87step2:每个接口都需要传入一个参 ...

  8. JAVA的免费天气api接口调用示例

    step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...

  9. 使用GSoap开发WebService客户端与服务端

    Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...

随机推荐

  1. web.xml配置DispatcherServlet

    1. org.springframework.web.servlet.DispatcherServlet 所在jar包: <dependency> <groupId>org.s ...

  2. BuguMongo是一个MongoDB Java开发框架,集成了DAO、Query、Lucene、GridFS等功能

    http://code.google.com/p/bugumongo/ 简介 BuguMongo是一个MongoDB Java开发框架,它的主要功能包括: 基于注解的对象-文档映射(Object-Do ...

  3. Android-IM架构设计

    ###1. 架构总览 ###2. 模块介绍 ####2.1 协议封装与任务流程 #####1) 协议与任务的封装 a. 协议有协议头(协议头因为格式相同,被抽象出来)和协议体组成,协议有两类:请求协议 ...

  4. Internetmap.apk实现原理分析

    1.本地实现调用 程序根据data文件目录下的asinfo.json文件(包含自治域网络名和对应的坐标值),调用so文件绘制asn结点图(ASN,AutoSystemNode,自治域结点) 2.路由查 ...

  5. (转)走进JVM,浅水也能捉鱼

    这不是一篇描述jvm是什么的文章,也不介绍jvm跨平台的特性,也不是讲述jvm安全特性的文章,更不是讲解jvm指令操作,数据运算的文章,本文重点讲述类型的生命周期. 类型的生命周期涉及到:类的装载.j ...

  6. oracle登录错误(ORA-01033:ORACLE initialization or shutdown in progress

    在网上查找出现这种错误的原因一般是因为删除数据库 安装文件下的某个文件造 成的, 但是在我们的服务器上是因为 机子重启(意外断电)了一下就造 成这样的错误,不过解决办法是一样的,下面贴上解决方案 解决 ...

  7. 2、shell命令学习

    1.第一个例子 touch test.sh vim test.sh #!/bin/bash echo "hello world" chmod 755 test.sh ./test. ...

  8. JSP 实现 之 调用java方法实现MySQL数据库备份和恢复

    package cn.qm.db; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.IOEx ...

  9. 使用python发邮件

    使用python发邮件 网上有很多发邮件的例子,本人在网上找了一份,稍加修改后使用 上源码 # encoding=utf-8 from email.mime.image import MIMEImag ...

  10. “Win”组合键

    Windows组合键功能: 单独按下显示或隐藏 [开始] 功能表. +Break 显示 [系统内容] 对话方块. +D 显示桌面. +M 最小化所有的视窗. +Shift+M 还原最小化的视窗. +E ...