微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

webservice android 设置head头发送 获取


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;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐