博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在web项目中使用KSOAP2调用WebService
阅读量:6846 次
发布时间:2019-06-26

本文共 5664 字,大约阅读时间需要 18 分钟。

  hot3.png

1、KSOAP2

适用于android调用webservice的一个很好的第三方类库,非常的小。下载地址:

133356_HuKn_2458840.png

2、DOM4J

这个不多解释,java的XML API ,专门用来解析xml格式数据。使用这个来解析WSDL数据。下载地址:

133824_BRvM_2458840.png

3、开始编写webservice调用工具类

  • 先看下代码
package com.msa.msaqydev.util;import java.io.IOException;import java.util.LinkedHashMap;import java.util.Map;import java.util.Map.Entry;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class WebServiceTools {        /**     * 根据url得到返回数据     * 固定访问名称为     * @param url     * @return     * @throws DocumentException     * @throws XmlPullParserException     * @throws IOException     */    public static String getDataByUrl(String url,String methods,String parameter) throws DocumentException, IOException, XmlPullParserException {                String nameSpace="";        String result="";                nameSpace = gettargetNamespace(url);            result =getRemoteInfo(nameSpace,url,methods, parameter);                return result;    }        /**     * 根据多个参数获取返回数据     * 请使用map的有序实现LinkedHashMap     * 因为这里每个webparam是有固定顺序的,需要一一对应     *     * @param url     * @param methods     * @param parameter     * @return     * @throws DocumentException     * @throws IOException     * @throws XmlPullParserException     */    public static String getDatasByUrl(String url,String methods,Map
parameter) throws DocumentException, IOException, XmlPullParserException { String nameSpace=""; String result=""; nameSpace = gettargetNamespace(url); result =getRemoteInfo(nameSpace,url,methods, parameter); return result; } /** * 根据wsdl地址得到命名空间 * @param url * @return * @throws DocumentException */ public static String gettargetNamespace(String url) throws DocumentException{ SAXReader reader = new SAXReader(); Document document = reader.read(url); Element root = document.getRootElement(); return root.attributeValue("targetNamespace"); } /** * 根据多个参数获取命名空间 * @param targetNamespace * @param url * @param methods * @param parameter 这里要使用LinkedHashMap * @return * @throws IOException * @throws XmlPullParserException */ public static String getRemoteInfo(String targetNamespace,String url,String methods,Map
parameter) throws IOException, XmlPullParserException { String urls=url.replace("?wsdl", ""); // 命名空间 String nameSpace = targetNamespace; // 调用的方法名称 String methodName = methods; // EndPoint String endPoint = url; // SOAP Action //String soapAction = targetNamespace+urls; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); //参数不存在,或者空集合,则不添加属性 if(!parameter.isEmpty()&&parameter!=null){ for(Entry
entry : parameter.entrySet()){ rpc.addProperty( entry.getKey(), entry.getValue()); } } // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = false; // 等价于envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(endPoint); // 调用WebService 此处必须为null,否则就会报错 transport.call(null, envelope); // 获取返回的数据 SoapObject object = (SoapObject) envelope.bodyIn; // 获取返回的结果 String result = object.getProperty(0).toString(); //System.out.println(result); return result; // 将WebService返回的结果显示在TextView中 } public static String getRemoteInfo(String targetNamespace,String url,String methods,String parameter) throws IOException, XmlPullParserException { String urls=url.replace("?wsdl", ""); // 命名空间 String nameSpace = targetNamespace; // 调用的方法名称 String methodName = methods; // EndPoint String endPoint = url; // SOAP Action //String soapAction = targetNamespace+urls; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); //参数如果为空,则不加此属性 if(parameter!=null&&!parameter.equals("")){ rpc.addProperty( "arg0", parameter); } // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = false; // 等价于envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(endPoint,60000); // 调用WebService 此处必须为null,否则就会报错 transport.call(null, envelope); SoapObject object = (SoapObject) envelope.bodyIn; // 获取返回的结果 String result = object.getProperty(0).toString(); //System.out.println(result); return result; // 将WebService返回的结果显示在TextView中 } }

关于KSOAP2调用webservice的详细解释,请参考下博客

 

这样去调用webservice,是不是会比实现客户端来的简单?!

 

转载于:https://my.oschina.net/ZL520/blog/1536701

你可能感兴趣的文章
bootstrapTable editable select empty
查看>>
SAG-1100配置说明
查看>>
Wiresahrk抓包选项设置
查看>>
Exchange2010管理心得
查看>>
二进制的补码、反码
查看>>
python入门学习之变量篇
查看>>
负载均衡lvs 解析
查看>>
Centos6.4系统文件服务之VSFTP
查看>>
Java网络编程之非阻塞I/O服务器TCP实例
查看>>
Windows Server 2012 Hyper-V故障转移集群虚拟机亲和性策略
查看>>
python获取当前日期前后N天或N月的日期
查看>>
mysql系列之复制1----原理篇
查看>>
CCNP精粹系列之三十二--BGP下一跳问题,推荐
查看>>
详解JSP九个内置对象
查看>>
MySQL深入03-锁-事务-GTID
查看>>
Linux Kickstart无人值守安装(上)
查看>>
安装libpcap错误处理
查看>>
Effactive Java -- 对于所有对象都通用的方法
查看>>
Android 中文 API (101) —— AsyncTask
查看>>
Silverlight学习笔记之使用TranslateTransform控制对象位置
查看>>