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. CAS单点登录配置[3]:服务器端配置

    在准备工作,证书生成等工作完成后,本篇介绍服务器端的配置. JDK配置 1 我们将生成的cacerts文件分别拷贝到JDK目录下的jre/lib/security目录下及JRE对应的目录中,如果之前存 ...

  2. VS2005 检测内存泄漏的方法(转载)

    一.非MFC程序可以用以下方法检测内存泄露: 1.程序开始包含如下定义: #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __F ...

  3. 为什么手机连接wifi会显示已停用?

    1.通常导致手机连接WiFi显示“已停用”故障的原因是由于无线路由器“安全模式”设置不当造成的,对此我们可以通过以下方法来解决: 2.根据无线路由器背面的信息(包括路由器IP地址,登陆用户名和密码), ...

  4. C++小知识之Vector用法

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...

  5. [LeetCode#161] One Edit Distance

    Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...

  6. ☀【CSS3】背景图片

    CSS3全新的背景图片方案http://www.cnblogs.com/rubylouvre/p/3401125.html

  7. WinDump使用方法

    转自:http://blog.csdn.net/weiyuweizhi/article/details/4326174 在命令行下启动windump.exe 参数列表: -a              ...

  8. 排序 O(nlogn)

    1. 堆排序是一种优秀的排序算法,时间复杂度O(nlogn),主要思想是用数组构造一个最大堆,满足跟节点的value>子节点的value,然后将堆顶元素(value最大)与最后一个叶子节点交换, ...

  9. Poj 2299 - Ultra-QuickSort 离散化,树状数组,逆序对

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 52306   Accepted: 19194 ...

  10. 解决windows10搜索不到内容的问题

    windows 10的搜索突然搜不到程序了, 网上查询说要重建索引,方法如下: 1.按ctr+R键,输入%LocalAppData%\Packages\windows.immersivecontrol ...