`

Java动态调用webService,axis2动态调用webService

阅读更多

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/

 

1
1
分享到:
评论

相关推荐

    java调用webservice的axis2.jar包

    Java调用WebService是Web服务交互的一种常见方式,而Axis2是一个高效的、可扩展的Web服务框架,它在Java世界中广泛用于创建和消费Web服务。本文将深入探讨使用Axis2.jar包来调用WebService的相关知识点。 一、Axis2...

    Java+Axis2调用Web Services 网络接口

    Java和Axis2是开发Web服务客户端的重要工具,用于调用基于SOAP协议的Web服务。本文将深入探讨如何利用Java和Axis2库来实现这一功能,同时结合提供的代码示例进行详细解析。 首先,Web服务是一种通过网络进行通信的...

    axis2发布webservice和调用axis2服务接口

    2. **使用Axis2的wsdl2java工具**:这个工具可以从WSDL文件生成Java客户端代码,包括服务代理类和服务接口。运行`wsdl2java`命令时,需要提供WSDL的URL或本地路径。生成的代码可以导入到项目中,方便调用服务。 3. ...

    java客户端调用webservice所调用的axis1.4包和方法调用

    本方法是用axis1.4技术,实现java客户端调用webservice。已经可实现过可行的,如果不行可加我QQ号302633进行详细解析。

    java axis 调用webservice服务端

    Java Axis调用WebService服务端是Java开发者在进行分布式系统交互时常见的一种技术实践。Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为...

    Java Axis 直接调用webservice 接口工具类

    Java Axis 直接调用webservice 接口工具类, 无需根据wsdl编译客户端,需要axis相关包,测试使用axis 1.4, 附demo引入axis包后直接可以测试;

    AXIS2远程调用WebService示例(Eclipse+AXIS2)工具和所用包.rar

    AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...

    springboot动态调用webservice接口

    最近项目中遇到需要去掉老系统的webservice服务中的insert方法,找了很久,发现这样最简单,实测有效!!!

    java 调用https webservice实例及axis包

    2. **生成客户端代理类**:使用Axis的`wsdl2java`工具,从Web Service的WSDL(Web Service描述语言)文件生成Java客户端代理类。这一步可以通过命令行或者Ant脚本完成。 3. **配置HTTPS**:在生成的客户端代码中,...

    java调用webservice axis方式

    java调用webservice,axis方式,从后台到页面一整套的demo供大家参考。最简单的demo,所以用的servlet写的。 鼓捣了两天,希望对大家有帮助,也为自己以后使用留个备份。有不明白的可以给我留言

    java调用webservice axis 客户端 服务器端 包含jar包

    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例子 webservice axis2 示例

    Axis2教程和java调用webservice的各种方法总结

    标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...

    java webservice axis2 通过 js javascript 调用webservice

    webseservice 客户端调用,java发布的axis2 webservice,通过 js调用调用webservice,普通ajax实现,里面有详细注释,代码简单明了,我自己做过测试。希望对大家有所帮助。

    JAVA调用WebService(Axis)

    在本示例中,提供的"使用说明.txt"可能包含了关于如何使用Axis调用WebService的详细步骤和注意事项,而"axis"目录则可能包含Axis库的相关文件或示例代码。 总的来说,通过Apache Axis,Java开发者可以便捷地实现对...

    JAVA调JAVA调用webservice(axis方式).doc 用webservice(axis方式).doc

    本文将详细解析如何通过Apache Axis库在Java应用中调用WebService,具体聚焦于“JAVA调用webservice(axis方式)”这一主题。 ### Apache Axis简介 Apache Axis是一个开源的Java Web服务框架,支持SOAP协议,用于...

    AXIS2作为客户端调用webService的demo

    用AXIS2作为客户端调用webService的demo:本人亲测可用,eclipse工程java项目包含完整代码和完整jar包, 只要用eclipse导入项目即可,运行控制台显示success或者false字符串,说明OK。

    java 通过axis调用天气预报的webservice

    2. **生成Java客户端 stubs**:使用Apache Axis,你可以通过运行wsdl2java命令将WSDL文件转换为Java类,这些类(也称为stubs)代表了你可以调用的服务方法。这样,你可以像调用本地Java方法一样调用远程的WebService...

Global site tag (gtag.js) - Google Analytics