webservice android 设置head头发送 获取
16lz
2021-01-24
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;@Autowiredprivate 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警告 —— This Handler class should be static
- android 音量调节时,嘟 的 发声位置
- LocalBroadcastManager详解
- 仿qq未读消息
- android 短信格式
- Android(安卓)消息传递机制 - Looper/Handler/MessageQueue/Mess
- 关于Handler.removemessages方法
- Android消息机制——时钟显示和异步处理工具类(AsyncTask)