zoukankan      html  css  js  c++  java
  • 网络请求工具类WebServiceUtils

    如果对WebService一无所知的话,建议先看看这两篇博客,对你WebService很有帮助。

    http://blog.csdn.NET/eyu8874521/article/details/9125987

    http://blog.csdn.net/xiaanming/article/details/16871117

    本人也是菜鸟一名,WebService已经是很老的技术了,但现在仍有使用,刚开始接触的时候,是无从入手呀,看了上面几篇文章以后,渐渐的会使用了,这里感谢网上开源的作者和文章,网上基本没有封装的,这里通过这个项目下来,学会了封装,虽然不难,但对于我这种刚出道的菜鸟来说,还是很不容易的,这里记录下来,希望也能帮助到其他的同行。实践才是检验真理的唯一标准,全部代码如下,有注释:

    package com.example.applicationicon;

    import Java.io.IOException;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpResponseException;
    import org.ksoap2.transport.HttpTransportSE;
    import org.xmlpull.v1.XmlPullParserException;
    import Android.os.Handler;
    import android.os.Message;

    /**
     * 访问WebService的工具类
     * 
     * 
     * @author caijin
     * 
     */
    public class WebServiceUtils {
    public static final String WEB_SERVER_URL = "";
    // 含有3个线程的线程池
    private static final ExecutorService executorService = Executors
    .newFixedThreadPool(3);
    // 命名空间
    private static final String NAMESPACE = "";


    /**

    * @param url
    *            WebService服务器地址
    * @param methodName
    *            WebService的调用方法名
    * @param properties
    *            WebService的参数
    * @param webServiceCallBack
    *            回调接口
    */
    public static void callWebService(String url, final String methodName,
    HashMap<String, String> properties,
    final WebServiceCallBack webServiceCallBack) {
    // 创建HttpTransportSE对象,传递WebService服务器地址
    final HttpTransportSE httpTransportSE = new HttpTransportSE(url);
    // 创建SoapObject对象
    SoapObject soapObject = new SoapObject(NAMESPACE, methodName);

    // SoapObject添加参数

    //写真实的变量名也没有用,传递参数必须是arg开头,必须是arg0 ,arg1 一直拍下去

    if (properties != null) {
    for (Iterator<Map.Entry<String, String>> it = properties.entrySet()
    .iterator(); it.hasNext();) {
    Map.Entry<String, String> entry = it.next();
    soapObject.addProperty(entry.getKey(), entry.getValue());
    }
    }
    // 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号 

    //tomcat 7.055 for 64  jdk 1.6 for 64  web3.0 这里写 ver12 ,如果是ver11会报 http 415错误
    final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER12);
    // 设置是否调用的是.Net开发的WebService
    soapEnvelope.bodyOut = soapObject;
    soapEnvelope.dotNet = false;//如果调用的是.Net的WebService,这里为true,否则为false,不然调用会不成功
    soapEnvelope.setOutputSoapObject(soapObject);
    httpTransportSE.debug = true;
    // 用于子线程与主线程通信的Handler
    final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    // 将返回值回调到callBack的参数中
    webServiceCallBack.callBack((Object) msg.obj);
    }
    };

    // 开启线程去访问WebService
    executorService.submit(new Runnable() {
    @Override
    public void run() {
    Object resultSoapObject = null;
    try {
    httpTransportSE.call(WEB_SERVER_URL + methodName, soapEnvelope);
    if (soapEnvelope.getResponse() != null) {
    // 获取服务器响应返回的SoapObject
    resultSoapObject = (Object) soapEnvelope.bodyOut;
    }
    } catch (HttpResponseException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (XmlPullParserException e) {
    e.printStackTrace();
    } finally {
    // 将获取的消息利用Handler发送到主线程
    mHandler.sendMessage(mHandler.obtainMessage(0,
    resultSoapObject));
    }
    }
    });
    }
    /**


    * @author caijin

    */
    public interface WebServiceCallBack {
    public void callBack(Object result);
    }
    }

    最后附上下载地址,有需要的可以前去

    http://download.csdn.Net/detail/u014727709/9691554

    这里补充一下访问webservice需要的jar包

    http://download.csdn.net/detail/u014727709/9692823

    欢迎start,欢迎评论,欢迎指正

  • 相关阅读:
    Ubuntu设置root用户登录图形界面
    Hadoop的安装与设置(1)
    SSH框架和Redis的整合(1)
    @Autowired注解的使用
    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...
    java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE
    Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束
    Error:Execution failed for task ':app:clean'.
    Android Studio项目提交到GitHub
  • 原文地址:https://www.cnblogs.com/AbrahamCaiJin/p/7154513.html
Copyright © 2011-2022 走看看