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. Add a Class from the Business Class Library从业务类库添加类(EF)

    In this lesson, you will learn how to use business classes from the Business Class Library as is. Fo ...

  2. 需要知道的jQuery对象和DOM对象之间的转换

    jQuery对象和DOM对象之间的转换 jQuery对象就是通过jQuery包装DOM对象后产生的对象. jQuery对象和DOM对象不能互相调用对方的方法或属性,但它们之间可以进行转换. 两者都无法 ...

  3. 微信小程序跳转传参参数丢失?

    垂死病中惊坐起,笑问 Bug 何处来?! 1.先是大写字母作祟 前两天发布了「柒留言」v2.0.0 新版本,结果...你懂的嘛,没有 Bug 的程序不是好程序,写不出 Bug 的程序员不是好程序员. ...

  4. Java 类集初探

    类集 类集:主要功能就是Java数据结构的实现(java.util) 类集就是动态对象数组(链表也是动态数组) Collection 接口* Collection是整个类集之中单值保存的最大 父接口 ...

  5. 30-学容器必须懂 bridge 网络

    Docker 安装时会创建一个 命名为 docker0 的 linux bridge.如果不指定--network,创建的容器默认都会挂到 docker0 上. apt-get install bri ...

  6. netperf 网络测试工具

    软件介绍: netperf是惠普公司开源的一款针对网络性能的测试工具,主要基于TCP或UDP的传输.根据应用的不同,可以进行批量数据传输(bulk data transfer)模式和请求/应答(req ...

  7. SP15637 Mr Youngs Picture Permutations 高维动态规划

    问题描述 LG-SP 题解 发现\(n,k\)都非常小,尤其是\(k,k\le 5\),于是直接开\(5\)维进行\(\mathrm{DP}\) 用记忆化搜索实现. \(\mathrm{Code}\) ...

  8. WPF 字体设置

    原文:WPF 字体设置 WPF 主界面 更换字体 可全局 但是有的时候有的窗体 字体还是没变 可以做全局样式 <Window x:Class="CLeopardTestWpf.Main ...

  9. [题解向] PAM简单习题

    \(1\) LG5496 [模板]回文自动机 对于 \(s\) 的每个位置,请求出以该位置结尾的回文子串个数. \(|s|\leq 1e6\) 然后就是PAM的板子题咋感觉好像没有不是很板的PAM题呢 ...

  10. golang--连接redis数据库并进行增删查改

    (1)安装第三方开源的redis库: (2)在使用redis之前,需要安装第三方库,在GOPATH路径下执行安装指令--$GOPATH$:go get github.com/garyburd/redi ...