android 发送方法
//里面地址对应上面图片的namespace
SoapObject request = new SoapObject("http://webservice.wzkj.com/", "hello");
//这个是配置参数
request.addProperty("name","dddddddddddd");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
Element[] header = new Element[1];
header[0] = new Element().createElement("http://webservice.wzkj.com/","hello");
header[0].setAttribute("http://webservice.wzkj.com/","token","xiebuqing");
envelope.headerOut=header;
envelope.bodyOut = request;
envelope.setOutputSoapObject(request);
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = false;
try {
//对应图片上的soap:address
HttpTransportSE androidHttpTransport = new HttpTransportSE("http://127.0.0.1:8080/wzkj/webservice/helloworld");
//call的第一个参数对应图片上的soapAction=""
androidHttpTransport.call("", envelope);
SoapObject result = (SoapObject)envelope.bodyIn;
//这里我获取第一个数据
System.out.println(result.getProperty(0).toString());
} catch (Exception e) {
e.printStackTrace();
}
通过抓包工工具获取到格式
<v:Envelope xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\" xmlns:c=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:v=\"http://schemas.xmlsoap.org/soap/envelope/\">
<v:Header>
<n0:hello n0:token=\"xiebuqing\" xmlns:n0=\"http://webservice.wzkj.com/\" />
</v:Header>
<v:Body>
<n1:hello id=\"o0\" c:root=\"1\" xmlns:n1=\"http://webservice.wzkj.com/\">
<name i:type=\"d:string\">
dddddddddddd
</name>
</n1:hello>
</v:Body>
</v:Envelope>
web 端口发送的格式
<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
<soap:Header>
<tns:RequestSOAPHeader xmlns:tns=\"http://192.168.1.113:8080/wzkj/webservice/helloworld\">
<tns:spId>
zhong
</tns:spId>
<tns:spPassword>
guo
</tns:spPassword>
</tns:RequestSOAPHeader>
</soap:Header>
<ns2:hello xmlns:ns2=\"http://webservice.wzkj.com/\">
<name>
ddd
</name>
</ns2:hello>
</soap:Body>
</soap:Envelope>
在head中两个格式不一样需要在获取的时候作解析
/**
* @FileName : SOAPAuthIntercepter
* @Copy Right : WZKJ Technology Ltd
* @Comments : soap认证拦截器
* @Author :liyulong
* @Create Date: 2014.6.23
* @Modified By:
* @Modified Date:
* @Why & What is modified
* @version : 1.0
*/
package com.wzkj.webservice.auth;
import java.util.List;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
import org.apache.cxf.headers.Header;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.springframework.beans.factory.annotation.Autowired;
import org.w3c.dom.Element;
import com.wzkj.core.util.BlowfishUtil;
import com.wzkj.web.entity.Ciphertext;
import com.wzkj.web.mapper.CipherTextMapper;
public class SOAPAuthIntercepter extends AbstractPhaseInterceptor<SoapMessage>{
private SAAJInInterceptor saa = new SAAJInInterceptor();
public String token;
@Autowired
private CipherTextMapper cipherTextMapper;
public SOAPAuthIntercepter(String phase) {
super(phase);
}
public SOAPAuthIntercepter(){
// 指定该拦截器在哪个阶段被激发
super(Phase.PRE_INVOKE);
}
/**
* 处理消息
* */
public void handleMessage(SoapMessage message) throws Fault {
SOAPMessage mess = message.getContent(SOAPMessage.class);
//判断消息是否为空
if (mess == null) {
saa.handleMessage(message);
mess = message.getContent(SOAPMessage.class);
}
SOAPHeader head = null;
try {
head = mess.getSOAPHeader();
} catch (Exception e) {
e.printStackTrace();
}
if (head == null) {
throw new Fault(new SOAPException("SOAP消息头格式不对!"));
}
// 获取SOAP消息的全部头
List<Header> headers = message.getHeaders();
if (null == headers || headers.size() < 1) {
throw new Fault(new SOAPException("SOAP消息头格式不对!"));
}
//认证token令牌
if(!checkQnameHeader(headers)){
throw new Fault(new SOAPException("认证失败"));
}
}
/**
* 认证token令牌
* @param headers 消息体
* @return boolean
*/
private boolean checkQnameHeader(List<Header> headers) {
SoapHeader soapHeader = (SoapHeader) headers.get(0);
Element element = (Element) soapHeader.getObject();
String token = element.getAttribute("n0:token");
Ciphertext cipher = cipherTextMapper.getById(1);
BlowfishUtil chiper = new BlowfishUtil(cipher.getKey());
String value = chiper.decryptString(token);
return value.equals(cipher.getText());
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
分享到:
相关推荐
### Android WebService应用详解 #### 一、概述 在Android开发中,客户端应用程序与服务器端进行数据交互是非常常见的需求之一。这种交互可以通过多种方式实现,其中一种常用的方式就是使用WebService。WebService...
以上就是关于"webservice和android调用客户端"的相关知识点,涵盖了WebService的基本原理、Android客户端调用WebService的流程、以及可能涉及的安全和优化措施。理解并掌握这些内容对于开发Android应用与服务器的...
在Android开发中,调用Web Service来获取天气信息是一个常见的需求。这涉及到网络通信、数据解析和用户界面展示等多个技术环节。以下将详细介绍这个过程。 首先,我们需要理解Web Service的本质。Web Service是一种...
Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细)
本文将详细介绍如何在Android应用中利用WebService接口连接到SQLServer数据库,实现数据的增删改查操作。 首先,理解概念: 1. Android:Android是一种开源操作系统,主要用于移动设备,如智能手机和平板电脑。 2. ...
通过WebService与Android实现通信是跨平台开发中常见的一种方式,特别是在使用C#作为后端语言进行服务端开发,而Android应用作为前端时。本文将基于提供的文件信息,深入解析这一技术实现的关键步骤与原理。 ### ...
在Android中,我们需要创建SOAP请求对象,设置必要的参数,然后发送到Web服务的URL。 7. **SQLServer数据库**: SQLServer是微软开发的关系型数据库管理系统,广泛应用于企业级应用。通过WebService,Android应用...
最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK...
本Demo结合了Android客户端和WebService技术,为用户展示如何从远程服务器获取并展示天气预报数据。通过这个实例,我们可以深入理解Android网络编程以及与WebService的交互方式。 一、Android网络请求基础 在...
本教程将详细介绍如何在Android应用中调用WebService来获取手机归属地。 1. **理解WebService** WebService是一种基于互联网的、平台无关的服务,它允许不同系统间的应用程序之间进行通信。常见的WebService技术有...
在Android开发中,有时我们需要与服务器进行数据交互,这时候Webservice接口就显得尤为重要。本教程主要涉及如何在Android端调用Webservice服务,通过提供的源码实现基础的数学运算,如加、减、乘、除,并对相关技术...
例如,如果你有一个获取用户ID的WebService方法,可以这样在Android端调用: ```java // 创建SoapObject并设置参数 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("userId", ...
本篇将详细讲解如何在Android应用中使用Java调用Webservice。 一、理解Web服务 Web服务是一种基于互联网的、标准化的服务交互方式,它允许不同系统之间的应用程序共享数据和功能。常见的Web服务有SOAP(Simple ...
在这个“android 访问webService Demo”中,我们将探讨如何在Android应用中集成和使用Web Service,尤其适合初学者快速上手。 一、理解Web Service Web Service是一种跨平台的通信机制,它允许不同的应用程序通过...
在Android开发中,Webservice是一种常见的数据交互方式,它允许移动应用通过网络获取远程服务器上的数据。本实例将深入探讨Android中如何使用Webservice,特别是针对天气预报服务的调用。我们将关注以下几个核心知识...
3. **获取WebService接口信息**:包括WebService的URL、命名空间、方法名以及所需的参数等。 #### 三、KSOAP2简介 KSOAP2是一个用于Android平台的SOAP客户端库,它简化了Android应用与WebService之间的交互过程。...
DELPHI 通过WEBSERVICE获取天气预报,可获取全球,全国各省市天气预报详情
首先,让我们详细探讨Android连接.NET的WebService。DataSet是一种在.NET框架中广泛使用的数据容器,它能够存储和操作多表数据。在Android中连接到这样的服务,你需要使用KSOAP2库,这是一个轻量级的SOAP客户端库,...
Delphi XE5 Android 平台调用 Webservice 并访问操作 MSSQL 数据库 Delphi XE5 是一款功能强大且灵活的开发环境,为开发者提供了跨平台的开发体验。在 Android 平台上,Delphi XE5 提供了强大的支持,允许开发者...