0、主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问。步骤如下:

1、服务端:

首先微信小程序仅支持访问https的url,且必须是已备案域名。因此前期的服务器端工作需要先做好,本人是申请了个人域名(已备案),并使用阿里云服务器,然后申请免费SSL,通过配置tomcat完成支持https访问。此外,intellJ IDE的java编译器版本调整到8以上。

下面进入正题:

pom.xml添加:

  1.      <!--Axis发布webservice-->
  2. <!--servlet依赖-->
  3. <dependency>
  4. <groupId>javax.servlet</groupId>
  5. <artifactId>javax.servlet-api</artifactId>
  6. <version>3.1.0</version>
  7. </dependency>
  8. <!--服务端-->
  9. <dependency>
  10. <groupId>org.apache.axis2</groupId>
  11. <artifactId>axis2</artifactId>
  12. <version>1.6.2</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.apache.axis2</groupId>
  16. <artifactId>axis2-transport-http</artifactId>
  17. <version>1.6.2</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.axis2</groupId>
  21. <artifactId>axis2-transport-local</artifactId>
  22. <version>1.6.2</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.apache.xmlbeans</groupId>
  26. <artifactId>xmlbeans</artifactId>
  27. <version>2.4.0</version>
  28. </dependency>
  29. <!--axis2 客户端-->
  30. <dependency>
  31. <groupId>org.apache.axis2</groupId>
  32. <artifactId>axis2-adb</artifactId>
  33. <version>1.6.2</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.apache.axis2</groupId>
  37. <artifactId>axis2-kernel</artifactId>
  38. <version>1.6.2</version>
  39. </dependency>

在webapp下的WEB-INF下新建如下目录:

其中axis2.xml文件链接:https://files.cnblogs.com/files/qianyou304/axis2.xml

在里面添加,以支持https访问:

  1. <transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
  2. <parameter name="port">443</parameter>
  3. </transportReceiver>

services.xml代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <serviceGroup>
  3. <!-- 指定服务名,随便定义 -->
  4. <service name="xxx" >
  5. <!-- 服务的作用说明,可写可不写 -->
  6. <description>webservice服务</description>
  7. <!-- 指定要发布的类路径 自定义name-->
  8. <parameter name="ServiceClass">com.cn.hnust.webservice.server.xxxx</parameter>
  9. <!-- 类里面的方法名 ,若有多个方法,可以新增operation标签 -->
  10. <operation name="xxxx">
  11. <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  12. </operation>
  13. </service>
  14. </serviceGroup>

指定发布类,这里随便给一个名字:ILockService,随便取一个方法名:invoke

  1. import com.cn.hnust.service.IUserRecordService;
  2. import net.sf.json.JSONArray;
  3. import net.sf.json.JSONObject;
  4.  
  5. import org.springframework.web.context.support.WebApplicationContextUtils;
  6. /**
  7. *
  8. */
  9. public class ILockService implements ServletContextListener{
  10. /** 
       * 留作备用
       */
    static IUserRecordService userRecordService;
  11.  
  12. @Override
  13. public void contextInitialized(ServletContextEvent sce) {
  14. userRecordService = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(IUserRecordService.class);
  15. }
  16.  
  17. @Override
  18. public void contextDestroyed(ServletContextEvent sce) {
  19.  
  20. }
  21.  
  22. public String invoke(String xmlData) {
  23. System.out.println("xml: "+xmlData);
  24. String result = "";
  25. JSONObject jsonObject = new JSONObject();
  26. jsonObject = JSONObject.fromObject(xmlData);
  27. String name_method = jsonObject.getString("Name");
  28. JSONObject infoObj = jsonObject.getJSONObject("Info");
  29. System.out.println("name_method: "+name_method);
  30.  
  31. switch (name_method) {
  32. case "LOGIN"://注册
  33. result = login(infoObj);
  34. break;
  35. default:
  36. break;
  37. }
  38. return result;
  39. }
  40.  
  41. /**
  42. *
  43. * @param infoObj
  44. * @return
  45. */
  46. private String login(JSONObject infoObj){
  47. String result = "";
  48. //解析信息字段
  49. String userName = infoObj.getString("userName");
  50. String password = infoObj.getString("password");
  51. String accessTime = infoObj.getString("accessTime");//Info
  52. JSONObject info = new JSONObject();
  53. info.put("result", "Succ");
  54. info.put("accessType", "3");
  55. info.put("operator", "0");
  56. //DeviceList
  57. JSONArray deviceIDList = new JSONArray();
  58. JSONObject Id1 = new JSONObject();
  59. Id1.put("ID","000001");
  60. JSONObject Id2 = new JSONObject();
  61. Id2.put("ID","000002");
  62. deviceIDList.add(Id1);
  63. deviceIDList.add(Id2);
  64. info.put("deviceIDList", deviceIDList);
  65. //合并
  66. JSONObject response = new JSONObject();
  67. response.put("Name","LOGIN_ACK");
  68. response.put("Info", info);
  69. JSONObject resultObj = new JSONObject();
  70. resultObj.put("Response", response);
  71. String jsonStr = resultObj.toString();
  72. //result = XmlJsonUtil.json2xml(jsonStr);
  73. result = jsonStr;
  74. System.out.print("result: "+result);
  75. return result;
  76. }
  77. }

好了,接下来是客户端:

在微信小程序的js中通过如下代码调用:

  1. var loginJsonStr = '';
  2. //method中设置你想调用的方法名
  3. var method = 'invoke';
  4. //wsdlurl中设置需要访问的webservice的url地址
  5. var wsdlurl = 'https://(域名)/(项目名)/services/ILockService?wsdl';
  6. var targetNamespace = '(命名空间,可以去网页输入wsdlurl中查找)';
  7. //datacopy中拼字符串,即http传输中的soap信息
  8. var datacopy = '<?xml version="1.0" encoding="utf-8"?>';
  9. datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="(命名空间)>';
  10. datacopy += '<soapenv:Header/>';
  11. datacopy += '<soapenv:Body>';
  12. //接着拼你要访问的方法名、参数名和你传递的实参值,比如我要访问的方法是invoke(String arg0)
  13. //而我的实际调用是invoke('libsys',2),所以拼字符串如下
  14. datacopy += '<ser:invoke>';
  15. datacopy += '<xmlData>' + loginJsonStr+'</xmlData>';
  16. datacopy += '</ser:invoke>';
  17. datacopy += '</soapenv:Body>';
  18. datacopy += '</soapenv:Envelope>';
  19. wx.request({
  20. url: wsdlurl,
  21. data: datacopy,
  22. method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 
  23. header: {
  24. 'content-type': 'text/xml;',
  25. 'SOAPAction': targetNamespace + method,
  26. },
  27. // 设置请求的 header
  28. success: function (res) {
  29. // success
  30. var resData = res.data;
  31. console.log("success: "+resData);
  32. },
  33. fail: function (res) {
  34. console.log("fail: " + res.data)
  35. }
  36. })

微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)的更多相关文章

  1. 微信小程序支付源码,后台服务端代码

    作者:尹华南,来自原文地址 微信小程序支付绕坑指南 步骤 A:小程序向服务端发送商品详情.金额.openid B:服务端向微信统一下单 C:服务器收到返回信息二次签名发回给小程序 D:小程序发起支付 ...

  2. WordPress版微信小程序2.2.0版发布

    2017年8月12日WordPress版微信小程序2.2.0版通过了微信的审核正式发布,此版本的更新以完善功能为主.主要更新的功能是:站内链接,猜你喜欢,热点文章. WordPress版微信小程序开放 ...

  3. WordPress版微信小程序2.1.8版发布

    近来的工作比较多,同时也在思考这个项目未来的发展方向,尽管不断有新的wordpress站长,利用我的开源程序搭建了微信小程序,但个人对这个项目的热情日渐减少,促使我不断完善和维护这个开源项目的动力也再 ...

  4. 微信小程序访问豆瓣api403问题解决方发法

    微信小程序访问豆瓣api403问题解决方法一览:通过豆瓣api可以获取很多电影.书籍等的数据信息.昨晚上用微信小程序请求豆瓣api,竟然被豆瓣拒绝了.(豆瓣设置了小程序的访问权限):下面就跟着小编一起 ...

  5. WordPress版微信小程序2.2.8版发布

    距离上次更新已经一个月了,这期间对WordPress版微信小程序 做的不少小的更新和性能的优化,此次版本更新推出了两个比较重点的功能:点赞和赞赏.同时,优化了文章页面的功能布局,在评论区把常用的功能: ...

  6. 微信小程序--仿微信小程序朋友圈Pro(内容发布、点赞、评论、回复评论)

    微信小程序--仿微信小程序朋友圈Pro(内容发布.点赞.评论.回复评论) 项目开源地址M朋友圈Pro 求个Star 项目背景 ​ 基于原来的开源项目 微信小程序仿朋友圈功能开发(发布.点赞.评论等功能 ...

  7. 张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题

    2016 年 12 月 28 日,张小龙在微信公开课 PRO 版的会场上,宣布了微信小程序的正式发布时间. 微信小程序将于 2017 年 1 月 9 号正式上线. 同时他解释称,小程序就像PC时代的网 ...

  8. WordPress版微信小程序2.1.5版发布

    WordPress版微信小程序功能已经基本完善,利用这套程序,搭配WordPress提供的rest api,WordPress网站的站长可以快速搭建属于自己的网站微信小程序 . WordPress版微 ...

  9. 微信小程序首支视频广告片发布

    自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...

随机推荐

  1. Selenium(六):frame切换、窗口切换

    1. 切换到frame index.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  2. 搭建SSM框架的配置文件

    pom.xml所需要的基本依赖和插件: <dependency>            <groupId>org.mybatis</groupId>         ...

  3. JS MD5 返回二进制格式

    今天靠大佬的帮助,成功的解决了一个弄了好久的问题.起因就是我们要对一个手机号进行加密. 加密方式是把一个字符串进行MD5加密之后,得到原始 16 字符二进制格式.然后把得到的这个字符作为AES的key ...

  4. Cobalt Strike系列教程第三章:菜单栏与视图

    通过前两章的学习,我们掌握了Cobalt Strike教程的基础知识,及软件的安装使用. Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...

  5. php代码如何加域名授权?开源php项目如何保护版权 商业授权?

    php在web开发领域是最热门的语言,也是开发项目的不二选择,许多PHP开发者说它是当今世界上最好的开发语言,php开发项目效率高,是因为开源项目太多了,不管是国内,还是国外,开源的框架,开源的CMS ...

  6. gcc 4.9 编译安装 in Ubuntu 18.04(主要用于在无root权限下,进行更新系统 gcc 版本)

    gcc 4.9 编译安装教程,因为项目编译过程中,需要采用特定的gcc版本来进行编译,所以进行简要记录,进行备忘: 下载:curl -O -L https://mirrors.tuna.tsinghu ...

  7. 安装 tensorflow 1.1.0;以及安装其他相似版本tensorflow遇到的问题;tensorflow 1.13.2 cuda-10环境变量配置问题;Tensorflow 指定训练时如何指定使用的GPU;

    # 安装 2.7 环境conda create -n python2. python= conda activate python2. # 安装 1.1.0 gpu版本pip # 配置环境变量expo ...

  8. [PHP] 循环查看php-fpm的内存占用情况

    在webmail的业务中进行发信,如果携带了附件,会把附件拼接内嵌到邮件正文里,这时会极大的占用内存,可以使用以下命令查看fpm的进程内存占用 ps --no-headers --sort -rss ...

  9. JUC-0-JUC简介

    Java JUC  简介   在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 ...

  10. Bert镜像制作及flask生产环境模式启动

    一天搞定两大技术点,成就满满. 一,dockerfile FROM harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter LABEL ...