Java动态调用webService

axis2动态调用webService

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2015年12月15日 17:26:30 星期二

http://fanshuyao.iteye.com/

附件为代码压缩包

  1. package com.chinagas.org.webservice;
  2.  
  3. import org.apache.axiom.om.OMAbstractFactory;
  4. import org.apache.axiom.om.OMElement;
  5. import org.apache.axiom.om.OMFactory;
  6. import org.apache.axiom.om.OMNamespace;
  7. import org.apache.axiom.soap.SOAP11Constants;
  8. import org.apache.axis2.addressing.EndpointReference;
  9. import org.apache.axis2.client.Options;
  10. import org.apache.axis2.client.ServiceClient;
  11. import org.dom4j.Document;
  12. import org.dom4j.DocumentException;
  13. import org.dom4j.DocumentHelper;
  14.  
  15. /**
  16. * webservice 调用封装
  17. */
  18. public class WebServiceInvoker {
  19.  
  20. /**
  21. * 构建webservice请求参数
  22. * @param nameSpace 命名空间
  23. * @param params
  24. * @param paramValues
  25. * @param paramPrefix 参数前缀
  26. * @param method
  27. * @param wsMethodPrefix 调用的方法前缀
  28. * @return
  29. */
  30. private static OMElement buildParam(String nameSpace,String[] params, String[] paramValues,
  31. String paramPrefix, String method, String wsMethodPrefix) {
  32. OMFactory fac = OMAbstractFactory.getOMFactory();
  33. OMNamespace omNs = fac.createOMNamespace(nameSpace, wsMethodPrefix); // 设置方法名前缀
  34. OMNamespace omNsParam = (paramPrefix==null?null:fac.createOMNamespace(nameSpace, paramPrefix)); //设置参数前缀
  35. OMElement data = fac.createOMElement(method, omNs); // 获得要调用的方法名
  36. for(int i=0;i<params.length;i++){
  37. OMElement inner = fac.createOMElement(params[i], omNsParam); //注意这里,看参数有没有前缀,很重要2015-12-11
  38. inner.setText(paramValues[i]); // 输入参数
  39. data.addChild(inner); // 将该参数加入要调用的方法节点
  40. }
  41. return data;
  42. }
  43.  
  44. /**
  45. *
  46. * @param targetAirline EndpointReference对象
  47. * @param nameSpace 命名空间,可以在http//……?wsdl中找到
  48. * @param method 方法名
  49. * @return
  50. */
  51. private static Options buildOptions(EndpointReference targetAirline, String nameSpace, String method) {
  52. Options options = new Options();
  53. options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
  54. options.setAction(nameSpace + method); // 设置调用的命名空间加方法
  55. options.setTo(targetAirline);
  56. return options;
  57. }
  58.  
  59. public static OMElement createHeaderOMElement(String nameSpace, String wsHeaderNameSpace,
  60. String wsHeaderPrefix, String userName, String password){
  61. OMFactory factory = OMAbstractFactory.getOMFactory();
  62. OMNamespace namespace = factory.createOMNamespace(
  63. wsHeaderNameSpace, wsHeaderPrefix);
  64. OMElement header = factory.createOMElement("RequestSOAPHeader",
  65. namespace);
  66. OMElement usernameOM = factory.createOMElement("user", namespace);
  67. OMElement passwordOM = factory.createOMElement("password", namespace);
  68. usernameOM.setText(userName);
  69. passwordOM.setText(password);
  70. header.addChild(usernameOM);
  71. header.addChild(passwordOM);
  72. return header;
  73. }
  74.  
  75. /**
  76. * 获得返回数据(XML格式)
  77. * @param targetAirline EndpointReference对象
  78. * @param sender ServiceClient对象
  79. * @param nameSpace 命名空间
  80. * @param wsHeaderNameSpace Header命名空间
  81. * @param wsHeaderPrefix Header命名空间前缀
  82. * @param userName 用户名,允许为空
  83. * @param password 密码,允许为空
  84. * @param params 传递的参数名
  85. * @param paramValues 传递的参数值
  86. * @param paramPrefix 传递的参数前缀
  87. * @param method ws调用方法名
  88. * @param wsMethodPrefix ws调用方法名前缀
  89. * @return XML格式的string
  90. */
  91. private static String getResultByCode(EndpointReference targetAirline, ServiceClient sender, String nameSpace, String wsHeaderNameSpace,
  92. String wsHeaderPrefix, String userName, String password,
  93. String[] params, String[] paramValues, String paramPrefix,
  94. String method, String wsMethodPrefix) {
  95. try {
  96. sender.setOptions(buildOptions(targetAirline, nameSpace, method));
  97. sender.addHeader(createHeaderOMElement(nameSpace, wsHeaderNameSpace,
  98. wsHeaderPrefix, userName, password));
  99. OMElement result = sender.sendReceive(buildParam(nameSpace,
  100. params, paramValues, paramPrefix,
  101. method, wsMethodPrefix));
  102. return result.toString();
  103. } catch (Exception e) {
  104. e.printStackTrace();
  105. return "调用出错!";
  106. }
  107.  
  108. }
  109.  
  110. /**
  111. * 调用 WebService
  112. * @param url 请求的url
  113. * @param nameSpace 命名空间
  114. * @param wsHeaderNameSpace header命名空间
  115. * @param wsHeaderPrefix header前缀
  116. * @param userName 用户名
  117. * @param password 密码
  118. * @param params 参数
  119. * @param paramValues 参数的值
  120. * @param paramPrefix 参数前缀
  121. * @param method 调用的方法名
  122. * @param wsMethodPrefix 调用的方法前缀
  123. * @return
  124. */
  125. public static Document invoke(String url, String nameSpace, String wsHeaderNameSpace,
  126. String wsHeaderPrefix, String userName, String password,
  127. String[] params, String[] paramValues,String paramPrefix,
  128. String method, String wsMethodPrefix) {
  129. try {
  130. EndpointReference targetAirline = new EndpointReference(url);
  131. ServiceClient sender = new ServiceClient();
  132. return DocumentHelper.parseText(getResultByCode(targetAirline, sender, nameSpace, wsHeaderNameSpace,
  133. wsHeaderPrefix, userName, password,
  134. params, paramValues, paramPrefix, method, wsMethodPrefix));
  135. } catch (DocumentException e) {
  136. System.out.println("无返回体");
  137. return null;
  138. } catch (Exception e) {
  139. e.printStackTrace();
  140. return null;
  141. }finally{
  142. /*try {
  143. sender.cleanupTransport();//如果有超时问题,可以使用该代码
  144. } catch (AxisFault e) {
  145. e.printStackTrace();
  146. }*/
  147. }
  148. }
  149.  
  150. }

使用方法如下:

  1. Document doc = WebServiceInvoker.invoke(pushConfig.getPushUrl(),
  2. pushConfig.getWsNameSpace(),
  3. pushConfig.getWsHeaderNameSpace(),
  4. pushConfig.getWsHeaderPrefix(),
  5. pushConfig.getUserName(),
  6. pushConfig.getUserPassword(),
  7. new String[]{pushConfig.getParam()},
  8. new String[]{jsonString},
  9. pushConfig.getParamPrefix(),
  10. pushConfig.getWsMethodName(),
  11. pushConfig.getWsMethodPrefix()
  12. );

自定义的一个配置实体类:

  1. package com.chinagas.org.beans;
  2.  
  3. import java.util.Date;
  4.  
  5. import org.springframework.format.annotation.DateTimeFormat;
  6.  
  7. //
  8. public class PushConfig{
  9. //ID(通过序列:SEQ_PUSH_ID生成)
  10. private Long pushId;
  11. //推送名称
  12. private String pushName;
  13. //系统名称
  14. private String systemName;
  15. //推送地址
  16. private String pushUrl;
  17. //推送类型(ws,resful)
  18. private String pushType;
  19. //ws命名空间
  20. private String wsNameSpace;
  21. //ws调用方法名
  22. private String wsMethodName;
  23. //用户名
  24. private String userName;
  25. //密码
  26. private String userPassword;
  27. //请求参数
  28. private String param;
  29. //json类型)
  30. private String jsonType;
  31. //可用标识
  32. private String enableFlag;
  33. //
  34. private Date createTime;
  35. //
  36. private Long createBy;
  37. //
  38. private Date modifyTime;
  39. //
  40. private Long modifyBy;
  41. //备注
  42. private String remark;
  43. //头(Header)命名空间
  44. private String wsHeaderNameSpace;
  45. //头(Header)前缀
  46. private String wsHeaderPrefix;
  47. //方法前缀
  48. private String wsMethodPrefix;
  49. //参数前缀
  50. private String paramPrefix;
  51. //返回参数
  52. private String paramReturn;
  53.  
  54. public Long getPushId() {
  55. return this.pushId;
  56. }
  57.  
  58. public void setPushId(Long pushId) {
  59. this.pushId = pushId;
  60. }
  61.  
  62. public String getPushName() {
  63. return pushName;
  64. }
  65.  
  66. public void setPushName(String pushName) {
  67. this.pushName = pushName;
  68. }
  69.  
  70. public String getSystemName() {
  71. return this.systemName;
  72. }
  73.  
  74. public void setSystemName(String systemName) {
  75. this.systemName = systemName;
  76. }
  77.  
  78. public String getPushUrl() {
  79. return this.pushUrl;
  80. }
  81.  
  82. public void setPushUrl(String pushUrl) {
  83. this.pushUrl = pushUrl;
  84. }
  85.  
  86. public String getPushType() {
  87. return this.pushType;
  88. }
  89.  
  90. public void setPushType(String pushType) {
  91. this.pushType = pushType;
  92. }
  93.  
  94. public String getWsNameSpace() {
  95. return wsNameSpace;
  96. }
  97.  
  98. public void setWsNameSpace(String wsNameSpace) {
  99. this.wsNameSpace = wsNameSpace;
  100. }
  101.  
  102. public String getWsMethodName() {
  103. return wsMethodName;
  104. }
  105.  
  106. public void setWsMethodName(String wsMethodName) {
  107. this.wsMethodName = wsMethodName;
  108. }
  109.  
  110. public String getUserName() {
  111. return userName;
  112. }
  113.  
  114. public void setUserName(String userName) {
  115. this.userName = userName;
  116. }
  117.  
  118. public String getUserPassword() {
  119. return userPassword;
  120. }
  121.  
  122. public void setUserPassword(String userPassword) {
  123. this.userPassword = userPassword;
  124. }
  125.  
  126. public String getParam() {
  127. return param;
  128. }
  129.  
  130. public void setParam(String param) {
  131. this.param = param;
  132. }
  133.  
  134. public String getJsonType() {
  135. return this.jsonType;
  136. }
  137.  
  138. public void setJsonType(String jsonType) {
  139. this.jsonType = jsonType;
  140. }
  141.  
  142. public String getEnableFlag() {
  143. return this.enableFlag;
  144. }
  145.  
  146. public void setEnableFlag(String enableFlag) {
  147. this.enableFlag = enableFlag;
  148. }
  149.  
  150. @DateTimeFormat
  151. public Date getCreateTime() {
  152. return createTime;
  153. }
  154.  
  155. public void setCreateTime(Date createTime) {
  156. this.createTime = createTime;
  157. }
  158.  
  159. public Long getCreateBy() {
  160. return createBy;
  161. }
  162.  
  163. public void setCreateBy(Long createBy) {
  164. this.createBy = createBy;
  165. }
  166.  
  167. @DateTimeFormat
  168. public Date getModifyTime() {
  169. return modifyTime;
  170. }
  171.  
  172. public void setModifyTime(Date modifyTime) {
  173. this.modifyTime = modifyTime;
  174. }
  175.  
  176. public Long getModifyBy() {
  177. return modifyBy;
  178. }
  179.  
  180. public void setModifyBy(Long modifyBy) {
  181. this.modifyBy = modifyBy;
  182. }
  183.  
  184. public String getRemark() {
  185. return this.remark;
  186. }
  187.  
  188. public void setRemark(String remark) {
  189. this.remark = remark;
  190. }
  191.  
  192. public String getWsHeaderNameSpace() {
  193. return wsHeaderNameSpace;
  194. }
  195.  
  196. public void setWsHeaderNameSpace(String wsHeaderNameSpace) {
  197. this.wsHeaderNameSpace = wsHeaderNameSpace;
  198. }
  199.  
  200. public String getWsHeaderPrefix() {
  201. return wsHeaderPrefix;
  202. }
  203.  
  204. public void setWsHeaderPrefix(String wsHeaderPrefix) {
  205. this.wsHeaderPrefix = wsHeaderPrefix;
  206. }
  207.  
  208. public String getWsMethodPrefix() {
  209. return wsMethodPrefix;
  210. }
  211.  
  212. public void setWsMethodPrefix(String wsMethodPrefix) {
  213. this.wsMethodPrefix = wsMethodPrefix;
  214. }
  215.  
  216. public String getParamPrefix() {
  217. return paramPrefix;
  218. }
  219.  
  220. public void setParamPrefix(String paramPrefix) {
  221. this.paramPrefix = paramPrefix;
  222. }
  223.  
  224. public String getParamReturn() {
  225. return paramReturn;
  226. }
  227.  
  228. public void setParamReturn(String paramReturn) {
  229. this.paramReturn = paramReturn;
  230. }
  231.  
  232. @Override
  233. public String toString() {
  234. return "PushConfig [pushId=" + pushId + ", pushName=" + pushName
  235. + ", systemName=" + systemName + ", pushUrl=" + pushUrl
  236. + ", pushType=" + pushType + ", wsNameSpace=" + wsNameSpace
  237. + ", wsMethodName=" + wsMethodName + ", userName=" + userName
  238. + ", userPassword=" + userPassword + ", param=" + param
  239. + ", jsonType=" + jsonType + ", enableFlag=" + enableFlag
  240. + ", createTime=" + createTime + ", createBy=" + createBy
  241. + ", modifyTime=" + modifyTime + ", modifyBy=" + modifyBy
  242. + ", remark=" + remark + ", wsHeaderNameSpace="
  243. + wsHeaderNameSpace + ", wsHeaderPrefix=" + wsHeaderPrefix
  244. + ", wsMethodPrefix=" + wsMethodPrefix + ", paramPrefix="
  245. + paramPrefix + ", paramReturn=" + paramReturn + "]";
  246. }
  247.  
  248. }

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 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的File类的 delete方法删不掉文件的原因分析

    先举几个可以删除掉文件和删除不掉文件的例子(先在F盘创建test1.txt文件,然后可以直接拷贝代码到IDE执行),最后总结下原因: 例子一:下面的例子毫无疑问是能够删除掉文件的 import jav ...

  2. android文字阴影效果设置

    <TextView android:id="@+id/tvText1" android:layout_width="wrap_content" andro ...

  3. 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 基于语句和行的复制的优势和劣势 每 ...

  4. 3D旋转特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. bzoj2186

    首先我们看到题目要求的是1~N!内有M!互质的个数 N!>M!,而我们是知道在M!以内与M!互质的数的个数,即phi(M!) 但是M!~N!内与M!互质的数有多少个呢? 对于每个互质的数,如果我 ...

  6. (转载)Total Commander 常用快捷键(并附快捷键大全)

    (转载)http://blog.chinaunix.net/uid-532511-id-3051990.html Total Commander 常用快捷键 喜欢用Total Commander的人, ...

  7. DevExpress gridControl控件动态绑定列 zt

    DataTable dt = =Query.GetCustome=(ref customColumnCount); //绑定列 gridView.Columns.Add(}); gridView.Co ...

  8. 进军es6(2)---解构赋值

    本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...

  9. 项目杂记(MONTHS_BETWEEN,Having ,Spool)

    1,oracle中计算年龄: select FLOOR(MONTHS_BETWEEN(SYSDATE, to_date('20130728', 'yyyymmdd')) / 12), trunc(mo ...

  10. Bzoj 1046: [HAOI2007]上升序列 二分,递推

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3671  Solved: 1255[Submit][Stat ...