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单点登录配置[5]:测试与总结

    终于要结束了... 测试 1 我们同时打开Tomcat6和Tomcat7,如果报错请修改. 打 开浏览器,输入http://fighting.com/Client1,进入CAS登录界面,这里我们先输入 ...

  2. eMMC尺寸

    eMMC Physical Specifications主要有四种结构,pin角定义及功能上基本一致,主要是看应用平台的需求: AA:12mm*16mm 169Pin  AB:12mm*18mm 16 ...

  3. 猜测:信号槽的本质是使用Windows的自定义消息来实现的

    在不断执行: void MyTool::DeleteAllFiles(){ for (i = 0; i <= n - 1; i++) { // do something }}在for循环没有执行 ...

  4. 转:十九、Java的接口及实例

    http://blog.csdn.net/liujun13579/article/details/7736116 一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合 ...

  5. Node.js权威指南 (12) - Node.js中的其他模块

    12.1 使用dns模块解析域名 / 313 12.1.1 使用resolve方法将域名解析为DNS记录 / 313 12.1.2 使用lookup方法查询IP地址 / 315 12.1.3 使用re ...

  6. ☀【canvas】直线 / 三角形 / 矩形 / 曲线 / 控制点 / 变换

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  7. Android4.0 -- UI控件之 Menu 菜单的的使用(一)

      这一讲开始我们来讲一下Android中菜单的使用方法,菜单是应用中的普通的组件,主要是提供友好和专注的用户体验,你可以在你的Activity中使用 Menu APIs 来提供用户动作和其他选项的操 ...

  8. Makefile第四讲:include 引用其它makefile文件

    main.cpp #include "classes/fun.h" int main() { Test::display("Hello makefile"); ...

  9. 2D游戏编程2--windows高级编程

      windows应用程序布局 编译流程 响应菜单事件消息 菜单消息处理实例: LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wpar ...

  10. Using OpenCV with gcc and CMake

    Using OpenCV with gcc and CMake Note We assume that you have successfully installed OpenCV in your w ...