欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-01 22:35:33
...

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/