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/
Java动态调用webService,axis2动态调用webService的更多相关文章
- WebService – 2.动态调用WebService
在本节课程中,将演示如何通过程序动态添加.调用.编译.执行WebService并返回结果. WebService动态调用示意图 WebService相关知识 代码文档对象模型CodeDom的使用 编程 ...
- C#调用WebService服务(动态调用)
原文:C#调用WebService服务(动态调用) 1 创建WebService using System; using System.Web.Services; namespace WebServi ...
- AXIS2远程调用WebService示例(Eclipse+AXIS)
转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3071584.html 我们将Web Service发布在Tomcat或者其他应 ...
- delphi7调用java写的webservice,在调用的时候弹出“wssecurityhandler:request does not contain required security header”
delphi7调用java编写的webservice问题我用delphi7调用java写的webservice,在调用的时候弹出“wssecurityhandler:request does not ...
- [z] .net与java建立WebService再互相调用
http://blog.csdn.net/yenange/article/details/5824967 : .net建立WebService,在Java中调用. 1.在vs中新建web 简单修改一下 ...
- java webservices 以Axis1.4方式 调用sap webservice接口.
1. 首先需要下载Axis1.4 jar包,这个必应搜索大把,下载下来后把jar包加入eclipse工程项目路径中即可. 2. 下载mail.jar和activation.jar 俩个包.下载地址:h ...
- .net与java建立WebService再互相调用
A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...
- WebService(1-1)webservice调用
参考url : http://www.cnblogs.com/flying607/p/6254045.html 今天用动态创建客户端的方式调用webservice,报了这样一个错: 2017-01-0 ...
- WebService-01-使用jdk发布第一个WebService服务并调用
Webservice是SOAP+XML,SOAP是基于Http的,Http底层是Socket,先回顾一下Socket: Server: public class Server { public sta ...
随机推荐
- Android如何在一个线性布局里完美显示两个listview啊?
复写一个listView ,在你布局文件中使用此view: <ScrollView android:layout_width="fill_parent" android:la ...
- Apache Struts 远程代码执行漏洞(CVE-2013-4316)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...
- BZOJ1345: [Baltic2007]序列问题Sequence
1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 556 Solved: 274[Submi ...
- BZOJ2661: [BeiJing wc2012]连连看
2661: [BeiJing wc2012]连连看 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 483 Solved: 200[Submit][S ...
- android基本的数据库创建和使用
android的四大组件中就有Content Provider,对其他应用,提供自己的数据,所以,一般情况下,android应用不需要提供content provider. 1. 简单的数据库表单字 ...
- 返回当前页面title、url等操作
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; /* * 返回当前页面 ur ...
- 【leetcode】编辑距离
dp方程“ 1.初始化:dp[0][i]=i; dp[j][0]=j; 2.dp[i][j]= dp[i-1][j-1](相等) dp[i-1][j]+1 ,,dp[i][j-1]+1 ...
- JAVA网络编程基础知识
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...
- 初级程序员应该了解的Linux命令
基于Linux的系统最美妙的一点,就是你可以在终端中使用命令行来管理整个系统.使用命令行的优势在于,你可以使用相同的知识和技能来管理随便哪个Linux发行版. 对于各个发行版以及桌面环境(DE)而言, ...
- Android开发——新特性与知识点回顾
Fragment 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity 定义布局文件作为Fra ...