Java动态调用webService
axis2动态调用webService
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年12月15日 17:26:30 星期二
http://fanshuyao.iteye.com/
附件为代码压缩包
package com.chinagas.org.webservice; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.soap.SOAP11Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; /** * webservice 调用封装 */ public class WebServiceInvoker { /** * 构建webservice请求参数 * @param nameSpace 命名空间 * @param params * @param paramValues * @param paramPrefix 参数前缀 * @param method * @param wsMethodPrefix 调用的方法前缀 * @return */ private static OMElement buildParam(String nameSpace,String[] params, String[] paramValues, String paramPrefix, String method, String wsMethodPrefix) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace(nameSpace, wsMethodPrefix); // 设置方法名前缀 OMNamespace omNsParam = (paramPrefix==null?null:fac.createOMNamespace(nameSpace, paramPrefix)); //设置参数前缀 OMElement data = fac.createOMElement(method, omNs); // 获得要调用的方法名 for(int i=0;i<params.length;i++){ OMElement inner = fac.createOMElement(params[i], omNsParam); //注意这里,看参数有没有前缀,很重要2015-12-11 inner.setText(paramValues[i]); // 输入参数 data.addChild(inner); // 将该参数加入要调用的方法节点 } return data; } /** * * @param targetAirline EndpointReference对象 * @param nameSpace 命名空间,可以在http//……?wsdl中找到 * @param method 方法名 * @return */ private static Options buildOptions(EndpointReference targetAirline, String nameSpace, String method) { Options options = new Options(); options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); options.setAction(nameSpace + method); // 设置调用的命名空间加方法 options.setTo(targetAirline); return options; } public static OMElement createHeaderOMElement(String nameSpace, String wsHeaderNameSpace, String wsHeaderPrefix, String userName, String password){ OMFactory factory = OMAbstractFactory.getOMFactory(); OMNamespace namespace = factory.createOMNamespace( wsHeaderNameSpace, wsHeaderPrefix); OMElement header = factory.createOMElement("RequestSOAPHeader", namespace); OMElement usernameOM = factory.createOMElement("user", namespace); OMElement passwordOM = factory.createOMElement("password", namespace); usernameOM.setText(userName); passwordOM.setText(password); header.addChild(usernameOM); header.addChild(passwordOM); return header; } /** * 获得返回数据(XML格式) * @param targetAirline EndpointReference对象 * @param sender ServiceClient对象 * @param nameSpace 命名空间 * @param wsHeaderNameSpace Header命名空间 * @param wsHeaderPrefix Header命名空间前缀 * @param userName 用户名,允许为空 * @param password 密码,允许为空 * @param params 传递的参数名 * @param paramValues 传递的参数值 * @param paramPrefix 传递的参数前缀 * @param method ws调用方法名 * @param wsMethodPrefix ws调用方法名前缀 * @return XML格式的string */ private static String getResultByCode(EndpointReference targetAirline, ServiceClient sender, String nameSpace, String wsHeaderNameSpace, String wsHeaderPrefix, String userName, String password, String[] params, String[] paramValues, String paramPrefix, String method, String wsMethodPrefix) { try { sender.setOptions(buildOptions(targetAirline, nameSpace, method)); sender.addHeader(createHeaderOMElement(nameSpace, wsHeaderNameSpace, wsHeaderPrefix, userName, password)); OMElement result = sender.sendReceive(buildParam(nameSpace, params, paramValues, paramPrefix, method, wsMethodPrefix)); return result.toString(); } catch (Exception e) { e.printStackTrace(); return "调用出错!"; } } /** * 调用 WebService * @param url 请求的url * @param nameSpace 命名空间 * @param wsHeaderNameSpace header命名空间 * @param wsHeaderPrefix header前缀 * @param userName 用户名 * @param password 密码 * @param params 参数 * @param paramValues 参数的值 * @param paramPrefix 参数前缀 * @param method 调用的方法名 * @param wsMethodPrefix 调用的方法前缀 * @return */ public static Document invoke(String url, String nameSpace, String wsHeaderNameSpace, String wsHeaderPrefix, String userName, String password, String[] params, String[] paramValues,String paramPrefix, String method, String wsMethodPrefix) { try { EndpointReference targetAirline = new EndpointReference(url); ServiceClient sender = new ServiceClient(); return DocumentHelper.parseText(getResultByCode(targetAirline, sender, nameSpace, wsHeaderNameSpace, wsHeaderPrefix, userName, password, params, paramValues, paramPrefix, method, wsMethodPrefix)); } catch (DocumentException e) { System.out.println("无返回体"); return null; } catch (Exception e) { e.printStackTrace(); return null; }finally{ /*try { sender.cleanupTransport();//如果有超时问题,可以使用该代码 } catch (AxisFault e) { e.printStackTrace(); }*/ } } }
使用方法如下:
Document doc = WebServiceInvoker.invoke(pushConfig.getPushUrl(), pushConfig.getWsNameSpace(), pushConfig.getWsHeaderNameSpace(), pushConfig.getWsHeaderPrefix(), pushConfig.getUserName(), pushConfig.getUserPassword(), new String[]{pushConfig.getParam()}, new String[]{jsonString}, pushConfig.getParamPrefix(), pushConfig.getWsMethodName(), pushConfig.getWsMethodPrefix() );
自定义的一个配置实体类:
package com.chinagas.org.beans; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; // public class PushConfig{ //ID(通过序列:SEQ_PUSH_ID生成) private Long pushId; //推送名称 private String pushName; //系统名称 private String systemName; //推送地址 private String pushUrl; //推送类型(ws,resful) private String pushType; //ws命名空间 private String wsNameSpace; //ws调用方法名 private String wsMethodName; //用户名 private String userName; //密码 private String userPassword; //请求参数 private String param; //json类型) private String jsonType; //可用标识 private String enableFlag; // private Date createTime; // private Long createBy; // private Date modifyTime; // private Long modifyBy; //备注 private String remark; //头(Header)命名空间 private String wsHeaderNameSpace; //头(Header)前缀 private String wsHeaderPrefix; //方法前缀 private String wsMethodPrefix; //参数前缀 private String paramPrefix; //返回参数 private String paramReturn; public Long getPushId() { return this.pushId; } public void setPushId(Long pushId) { this.pushId = pushId; } public String getPushName() { return pushName; } public void setPushName(String pushName) { this.pushName = pushName; } public String getSystemName() { return this.systemName; } public void setSystemName(String systemName) { this.systemName = systemName; } public String getPushUrl() { return this.pushUrl; } public void setPushUrl(String pushUrl) { this.pushUrl = pushUrl; } public String getPushType() { return this.pushType; } public void setPushType(String pushType) { this.pushType = pushType; } public String getWsNameSpace() { return wsNameSpace; } public void setWsNameSpace(String wsNameSpace) { this.wsNameSpace = wsNameSpace; } public String getWsMethodName() { return wsMethodName; } public void setWsMethodName(String wsMethodName) { this.wsMethodName = wsMethodName; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public String getParam() { return param; } public void setParam(String param) { this.param = param; } public String getJsonType() { return this.jsonType; } public void setJsonType(String jsonType) { this.jsonType = jsonType; } public String getEnableFlag() { return this.enableFlag; } public void setEnableFlag(String enableFlag) { this.enableFlag = enableFlag; } @DateTimeFormat public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Long getCreateBy() { return createBy; } public void setCreateBy(Long createBy) { this.createBy = createBy; } @DateTimeFormat public Date getModifyTime() { return modifyTime; } public void setModifyTime(Date modifyTime) { this.modifyTime = modifyTime; } public Long getModifyBy() { return modifyBy; } public void setModifyBy(Long modifyBy) { this.modifyBy = modifyBy; } public String getRemark() { return this.remark; } public void setRemark(String remark) { this.remark = remark; } public String getWsHeaderNameSpace() { return wsHeaderNameSpace; } public void setWsHeaderNameSpace(String wsHeaderNameSpace) { this.wsHeaderNameSpace = wsHeaderNameSpace; } public String getWsHeaderPrefix() { return wsHeaderPrefix; } public void setWsHeaderPrefix(String wsHeaderPrefix) { this.wsHeaderPrefix = wsHeaderPrefix; } public String getWsMethodPrefix() { return wsMethodPrefix; } public void setWsMethodPrefix(String wsMethodPrefix) { this.wsMethodPrefix = wsMethodPrefix; } public String getParamPrefix() { return paramPrefix; } public void setParamPrefix(String paramPrefix) { this.paramPrefix = paramPrefix; } public String getParamReturn() { return paramReturn; } public void setParamReturn(String paramReturn) { this.paramReturn = paramReturn; } @Override public String toString() { return "PushConfig [pushId=" + pushId + ", pushName=" + pushName + ", systemName=" + systemName + ", pushUrl=" + pushUrl + ", pushType=" + pushType + ", wsNameSpace=" + wsNameSpace + ", wsMethodName=" + wsMethodName + ", userName=" + userName + ", userPassword=" + userPassword + ", param=" + param + ", jsonType=" + jsonType + ", enableFlag=" + enableFlag + ", createTime=" + createTime + ", createBy=" + createBy + ", modifyTime=" + modifyTime + ", modifyBy=" + modifyBy + ", remark=" + remark + ", wsHeaderNameSpace=" + wsHeaderNameSpace + ", wsHeaderPrefix=" + wsHeaderPrefix + ", wsMethodPrefix=" + wsMethodPrefix + ", paramPrefix=" + paramPrefix + ", paramReturn=" + paramReturn + "]"; } }
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年12月15日 17:26:30 星期二
http://fanshuyao.iteye.com/
相关推荐
Java调用WebService是Web服务交互的一种常见方式,而Axis2是一个高效的、可扩展的Web服务框架,它在Java世界中广泛用于创建和消费Web服务。本文将深入探讨使用Axis2.jar包来调用WebService的相关知识点。 一、Axis2...
Java和Axis2是开发Web服务客户端的重要工具,用于调用基于SOAP协议的Web服务。本文将深入探讨如何利用Java和Axis2库来实现这一功能,同时结合提供的代码示例进行详细解析。 首先,Web服务是一种通过网络进行通信的...
2. **使用Axis2的wsdl2java工具**:这个工具可以从WSDL文件生成Java客户端代码,包括服务代理类和服务接口。运行`wsdl2java`命令时,需要提供WSDL的URL或本地路径。生成的代码可以导入到项目中,方便调用服务。 3. ...
本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。
Java Axis调用WebService服务端是Java开发者在进行分布式系统交互时常见的一种技术实践。Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为...
Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;
AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...
最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!
2. **生成客户端代理类**:使用Axis的`wsdl2java`工具,从Web Service的WSDL(Web Service描述语言)文件生成Java客户端代理类。这一步可以通过命令行或者Ant脚本完成。 3. **配置HTTPS**:在生成的客户端代码中,...
java调用webservice,axis方式,从后台到页面一整套的demo供大家参考。最简单的demo,所以用的servlet写的。 鼓捣了两天,希望对大家有帮助,也为自己以后使用留个备份。有不明白的可以给我留言
Java调用WebService是Web服务交互中的常见场景,而Axis作为Apache组织开发的一个开源工具,专门用于简化Java应用程序与Web服务的交互。本篇文章将详细解析如何使用Java通过Axis客户端调用WebService,以及如何搭建和...
axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例
标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...
webseservice 客户端调用,java发布的axis2 webservice,通过 js调用调用webservice,普通ajax实现,里面有详细注释,代码简单明了,我自己做过测试。希望对大家有所帮助。
在本示例中,提供的"使用说明.txt"可能包含了关于如何使用Axis调用WebService的详细步骤和注意事项,而"axis"目录则可能包含Axis库的相关文件或示例代码。 总的来说,通过Apache Axis,Java开发者可以便捷地实现对...
本文将详细解析如何通过Apache Axis库在Java应用中调用WebService,具体聚焦于“JAVA调用webservice(axis方式)”这一主题。 ### Apache Axis简介 Apache Axis是一个开源的Java Web服务框架,支持SOAP协议,用于...
用AXIS2作为客户端调用webService的demo:本人亲测可用,eclipse工程java项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。
2. **生成Java客户端 stubs**:使用Apache Axis,你可以通过运行wsdl2java命令将WSDL文件转换为Java类,这些类(也称为stubs)代表了你可以调用的服务方法。这样,你可以像调用本地Java方法一样调用远程的WebService...