微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

摘要:
步骤如下:1、服务端:首先微信小程序仅支持访问https的url,且必须是已备案域名。此外,intellJIDE的java编译器版本调整到8以上。--axis2客户端--˃org.apache.axis2axis2-adb1.6.2org.apache.axis2axis2-kernel1.6.2在webapp下的WEB-INF下新建如下目录:其中axis2.xml文件链接:https://files.cnblogs.com/files/qianyou304/axis2.xml在里面添加,以支持https访问:443services.xml代码:webservice服务˂!

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下新建如下目录:

微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)第1张

其中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

importcom.cn.hnust.service.IUserRecordService;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importorg.springframework.web.context.support.WebApplicationContextUtils;
/**
 * 
 */
public class ILockService implementsServletContextListener{
    /** 
*
留作备用
*/
staticIUserRecordService userRecordService; @Override public voidcontextInitialized(ServletContextEvent sce) { userRecordService = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(IUserRecordService.class); } @Override public voidcontextDestroyed(ServletContextEvent sce) { } publicString invoke(String xmlData) { System.out.println("xml: "+xmlData); String result = ""; JSONObject jsonObject = newJSONObject(); 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; } returnresult; } /** * * @paraminfoObj * @return */ privateString login(JSONObject infoObj){ String result = ""; //解析信息字段 String userName = infoObj.getString("userName"); String password = infoObj.getString("password"); String accessTime = infoObj.getString("accessTime");//Info JSONObject info = newJSONObject(); info.put("result", "Succ"); info.put("accessType", "3"); info.put("operator", "0"); //DeviceList JSONArray deviceIDList = newJSONArray(); JSONObject Id1 = newJSONObject(); Id1.put("ID","000001"); JSONObject Id2 = newJSONObject(); Id2.put("ID","000002"); deviceIDList.add(Id1); deviceIDList.add(Id2); info.put("deviceIDList", deviceIDList); //合并 JSONObject response = newJSONObject(); response.put("Name","LOGIN_ACK"); response.put("Info", info); JSONObject resultObj = newJSONObject(); resultObj.put("Response", response); String jsonStr =resultObj.toString(); //result = XmlJsonUtil.json2xml(jsonStr); result =jsonStr; System.out.print("result: "+result); returnresult; } }

好了,接下来是客户端:

在微信小程序的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)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx安装部署+增加媒体播放模块运行 FreeSWITCH下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

嵌入式开发之web---vue-demo webstorm goahead 嵌入式智能设备

1.先按上篇https://www.cnblogs.com/pengkunfan/p/12622238.html 安装好nodejs和npm,创建好my_vue工程 cmd命令下检查node ,npm版本是否正确 node -v npm -v vue init webpack my_vue https://blog.csdn.net/silenmm/art...

使用Guzzle执行HTTP请求

  Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。Guzzle提供了简单的接口,构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。 安装 使用Composer安装: composer require guzzlehttp/guzzle 或者编辑项目的co...

微信小程序之授权登录

一、前言 由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 去触发。官方连接:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01 二、实现思路 自己写一个微信授权登...

Jenkins:Linux下安装部署步骤

【转载:https://www.cnblogs.com/code-juggler/p/9177805.html】 1. 准备环境   首先,需要jdk是必须要安装好的。本人使用的linux是centos,直接使用yum安装。   先找到合适的版本://至少1.8 yum search java | grep jdk   然后运行安装: yum instal...

iOS开发网络数据之AFNetworking使用

http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库。最新版本支持session,xctool单元测试。网络获取数据一直是手机软件的重中之重,如果处理的不好,会造成很差的用户体验。随着ASIHTTPRequest的停止更新,更换网络库是必然的事情,AFNetworking...

VUE 进阶

4. 通过axios实现数据请求vue.js默认没有提供ajax功能的。 所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互。 注意,axios本质上就是javascript的ajax封装,所以会被同源策略限制。 下载地址: https://unpkg.com/axios@0.18.0/dist/axios.js ht...