基于Axis服务端的webservice客户端实现
之前开发webservice客户端的时候遇到一个使用Axis2开发接口的厂家,查资料把Axis1和Axis2客户端的开发方式总结如下:
基于Axis1服务端的客户端实现:
/*** 使用Axis Call Client动态调用WebService* @param requestXml 请求报文* @param wsdl webservice地址* @param targetNamespace 命名空间* @param webServiceMethod 访问的方法名* @return*/
public String getRespByAxisCallClient(String requestXml, String wsdl,String targetNamespace, String webServiceMethod){String respXml = "";try{Service service = new Service();Call call = (Call) service.createCall();//设置要访问的WSDL地址call.setTargetEndpointAddress(new URL(wsdl));//设置要访问的方法名call.setOperationName(new QName(wsdl,webServiceMethod));//设置参数call.addParameter("XMLFrom", XMLType.XSD_STRING, ParameterMode.IN);//设置返回值类型call.setReturnType(XMLType.XSD_STRING);//调用服务respXml = (String) call.invoke(new Object[] { requestXml.toString() }); }catch(Exception e){logger.error("服务调用异常",e);}return respXml;
}
Call在线API:http://axis.apache.org/axis/java/apiDocs/org/apache/axis/client/Call.html
/*** 方法一:RPC调用webservice Axis2服务* @param wsdl 接口服务端调用地址* @param webServiceMethod 调用方法* @param inParam 请求参数* @param targetNamespace 命名空间* @return*/
public String getRespByAxisRPCClient(Map<String,Object> inParam, String wsdl,String targetNamespace, String webServiceMethod){String responseStr = "";RPCServiceClient serviceClient = null;
try{//获取RPCServiceClient对象serviceClient = new RPCServiceClient();//获取Options对象Options options = serviceClient.getOptions();//指定调用webservice的URLEndpointReference targetERP = new EndpointReference(wsdl);options.setTo(targetERP);//指定要调用的方法及wsdl文件的命名空间QName opAddEntry = new QName("http://ws.apache.org/axis2",webServiceMethod);//指定method的入参Object[] opAddEntryArgs = inParam.values().toArray();//指定方法返回值的数据类型class对象Class[] classes = new Class[]{String.class};//调用服务responseStr = (String) serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0];
}catch(Exception e){logger.error("RPCServiceClient error",e);throw new RuntimeException("RPCServiceClient error",e);
}finally{try {serviceClient.cleanupTransport();} catch (AxisFault e) {logger.error("RPCServiceClient cleanupTransport error",e);throw new RuntimeException("RPCServiceClient error",e);}
}return responseStr;
}
错误一:
axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar
错误二:
原因:webservice调用连接池默认只有两个连接,每次调用完必须释放连接,否则很快就会没连接。需要在finally中加入以下代码,释放掉已有的连接。
finally{try {serviceClient.cleanupTransport();} catch (AxisFault e) {logger.error("RPCServiceClient cleanupTransport error",e);throw new RuntimeException("RPCServiceClient error",e);}
}
错误三:
原因:缺少jar包 mail-1.4.jar
/*** 方法二: 应用document方式调用 webservice服务,用ducument方式可以摆脱我们不想要的耦合* @param wsdl webservice地址**/public static void getRespByDocument(String wsdl,String user,String password) {try {//获取Options对象Options options = new Options(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(wsdl); options.setTo(targetEPR); // options.setAction("urn:getPrice"); //获取ServiceClient对象ServiceClient serviceClient = new ServiceClient(); serviceClient.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); String tns = "http://quickstart.samples/"; // 命名空间,有时命名空间不增加没事,不过最好加上,因为有时会出问题OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement method = fac.createOMElement("getPrice", omNs); OMElement symbol = fac.createOMElement("symbol", omNs); // symbol.setText("1"); symbol.addChild(fac.createOMText(symbol, "Axis2 Echo String ")); method.addChild(symbol); method.build(); //为SOAP Header构造验证信息addValidation(serviceClient,tns,user,password);//调用服务OMElement result = serviceClient.sendReceive(method); }catch (AxisFault axisFault) { axisFault.printStackTrace(); } }/*** 为SOAP Header构造验证信息,* 如果你的服务端是没有验证的,那么你不用在Header中增加验证信息** @param serviceClient* @param tns 命名空间* @param user* @param passwrod*/ public static void addValidation(ServiceClient serviceClient, String tns , String user, String passwrod) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace(tns, "nsl"); OMElement header = fac.createOMElement("AuthenticationToken", omNs); OMElement ome_user = fac.createOMElement("Username", omNs); OMElement ome_pass = fac.createOMElement("Password", omNs); ome_user.setText(user); ome_pass.setText(passwrod); header.addChild(ome_user); header.addChild(ome_pass); serviceClient.addHeader(header); }
基于Axis服务端的webservice客户端实现相关推荐
- 【REST】基于RESTful服务端的客户端实现(HttpClient、RestTemplate、HttpURLConnection)
最近一直在做针对webservice的接口协议对接,总结了一下基于restful服务端的客户端的实现方式,有以下三种: HTTPClient RestTemplate HttpURLConnectio ...
- 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互
基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...
- websocket服务端和html客户端进行二进制数据交互
一.概念和理论理解 1.HTTP HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接. 无状态:每次连接只处理一个请求,请求结束后断开连接. 无连接:对于事务处理没有 ...
- ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息
找了很多配置文档及实例说明,也还是没能成功,最终在csdn博客中发现了基于stomp的消息推送的文章, 下面整理自csdn博客,https://blog.csdn.net/u013627689/art ...
- 服务端渲染vs客户端渲染到前后端同构
关于服务端渲染与客户端渲染的优劣,互联网上已经有过很多的文章进行过分析,在这里我谈一下我个人的见解. 首先,还是来老生常谈一下关于两种渲染方式的主要优劣: 服务端渲染(仅列出当下最突出的优劣): 优: ...
- 服务端渲染与客户端渲染详解(vue)
1.客户端请求 (1)用户在浏览器输入请求的地址例如:172.0.0.1:8080 到服务器 服务器接受到客户端的请求拿到一个没有被数据渲染的空页面 (2)客户端拿到服务端的空字符串页面,然后从上往下 ...
- WebService入门教程(服务端发布WebService)
本篇内容过多,时间紧迫的朋友可以通过目录快速筛选自己想要看的内容,本人接触webservice也没多久,也处于学习阶段,如果有错误请指正,如果已经是大神请略过这篇文章,这篇文章不涉及webservic ...
- android mqtt服务器搭建,Mqtt从服务端到Android客户端搭建(mqtt服务端搭建)
一.简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议. 此处不再引入官方文字描述,以个人开发认识浅谈一下 本文分为两部分: 1. M ...
- netty tcp服务端主动断开客户端_「Netty核心技术」6-ChannelPipeline源码
ChannelPipeline是Channelhandler的容器,它负责ChannelHandler的管理和事件拦截与调度. 土话: ChannelPipeline就是用来管理Channelhand ...
最新文章
- OpenSceneGraph 笔记--如何导出三角形数据
- matlan数据分析库函数
- Docker Review - Docker 概念 入门篇
- Hyperopt中文文档:Cite引用
- cdlinux miniwdep 配置无线网卡
- 380万赌石(翡翠原石)切出2亿,现在值多少钱了?
- JAVA DES加密解密代码范例
- Spine_图片显示出错的处理方法
- Activity的神奇启动模式之singleTask
- 【NDN安全】Poseidon: Mitigating Interest Flooding DDoS Attacks in Named Data Networking 学习笔记
- iis中应用程序服务器错误,iis应用程序服务器错误
- 基于VisMockup装配公差分析技术(VisVSA)的介绍
- 非参数统计的Python实现——卡方独立性检验
- 如何给图片加水印?这三个图片加水印方法,帮你添加花式水印
- Rushcrm:如何利用CRM系统的权限设置
- 圣天诺SuperPro狗模拟视频语音教程
- c语言输出法雷序列,法雷(法里)序列 - osc_h0wb1wlt的个人空间 - OSCHINA - 中文开源技术交流社区...
- BI神器Power Query(16)-- PQ制作时间维度表(5)
- 背景随意更换,同时改变多个竖屏短视频背景图片的两种方法
- 2018年英语专升本英语阅读「Part II 阅读专区」【文章(图片)、答案、词汇记忆】