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,axis2动态调用webService的更多相关文章

  1. WebService – 2.动态调用WebService

    在本节课程中,将演示如何通过程序动态添加.调用.编译.执行WebService并返回结果. WebService动态调用示意图 WebService相关知识 代码文档对象模型CodeDom的使用 编程 ...

  2. C#调用WebService服务(动态调用)

    原文:C#调用WebService服务(动态调用) 1 创建WebService using System; using System.Web.Services; namespace WebServi ...

  3. AXIS2远程调用WebService示例(Eclipse+AXIS)

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html 我们将Web Service发布在Tomcat或者其他应 ...

  4. delphi7调用java写的webservice,在调用的时候弹出“wssecurityhandler:request does not contain required security header”

    delphi7调用java编写的webservice问题我用delphi7调用java写的webservice,在调用的时候弹出“wssecurityhandler:request does not ...

  5. [z] .net与java建立WebService再互相调用

    http://blog.csdn.net/yenange/article/details/5824967 : .net建立WebService,在Java中调用. 1.在vs中新建web 简单修改一下 ...

  6. java webservices 以Axis1.4方式 调用sap webservice接口.

    1. 首先需要下载Axis1.4 jar包,这个必应搜索大把,下载下来后把jar包加入eclipse工程项目路径中即可. 2. 下载mail.jar和activation.jar 俩个包.下载地址:h ...

  7. .net与java建立WebService再互相调用

    A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...

  8. WebService(1-1)webservice调用

    参考url : http://www.cnblogs.com/flying607/p/6254045.html 今天用动态创建客户端的方式调用webservice,报了这样一个错: 2017-01-0 ...

  9. WebService-01-使用jdk发布第一个WebService服务并调用

    Webservice是SOAP+XML,SOAP是基于Http的,Http底层是Socket,先回顾一下Socket: Server: public class Server { public sta ...

随机推荐

  1. java WebService简单使用案例

    首先,建立一个WebService: package garfield; import javax.jws.WebService; import javax.xml.ws.Endpoint; @Web ...

  2. X86汇编快速入门

    http://www.cnblogs.com/YukiJohnson/archive/2012/10/27/2741836.html

  3. jQueryEasyUI中DataGrid的height,width,fit,fitColumns属性

    height: 600, //不指定则默认垂直包裹,指定了则固定 width:1200,//不指定则水平100%平铺,指定了则固定 fit:false,//true:高度填充父窗体,忽略height属 ...

  4. INFORMATION_SCHEMA.INNODB_LOCKS

    INNODB_LOCKS Table: INNODB_LOCKS 表 包含信息关于每个锁 一个InnoDB 事务已经请求 但是没有获得锁, 每个lock 一个事务持有是堵塞另外一个事务 centos6 ...

  5. 3.android下Makefile编写规范

    随着移动互联网的发展,移动开发也越来越吃香了,目前最火的莫过于android,android是什么就不用说了,android自从开源以来,就受到很多人的追捧.当然,一部人追捧它是因为它是Google开 ...

  6. 【HDOJ】3277 Marriage Match III

    Dinic不同实现的效率果然不同啊. /* 3277 */ #include <iostream> #include <string> #include <map> ...

  7. 一台机器上运行多个ActiveMq

    由于业务需要一台机器上运行多个ActiveMq,这里主要说一下有什么地方不重复: 1.brokerName名称不能重复 2.端口号不能重复uri = tcp://localhost:50509 3.k ...

  8. Devexpress之DateEdit学习,可选择日期时 zt

    DateEdit默认是是值只可以选择日期的,下面就来看看怎么设置可以选择时间. 代码如下. 设置以下属性 dateEdit1.Properties.VistaDisplayMode = DevExpr ...

  9. HDU-1335 Basically Speaking

    http://acm.hdu.edu.cn/showproblem.php?pid=1335 Basically Speaking Time Limit: 2000/1000 MS (Java/Oth ...

  10. Ora-12154:无法解析连接字符串

    服务器的环境为: 系统:Windows server 2008 64位 数据库:Oracle 10g WEB应用服务:IIS 7.0+.Net Framework 4.0 解决方法 Toad for ...