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)的更多相关文章

  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. 介绍Dynamics 365 Customer Engagement中的备用键(alternate key)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. Linux 释放cache

    sysc 将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node.已延迟的块 I/O 和读写映射文件 echo 3 > /proc/sys/vm/drop_caches To free p ...

  3. 剑指offer 23:从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 按照从左往右从上到下的顺序打印节点,需要我们维护一个队列,这个队列放入元素的顺序是访问队头节点(起始先放入根节点),则若当前 ...

  4. sqlite数据类型与c#数据类型对应表

    SQLite 数据类型 C# 数据类型   BIGINT Int64   BIGUINT UInt64   BINARY Binary   BIT Boolean 首选 BLOB Binary 首选 ...

  5. benchmarks (主要用于分布式文件系统性能测试)

    最近进行学习过程中,遇到一些可以用得上的benchmark,在这里进行简要记录:之后估计会用到 TensorFlow benchmarks https://github.com/tensorflow/ ...

  6. Fiddler 过滤图片

    fiddler过滤无用图片操作步骤1.在右侧Filters中勾选 Hide if URL contains 2.在 Hide if URL contains 中加入下面一行过滤图片代码 REGEX:( ...

  7. 04. Go 语言流程控制

    Go 语言流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go 语言的常用流程控制有 if 和 for,而 switch 和 ...

  8. matlab练习程序(计算图像旋转角度)

    比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n. 算法思路参考logpolar变换: 1.从图像中心位置向四周引出射线. 2.计算每根射线所打到图像上的像素累计和,得到极坐标 ...

  9. Note | 常用指令,工具,教程和经验笔记

    目录 图像处理 机器学习和数学 编程环境和工具 写作工具 其他 图像处理 获取图像频域并分解为高低频:https://www.cnblogs.com/RyanXing/p/11630493.html ...

  10. 记录使用echarts的graph类型绘制流程图全过程(二)- 多层关系和圆形图片的设置

    本文主要记录在使用echarts的graph类型绘制流程图时候遇到的2个问题:对于圆形图片的剪切和多层关系的设置 图片的设置 如果用echarts默认的symbol参数来显示图片,会显示图片的原始状态 ...