SOAP消息分析

根據WebService學習筆記系列(二)中的介紹,使用tcpmon能夠捕獲到咱們發出或者接收到的xml內容,接天咱們就對這些xml內容作一個簡單的分析。還記得在WebService學習筆記系列(四)中咱們詳細介紹過服務器端程序的編寫,本文的服務端程序依然沿用其中的服務端代碼,可是系列(四)對於接口上的註解並無詳細的解釋,今天先來看看接口上的註解有什麼做用。java

@WebService
public interface IMyServer {

    @WebResult(name="addResult")
    public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
    public int minus(int a,int b);
}

上面這一段代碼是咱們在服務器端定義的一個接口,實現了這個接口的類就能夠被髮布,供其餘人調用。這個接口中一共有兩個方法,一個是add,一個是minus,這兩個方法的不一樣就是add方法上添加了@WebResult(name=」addResult」)註解,add的參數以前添加了@WebParam(name=」a」)註解,而minus上沒有添加任何註解,咱們來看看添加了註解的方法和沒添加註解的方法有什麼不一樣。服務器

public class MyFirstClient {

    public static void main(String[] args) {
            IMyServer myServerImpl = new MyServerImplService()
                    .getMyServerImplPort();
            System.out.println(myServerImpl.add(3, 4)+"------");
            myServerImpl.minus(7, 1);
    }
}

這是一段客戶端調用服務端的代碼,具體調用方式見這裏。客戶端分別調用了服務器端兩個方法,一個是add方法,另外一個是minus方法,咱們來看看tcpmon捕獲的結果(tcpmon使用方式見這裏)。tcp

調用add方法時,發送的xmlide

<?xml version="1.0" ?>
   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
         <ns2:add xmlns:ns2="http://lenve.server/">
            <a>3</a>
            <b>4</b>
         </ns2:add>
      </S:Body>
   </S:Envelope>

調用add時,收到的xml:學習

<?xml version="1.0" ?>
   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
         <ns2:addResponse xmlns:ns2="http://lenve.server/">
            <addResult>7</addResult>
         </ns2:addResponse>
      </S:Body>
   </S:Envelope>

調用minus是發送的xml:spa

<?xml version="1.0" ?>
   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
         <ns2:minus xmlns:ns2="http://lenve.server/">
            <arg0>7</arg0>
            <arg1>1</arg1>
         </ns2:minus>
      </S:Body>
   </S:Envelope>

調用minus時收到的xml:code

<?xml version="1.0" ?>
   <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
         <ns2:minusResponse xmlns:ns2="http://lenve.server/">
            <return>6</return>
         </ns2:minusResponse>
      </S:Body>
   </S:Envelope>

add和minus方法都須要兩個參數,因爲咱們在服務端的接口中已經指定了add方法的參數名@WebParam(name=」a」),因此調用add方法時,發送的就是<a>3</a><b>4</b>,而調用minus時發送的是<arg0>7</arg0><arg1>1</arg1>,這是由於咱們沒有指定參數名,因此係統給分配了參數名,一個良好的服務端必需要指定有意義的參數名,這樣才方便第三方調用,而對於返回值也是同樣,若是指定了返回值名稱@WebResult(name="addResult"),系統返回的xml就會使用<addResult>7</addResult>,若是沒有指定返回名稱,系統就會使用默認的return<return>6</return>。這即是服務端添加註解的做用。命名空間也是能夠手動指定的,<ns2:minus xmlns:ns2="http://lenve.server/">,你若是不想使用這個命名空間,能夠本身在服務端經過註解手動指定命名空間名稱,指定方式:server

@WebService(targetNamespace="http://www.lenve.test")
public interface IMyServer {

    @WebResult(name="addResult")
    public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
    public int minus(int a,int b);
}
相關文章
相關標籤/搜索