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 webserviceandroid webserviceandroid webservice
android客户端通过webservice 获取天气预报 本人测试 绝对可用
调用服务器的webservice接口,实现从Android上传图片到服务器,然后从服务器下载图片到Android客户端 从Android端用io流读取到要上传的图片,用Base64编码成字节流的字符串,通过调用webservice把该字符串作为参数...
Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细),Android平台之Webservice详解(超详细)
此文档介绍了Android调用天气预报的WebService简单例子。
java android 调用webservice,java android 调用webservice
java访问.net webservice 可获取与设置cookie
最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK...
通过webservice与android实现通信(C#与android)
调用webservice接口,设置网络代理参数
android调用webservice获取json对象
服务器是webservice 客户端是andorid webservice跑在tomcat下面的。
android 调用.net webservice
Android 利用axis2 调用webservice 包含j2ee服务端代码和Android客户端代码 代码实现包含 List,map ,对象传递
Android与服务器端数据交互(基于SOAP协议整合android+webservice)
Android之Webservice详解与调用天气预报Webservice完整实例
0、本例子是我自己初学安桌开发调用webservice的小例子,例子很简单,下载者请按需要至少要把自己的开发平台塔建完整再下载使用,否则框架不完整下载也是废的。 1、解压后有4个文件夹:packages,ReleasePackages,...
xfire开发webservice以及Android利用ksoap2访问webservice。包括源码和jar包
android和webservice交互的实例
Android调用webservice查询手机归属地信息,可以直接运行,非常的简单好用