微信小程序访问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日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...
随机推荐
- Python中为什么不能用可变对象作为默认参数的值
def func(numbers = [], num=1): numbers.append(num) for number in numbers: print(number) func() >& ...
- Prism_简介(1)
Prism 6 Introduction介绍 Initializing初始化 Managing-Dependencies管理依赖 Modules模块 Implementing-MVVM实时MVVM A ...
- localstorage实现两个页面通信,购物车原理。
如:A,B页面,A为商品页,B为购物车页,两个页面同时打开,在A页面点击商品添加至购物车,切换到B页面购物车怎么显示该商品信息 利用localStroage,A页面将数据存入localStroage, ...
- arcgis api 4.x for js 基础工具篇之测距测面
前言 在搭建好WebGIS应用框架的时候,相信大家首先开发的都会是基础功能,此篇文章我们主要讲述的是“测距”."测面"功能. 注* 在测量单位中常规都是基于"平面坐标系& ...
- IOR and mdtest - measure parallel file system I/O performance at both the POSIX and MPI-IO level.
This parallel program performs writes and reads to/from files under several sets of conditions and r ...
- NXP_RTCESL库
恩智浦实时控制嵌入式软件库(缩写为RTCESL,以前为恩智浦嵌入式软件库FSLESL)是一组算法,从基础数学运算到高级数学变换以及高级观测器,这些都可以方便地用在复杂的实时控制应用中以及我们的电机控制 ...
- poj 1182 食物链 并查集 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=1182 题解 可以考虑使用并查集解决 但是并不是简单的记录是否同一组的这般使用 每个动物都有三个并查集 自己 天敌 捕食 并查集 那么在获得 ...
- css 两行、多行超出后用省略号...表示
.item-name { letter-spacing: ; overflow: hidden; display: -webkit-box; text-overflow: ellipsis; -web ...
- 用arthas的watch方法观察执行方法的输入输出
watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象 参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观 ...
- [ Python入门教程 ] Python文件基本操作_shutil模块
shutil模块是对os模块中文件操作的补充,提供文件和目录的移动.复制.打包.压缩.解压等功能 shutil常用函数 shutil.copyfile(src, dst) 复制文件, 如果ds ...