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 ...
随机推荐
- java的File类的 delete方法删不掉文件的原因分析
先举几个可以删除掉文件和删除不掉文件的例子(先在F盘创建test1.txt文件,然后可以直接拷贝代码到IDE执行),最后总结下原因: 例子一:下面的例子毫无疑问是能够删除掉文件的 import jav ...
- android文字阴影效果设置
<TextView android:id="@+id/tvText1" android:layout_width="wrap_content" andro ...
- 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication 基于语句和行的复制的优势和劣势
17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication 基于语句和行的复制的优势和劣势 每 ...
- 3D旋转特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- bzoj2186
首先我们看到题目要求的是1~N!内有M!互质的个数 N!>M!,而我们是知道在M!以内与M!互质的数的个数,即phi(M!) 但是M!~N!内与M!互质的数有多少个呢? 对于每个互质的数,如果我 ...
- (转载)Total Commander 常用快捷键(并附快捷键大全)
(转载)http://blog.chinaunix.net/uid-532511-id-3051990.html Total Commander 常用快捷键 喜欢用Total Commander的人, ...
- DevExpress gridControl控件动态绑定列 zt
DataTable dt = =Query.GetCustome=(ref customColumnCount); //绑定列 gridView.Columns.Add(}); gridView.Co ...
- 进军es6(2)---解构赋值
本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...
- 项目杂记(MONTHS_BETWEEN,Having ,Spool)
1,oracle中计算年龄: select FLOOR(MONTHS_BETWEEN(SYSDATE, to_date('20130728', 'yyyymmdd')) / 12), trunc(mo ...
- Bzoj 1046: [HAOI2007]上升序列 二分,递推
1046: [HAOI2007]上升序列 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3671 Solved: 1255[Submit][Stat ...