webservice 动态调用 java_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

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值