微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)
0、主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问。步骤如下:
1、服务端:
首先微信小程序仅支持访问https的url,且必须是已备案域名。因此前期的服务器端工作需要先做好,本人是申请了个人域名(已备案),并使用阿里云服务器,然后申请免费SSL,通过配置tomcat完成支持https访问。此外,intellJ IDE的java编译器版本调整到8以上。
下面进入正题:
pom.xml添加:
- <!--Axis发布webservice-->
- <!--servlet依赖-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- <!--服务端-->
- <dependency>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2</artifactId>
- <version>1.6.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2-transport-http</artifactId>
- <version>1.6.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2-transport-local</artifactId>
- <version>1.6.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.xmlbeans</groupId>
- <artifactId>xmlbeans</artifactId>
- <version>2.4.0</version>
- </dependency>
- <!--axis2 客户端-->
- <dependency>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2-adb</artifactId>
- <version>1.6.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.axis2</groupId>
- <artifactId>axis2-kernel</artifactId>
- <version>1.6.2</version>
- </dependency>
在webapp下的WEB-INF下新建如下目录:
其中axis2.xml文件链接:https://files.cnblogs.com/files/qianyou304/axis2.xml
在里面添加,以支持https访问:
- <transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
- <parameter name="port">443</parameter>
- </transportReceiver>
services.xml代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <serviceGroup>
- <!-- 指定服务名,随便定义 -->
- <service name="xxx" >
- <!-- 服务的作用说明,可写可不写 -->
- <description>webservice服务</description>
- <!-- 指定要发布的类路径 自定义name-->
- <parameter name="ServiceClass">com.cn.hnust.webservice.server.xxxx</parameter>
- <!-- 类里面的方法名 ,若有多个方法,可以新增operation标签 -->
- <operation name="xxxx">
- <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
- </operation>
- </service>
- </serviceGroup>
指定发布类,这里随便给一个名字:ILockService,随便取一个方法名:invoke
- import com.cn.hnust.service.IUserRecordService;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
- import org.springframework.web.context.support.WebApplicationContextUtils;
- /**
- *
- */
- public class ILockService implements ServletContextListener{
- /**
* 留作备用
*/
static IUserRecordService userRecordService;- @Override
- public void contextInitialized(ServletContextEvent sce) {
- userRecordService = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(IUserRecordService.class);
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- }
- public String invoke(String xmlData) {
- System.out.println("xml: "+xmlData);
- String result = "";
- JSONObject jsonObject = new JSONObject();
- jsonObject = JSONObject.fromObject(xmlData);
- String name_method = jsonObject.getString("Name");
- JSONObject infoObj = jsonObject.getJSONObject("Info");
- System.out.println("name_method: "+name_method);
- switch (name_method) {
- case "LOGIN"://注册
- result = login(infoObj);
- break;
- default:
- break;
- }
- return result;
- }
- /**
- *
- * @param infoObj
- * @return
- */
- private String login(JSONObject infoObj){
- String result = "";
- //解析信息字段
- String userName = infoObj.getString("userName");
- String password = infoObj.getString("password");
- String accessTime = infoObj.getString("accessTime");//Info
- JSONObject info = new JSONObject();
- info.put("result", "Succ");
- info.put("accessType", "3");
- info.put("operator", "0");
- //DeviceList
- JSONArray deviceIDList = new JSONArray();
- JSONObject Id1 = new JSONObject();
- Id1.put("ID","000001");
- JSONObject Id2 = new JSONObject();
- Id2.put("ID","000002");
- deviceIDList.add(Id1);
- deviceIDList.add(Id2);
- info.put("deviceIDList", deviceIDList);
- //合并
- JSONObject response = new JSONObject();
- response.put("Name","LOGIN_ACK");
- response.put("Info", info);
- JSONObject resultObj = new JSONObject();
- resultObj.put("Response", response);
- String jsonStr = resultObj.toString();
- //result = XmlJsonUtil.json2xml(jsonStr);
- result = jsonStr;
- System.out.print("result: "+result);
- return result;
- }
- }
好了,接下来是客户端:
在微信小程序的js中通过如下代码调用:
- var loginJsonStr = '';
- //method中设置你想调用的方法名
- var method = 'invoke';
- //wsdlurl中设置需要访问的webservice的url地址
- var wsdlurl = 'https://(域名)/(项目名)/services/ILockService?wsdl';
- var targetNamespace = '(命名空间,可以去网页输入wsdlurl中查找)';
- //datacopy中拼字符串,即http传输中的soap信息
- var datacopy = '<?xml version="1.0" encoding="utf-8"?>';
- datacopy += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="(命名空间)>';
- datacopy += '<soapenv:Header/>';
- datacopy += '<soapenv:Body>';
- //接着拼你要访问的方法名、参数名和你传递的实参值,比如我要访问的方法是invoke(String arg0)
- //而我的实际调用是invoke('libsys',2),所以拼字符串如下
- datacopy += '<ser:invoke>';
- datacopy += '<xmlData>' + loginJsonStr+'</xmlData>';
- datacopy += '</ser:invoke>';
- datacopy += '</soapenv:Body>';
- datacopy += '</soapenv:Envelope>';
- wx.request({
- url: wsdlurl,
- data: datacopy,
- method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
- header: {
- 'content-type': 'text/xml;',
- 'SOAPAction': targetNamespace + method,
- },
- // 设置请求的 header
- success: function (res) {
- // success
- var resData = res.data;
- console.log("success: "+resData);
- },
- fail: function (res) {
- console.log("fail: " + res.data)
- }
- })
微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)的更多相关文章
- 微信小程序支付源码,后台服务端代码
作者:尹华南,来自原文地址 微信小程序支付绕坑指南 步骤 A:小程序向服务端发送商品详情.金额.openid B:服务端向微信统一下单 C:服务器收到返回信息二次签名发回给小程序 D:小程序发起支付 ...
- WordPress版微信小程序2.2.0版发布
2017年8月12日WordPress版微信小程序2.2.0版通过了微信的审核正式发布,此版本的更新以完善功能为主.主要更新的功能是:站内链接,猜你喜欢,热点文章. WordPress版微信小程序开放 ...
- WordPress版微信小程序2.1.8版发布
近来的工作比较多,同时也在思考这个项目未来的发展方向,尽管不断有新的wordpress站长,利用我的开源程序搭建了微信小程序,但个人对这个项目的热情日渐减少,促使我不断完善和维护这个开源项目的动力也再 ...
- 微信小程序访问豆瓣api403问题解决方发法
微信小程序访问豆瓣api403问题解决方法一览:通过豆瓣api可以获取很多电影.书籍等的数据信息.昨晚上用微信小程序请求豆瓣api,竟然被豆瓣拒绝了.(豆瓣设置了小程序的访问权限):下面就跟着小编一起 ...
- WordPress版微信小程序2.2.8版发布
距离上次更新已经一个月了,这期间对WordPress版微信小程序 做的不少小的更新和性能的优化,此次版本更新推出了两个比较重点的功能:点赞和赞赏.同时,优化了文章页面的功能布局,在评论区把常用的功能: ...
- 微信小程序--仿微信小程序朋友圈Pro(内容发布、点赞、评论、回复评论)
微信小程序--仿微信小程序朋友圈Pro(内容发布.点赞.评论.回复评论) 项目开源地址M朋友圈Pro 求个Star 项目背景 基于原来的开源项目 微信小程序仿朋友圈功能开发(发布.点赞.评论等功能 ...
- 张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题
2016 年 12 月 28 日,张小龙在微信公开课 PRO 版的会场上,宣布了微信小程序的正式发布时间. 微信小程序将于 2017 年 1 月 9 号正式上线. 同时他解释称,小程序就像PC时代的网 ...
- WordPress版微信小程序2.1.5版发布
WordPress版微信小程序功能已经基本完善,利用这套程序,搭配WordPress提供的rest api,WordPress网站的站长可以快速搭建属于自己的网站微信小程序 . WordPress版微 ...
- 微信小程序首支视频广告片发布
自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...
随机推荐
- Selenium(六):frame切换、窗口切换
1. 切换到frame index.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- 搭建SSM框架的配置文件
pom.xml所需要的基本依赖和插件: <dependency> <groupId>org.mybatis</groupId> ...
- JS MD5 返回二进制格式
今天靠大佬的帮助,成功的解决了一个弄了好久的问题.起因就是我们要对一个手机号进行加密. 加密方式是把一个字符串进行MD5加密之后,得到原始 16 字符二进制格式.然后把得到的这个字符作为AES的key ...
- Cobalt Strike系列教程第三章:菜单栏与视图
通过前两章的学习,我们掌握了Cobalt Strike教程的基础知识,及软件的安装使用. Cobalt Strike系列教程第一章:简介与安装 Cobalt Strike系列教程第二章:Beacon详 ...
- php代码如何加域名授权?开源php项目如何保护版权 商业授权?
php在web开发领域是最热门的语言,也是开发项目的不二选择,许多PHP开发者说它是当今世界上最好的开发语言,php开发项目效率高,是因为开源项目太多了,不管是国内,还是国外,开源的框架,开源的CMS ...
- gcc 4.9 编译安装 in Ubuntu 18.04(主要用于在无root权限下,进行更新系统 gcc 版本)
gcc 4.9 编译安装教程,因为项目编译过程中,需要采用特定的gcc版本来进行编译,所以进行简要记录,进行备忘: 下载:curl -O -L https://mirrors.tuna.tsinghu ...
- 安装 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 ...
- [PHP] 循环查看php-fpm的内存占用情况
在webmail的业务中进行发信,如果携带了附件,会把附件拼接内嵌到邮件正文里,这时会极大的占用内存,可以使用以下命令查看fpm的进程内存占用 ps --no-headers --sort -rss ...
- JUC-0-JUC简介
Java JUC 简介 在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 ...
- Bert镜像制作及flask生产环境模式启动
一天搞定两大技术点,成就满满. 一,dockerfile FROM harbor.xxx.com.cn/3rd_part/tensorflow:1.14.0-gpu-py3-jupyter LABEL ...