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

更多相关文章

  1. android警告 —— This Handler class should be static
  2. android 音量调节时,嘟 的 发声位置
  3. LocalBroadcastManager详解
  4. 仿qq未读消息
  5. android 短信格式
  6. Android(安卓)消息传递机制 - Looper/Handler/MessageQueue/Mess
  7. 关于Handler.removemessages方法
  8. Android消息机制——时钟显示和异步处理工具类(AsyncTask)

随机推荐

  1. Android软件安全开发实践(上)
  2. [转]android开发新浪微博客户端 完整攻略
  3. Android Launcher开发(一)LiveFolder(实
  4. 国内几大Android应用市场试用小记——开
  5. android 解决wifi断线不稳定的问题-终极
  6. Android实现仿QQ登录可编辑下拉框
  7. Android广播机制——广播的注册
  8. 让 Android 应用提交更简单——用Worktil
  9. Android基于监听的事件处理机制
  10. 关于Android SDK工具Lint的误报:Class ref