必威体育Betway必威体育官网
当前位置:首页 > IT技术

Soap协议的应用

时间:2019-08-12 12:43:13来源:IT技术作者:seo实验室小编阅读:58次「手机版」
 

soap

Soap是指简单对象访问协议,属于WebService三大要素之一。

刚好项目中有用到了soap协议,于是就进行了简单的封装成了工具类。代码如下:

package com.szh.inventorymanage.ui;

import java.util.Map;

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;

import org.ksoap2.transport.HttpTransportSE;

public class SaopUtil {

   public static String request(SoapObject request) {

       // 实例化SoapObject对象,并指定命名空间和方法名

       // SoapObject request = new SoapObject(Contants.nameSpace, methodName);

       // if (!req.equals("")) {

       // // 设置参数

       // request.addProperty("lsId", req);

       // }

       // request.addProperty("password", encrypted_pwd);

       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

       envelope.setOutputSoapObject(request);

       // 设置是否为.net

       envelope.dotNet = true;

       envelope.encodingStyle = SoapSerializationEnvelope.ENV;

       // 构建传输对象,并指明端口

        HttpTransportSE ht = new HttpTransportSE(Contants.wsdl);

       try {

           ht.call(null, envelope);

       } catch (Exception e) {

           e.printstacktrace();

       }

       Object resultObject = null;

       try {

           resultObject = envelope.getresponse();// 使用getResponse方法获得WebService方法的返回结果

       } catch (Exception e) {

           e.printStackTrace();

       }

       if (resultObject != null) {

           return resultObject.toString();

       } else {

           return "";

       }

   }

   /**

    * 设置参数

    *

    * @param methodName

    * @param paramName

    * @param req

    * @return

    */

   public static SoapObject setRequestParam(String methodName,

           String paramName, String req) {

       // 实例化SoapObject对象,并指定命名空间和方法名

       SoapObject request = new SoapObject(Contants.nameSpace, methodName);

       if (!req.equals("")) {

           // 设置参数

           request.addProperty(paramName, req);

       }

       return request;

   }

   /**

    * 参数设置,当有多个参数时调用这个方法

    *

    * @param method

    * @param map

    * @return

    */

   public static SoapObject setRequestParam(String methodName,

           Map<String, String> map) {

       // 实例化SoapObject对象,并指定命名空间和方法名

       SoapObject request = new SoapObject(Contants.nameSpace, methodName);

       if (map.size() > 0) {

           // 遍历map集合,获取键值对

           for (java.util.Map.Entry<String, String> entry : map.entrySet()) {

               String paramName = entry.getKey();

               String paramKey = entry.getValue();

               // 设置到请求体中

               request.addProperty(paramName, paramKey);

           }

       }

       return request;

   }

}

=========================================================代码完毕

下面是用法:

         SoapObject request = SaopUtil.setRequestParam(Contants.getLisAllPo, "lsId", mID);

    //  请求服务器

                json = SaopUtil.request(request);

或者

   Map<String, String> map = new HashMap<String, String>();

               // 封装参数

               map.put("absClsId", id + "");

               map.put("page", page + "");

               // 这是初期入库的请求结构信息

               // 设置参数

               SoapObject request = SaopUtil.setRequestParam(Contants.getPartOccurence, map);

               // 请求服务器

               String json = SaopUtil.request(request);  

有几点需要解释一下:

第一,命名空间和方法名,命名空间与服务器端命名空间保持一致,服务器端通常如下

@WebService(targetNamespace = "xxx")

@SOAPBinding(style = Style.RPC)

public interface XXX{

}

因此,客户端的命名空间也是"xxx",Contants.nameSpace=“xxx”。

第二,wsdl地址

Contants.wsdl = "http://" + 服务器地址 + ":"+服务器端口号+ "/Manager/webService/ws_WareHouse(括号前面的是自定义路径,在服务器的xml中可以配置)?wsdl";

第三,在activity中访问网络,要添加严苛模式。可以放到BaseActivity中

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.builder()

               .detectDiskReads().detectDiskWrites().detectNetwork()

               .penaltyLog().build());

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

               .detectLeakedRegistrationObjects()

               .detectLeakedClosableObjects().penaltyLog().penaltyDeath()

               .build());

相关阅读

虚拟路由冗余协议(VRRP)

VRRP简介: 定义: 虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚

igmp协议

华为igmp 协议 pdf:下载 链接: https://pan.baidu.com/s/1geEqpzH转载请注明:点击打http://blog.csdn.net/shanzhizi/article/det

USB-HID设备协议解读

 参考文献:Device Class Definition for Human Interface Devices(HID) 用于描述HID功能特征的有三个值:Class   SubClass   Int

安卓QQ5.8协议分析

TLV格式及编码https://blog.csdn.net/defeny/article/details/53144535/* renamed from: oicq.wlogin_sdk.request.l */​image.p

邮箱协议POP3与SMTP的使用小结

经过一个下午的摸索,研究出来了POP3与SMTP的使用方法,下面就来总结一下这两个邮箱服务器协议的使用方法。 1.SMTP协议 使用之前,需要

分享到:

栏目导航

推荐阅读

热门阅读