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

1、先看接口

POST /webserver/ValideWebService.asmx HTTP/1.1
Host: IP地址
Content-Type: text/xml; charset=utf-
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处理
};
};

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

  1. C#调用Java的WebService添加SOAPHeader验证(2)

    C#调用Java的WebService添加SOAPHeader验证 上一篇链接如上,更像是 Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) 来处理xml, ...

  2. C#调用Java的WebService添加SOAPHeader验证

    C#调用Java的WebService添加SOAPHeader验证(2) 1.问题描述 调用的Java的webservice string Invoke(string func, string req ...

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

    .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...

  4. android loginDemo +WebService用户登录验证

        android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...

  5. Android调用WebService(转)

    Android调用WebService WebService是一种基于SOAP协议的远程调用标准,通过 webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SD ...

  6. C#访问Java的WebService添加SOAPHeader验证的问题

    原文:C#访问Java的WebService添加SOAPHeader验证的问题 这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebServ ...

  7. 纠正网上乱传的android调用Webservice方法。

    1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webser ...

  8. 动态调用Webservice 支持Soapheader身份验证(转)

    封装的WebserviceHelp类: using System; using System.CodeDom; using System.CodeDom.Compiler; using System. ...

  9. Webservice加上SoapHeader验证方式

    提供一种基于SoapHeader的自定义验证方式,代码如下: public class MySoapHeader : System.Web.Services.Protocols.SoapHeader ...

随机推荐

  1. VBA_Excel_教程:单元格颜色

    Sub SetCellColor() '设置单元格颜色 Sheet1.Cells(, ).Interior.ColorIndex = End Sub

  2. sencha touch打包成安装程序

    为了更好地向大家演示如何打包一个sencha touch的项目,我们用sencha cmd创建一个演示项目,如果你的sencha cmd环境还没有配置,请参照 sencha touch 入门系列 (二 ...

  3. ORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序

    连接数太多 关掉没用的 plsql

  4. swiper

    <!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...

  5. IOS开发者账号申请记录

    1. 准备好一个企业邮箱 .企业营业执照复印件.一张可以支付的VISA或者MasterCard 2. 2016/01/13 注册appid https://developer.apple.com/pr ...

  6. iOS10 权限适配

    权限适配 这应该算iOS10系统适配的范畴,最近这两个都在弄,所以就直接和Xcode8适配一起写出来了. 在iOS10之后需要在Info.plist中,添加新的字段获取权限,否则在iOS10上运行会导 ...

  7. Java笔记(一)

    Java语言特征 Java之父:詹姆斯,格斯林 跨平台:一次编译,到处运行write once,run everywhere! Java是一种面向对象的编程语言(OOP)面向对象(OO -- Orie ...

  8. Leetcode5:Longest Palindromic Substring@Python

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  9. shell中的语法(1)

    反引号 命令替换.将命令的输出放在命令行的任意位置. eg. [root@gam ~]# echo The Data is `date` The Data is Fri Nov 18 10:13:56 ...

  10. php 中常见的函数及系统常量

    1.判断是否存在某函数: function_exists('memory_get_usage'): 2.统计程序执行到某节点消耗的系统内存: memory_get_usage(); 3.当前访问目录的 ...