ANDROID调用webservice带soapheader验证

最近的一个项目中调用webservice接口,需要验证soapheader,现将解决方法记录如下:(网上资料出处太多,就不做引用,原作者如看到,如有必要添加请通知)

1、先看接口

POST /webserver/ValideWebService.asmx HTTP/1.1
Host: IP地址
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://命名空间/Login"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <MySoapHeader xmlns="http://命名空间/">
      <ProjectID>string</ProjectID>
    </MySoapHeader>
  </soap:Header>
  <soap:Body>
    <Login xmlns="http://命名空间/">
      <loginName>string</loginName>
      <passowrd>string</passowrd>
    </Login>
  </soap:Body>
</soap:Envelope>

验证时需要验证header和body两部分,需要引入第三方jar包,ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar。下面就是我验证使用的方法,网上有许多,只不过无法验证,“拿来”修改一下,做个记录,供以后查看,也方便大家参阅。

先声明以下;
//命名空间
    private static final String NAMESPACE = "http://命名空间/";
    //服务地址
    private static String URL = "http://IP地址或者域名/webserver/ValideWebService.asmx";
    //调用的方法名
    private static final String METHOD_NAME = "Login";
    //此处是命名空间+方法名
    private static String SOAP_ACTION = "http://命名空间/Login";
    private SoapObject  detail;

由于2.3以上无法在主线程中直接访问网络,所以在需要的地方开启一个子线程,这里我在点击按钮登录的时候需要,因此写在onclick()方法下:

new Thread() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub  
                    super.run();
                    try {
                        SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
                        //此处2个propertyinfo,是Login方法所需的参数,代码下面贴出asmx代码
                        PropertyInfo pi = new PropertyInfo();
                        pi.setName("loginName");
                        pi.setValue(cardNumStr);
                        rpc.addProperty(pi);
                        pi=new PropertyInfo();
                        pi.setName("passowrd");
                        pi.setValue(passwordStr);
                        rpc.addProperty(pi);
                        //soapheader在这里
                        Element[] header = new Element[1];
                        header[0] = new Element().createElement(NAMESPACE, "MySoapHeader");
                        Element username = new Element().createElement(NAMESPACE, "ProjectID");
                        username.addChild(Node.TEXT, "这里是值");
                        header[0].addChild(Node.ELEMENT, username);
                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.headerOut = header;
                        envelope.bodyOut = rpc;
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(rpc);
                        HttpTransportSE ht = new HttpTransportSE(URL);
                        ht.call(SOAP_ACTION, envelope);
                        //SoapObject
                        detail =(SoapObject) envelope.getResponse();
                        System.out.println("返回的结果"+ detail.toString());
                    }catch (Exception e){
                        System.out.println("错误消息:"+ e.getMessage());
                    }
                    Message msg = handler.obtainMessage();
                    msg.obj=detail;
                    handler.sendMessage(msg);
                }
            }.start();

上面的cardNumStr和passwordStr是我从文本输入框获取的值。访问网络从接口通过验证然后获得返回值,对返回的数据进行处理就可以了。

用SoapObject,要不返回的detail为null。

private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            //这里做你的UI处理
        };
    };
时间: 2024-08-01 22:47:35

ANDROID调用webservice带soapheader验证的相关文章

android loginDemo +WebService用户登录验证

本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.loginActivity是android4.0下的自带演示例程,他自带登录界面.用户名格式设定.输入密码和用户名格式是否正确.用户登录时间进度条等功能,用户可以在这个例程的基础上延伸出自己login用户登录程序.在这里我没有对这个程序做过多的延伸,只是增加Webservice验证用户登录的功能,使其成为一个完整的网络用户登录验证的模块程序.在这我会对这个Demo做全面的解析,使

Android调用WebService之服务端实现(一)

webserviceandroidservicemyeclipsestring服务器 目录(?)[-] 一构建WebServices 二新建一个WebService客服端进行测试 原创文章,转载请注明出处:http://www.blog.csdn.net/tangcheng_ok 这个简单的WebService服务将用来给Android客户端调用的,我们使用xfire来实现相关功能.WebService不多做介绍,google下一大堆呢,这里只是简单的搭建一个WebService让Android

Android调用WebService系列之KSoap2对象解析

在在网络APP中有2个非常重要的节 客户端请求服务端接口的能力 客户端,服务端的对接 而我的Android调用WebService系列共四篇这是最后一篇,所要讲述的只仅仅是Android调用WebService这一种比较少用且不推荐用,但是在一些特定的场合下不得不用的调用方式. Android调用WebService系列之封装能力,Android调用WebService系列之请求调用是讲的请求服务端的能力主要是介绍APP如何拥有,或者说更好的更方便的拥有这种能力 而Android调用WebSer

Android 调用webService(.net平台)

什么是webservice? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序.Web   Service所使用的是Internet上统一.开放的标准,如HTTP.XML.SOAP(简单对象访问协议).WSDL(webservice描述语言)等,所以Web   Service可以在任何支持这些标准的环境(Windows,Lin

Android调用WebService之客户端实现(二)

原创文章,转载请注明出处:http://www.blog.csdn.net/tangcheng_ok 要在Android调用WebService,必须需要一些库来支持,上面的例子中是,我们通过XFire来访问WebService,但这些库对于我们Android客户端就不适合了.这里介绍一个google code上的一个开源项目Ksoap2-android,Ksoap2-android提供了一个轻量而高效的SOAP库访问WebService. 下载ksoap2-android-assembly-2

Android调用WebService系列之对象构建传递

上一篇我们讲了如何封装Android调用WebService的能力,把上一章的类加入我们便有了与WebService通讯的能力.往往我们会遇到WebService调用是通过对象来进行实际交互调用的.于是便有了这一章构建对象传递. 首先我们了解一下. Ksoap2这个开源包里面提供了一个接口 /* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany  *  * Permission is hereby grant

Android调用WebService系列之请求调用

好久没写博客,快有3年了.当初想在CTO把自己的技术文章一直延续,可却没有坚持! 开发Android网络App,通讯方式决定了你App所需的能力! 最近正在用Web Service进行通讯,那么就让我来讲讲Web Service吧! 一.了解Web Service是什么? 请查看(http://baike.baidu.com/link?url=7IdTbG7yw6FKJ_CU0NJYny74IsDrgay861ywsm0u_aBBG5zSwkvYgxVopH2iPdyr4_witJRYf_W6W

Android调用WebService系列之封装能力

上一篇,我们简单的讲述了Android如何进行WebService调用! 而往往我们在项目中会先封装一下再使用!那么我们如何进行能力封装使用呢? 一.了解共性,机制,思考可扩展,独立,可移植性. 首先在Android中通讯,我们必不可少的那便是Handler,Thread. 由于Android的机制,我们需要考虑 UI线程不能处理耗时操作,显然通讯属于耗时操作.所以我们用到Thread 子线程不能更新UI线程,所以我们需要用Handler机制来通知UI线程做出反应 由于服务器语种我们需要考虑 目

.net 客户端调用java或.net webservice进行soapheader验证

最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader. 借此机会,顺便整理一下调用.net webservice 和 java webservice 的验证方式,记录下来. .net端web服务 1.若web服务是采用.net webservice实现,如下代码: /// </summary> [WebService(Namespace = "http://tempuri.org/&quo