ANDROID调用webservice带soapheader验证

 2023-09-11 阅读 14 评论 0

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

最近的一个项目中调用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;

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

new Thread() {@Overridepublic 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);//SoapObjectdetail =(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处理   
        };};

 

java soap、转载于:https://www.cnblogs.com/squirrel-king/p/5943308.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/45354.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息