【WebService】wsdl配置詳解以及使用註解修改wsdl配置

前面分析了一下關於ws的基本知識,我們知道,wsdl是ws中很重要的文檔,我們可以通過解析該wsdl文檔獲取ws的相關信息,其實,如果不瞭解該文檔結構的話,問題也不大,只要會解析即可進行開發。但是如果想要生成一個符合自己項目的,或者比較人性化的一個wsdl的話,或者從可讀性角度來說,就需要在編寫ws代碼時進行一些相應的配置了,比如說ws名稱,參數等等,那麼就需要對wsdl文檔有一定的瞭解。這篇文章主要從兩個角度來展開:一是解釋一下wsdl中的相關配置,二是如何在ws程序中通過註解指定這些配置。

1. wsdl配置詳解

要生成wsdl,首先得有一個ws,我們還是使用前面文章中提到的那個簡單的ws,如下:

@WebService //默認靜態方法是不能發不成ws服務的
public class MyWebService {

    public String sayHello(String name) {
        return name + " 你好!";
    }

    public static void main(String[] args) {
        String address = "http://192.168.10.1:6666/ws";
        Endpoint.publish(address, new MyWebService());
        System.out.println("訪問WSDL的地址爲:" + address + "?WSDL");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  運行一下,即可開啓ws服務,請求http://192.168.10.1:6666/ws?WSDL即可看到wsdl頁面,接下來分析一下該wsdl文件中與上面程序中的對應關係,看下圖(爲了清晰的展示,圖我就不縮小了): 
這裏寫圖片描述
  我們可以看到,生成的ws服務名稱是在原來的類後面有加了個Service而已,服務類型名是在原來的類後面加了個Port,包括參數默認爲arg0,返回值爲return 等等,這些都能從wsdl文件中看的出來,通過這個wsdl生成的java代碼中的類名自然也就是默認的了,如果我們想要修改這些默認的配置,則需要在編寫ws的時候通過註解來設置一下。

2. 使用註解修改wsdl配置

我們修改一下上面的ws,使用註解來配置我們自己需要的名稱,如下

/*
 *  自定義ws服務, jdk1.6版本僅僅支持 soap1.1格式,jdk1.7及以上版本支持 soap1.2格式
 *  發佈ws服務只需要@WebService註解即可, 如果想要更好的可維護性,則可以通過註解來實現
 * */
@WebService // 默認靜態的方式是不能發佈ws服務的
(
        name="MyWebService1",  // 服務實現類的名稱
        serviceName="MyWebServiceService1",  // 默認在發佈的服務實現者的名稱後面添加Service
        portName="MyWebServicePort1",   // 服務類型的名稱: 默認在 發佈的服務實現者(MyWebService) 後面添加 port
        targetNamespace="ws.client.test"    // 發佈ws服務的命名空間,此空間默認爲當前服務包路徑的 "倒寫"此名稱也是 wsimport 命令生成 java類時默認的包路徑 -p
)
public class MyWebService {

    @WebMethod(exclude=true)  // 默認public方法可以發佈爲ws服務, 如果要排除則配置  exclude=true
    public String sayHello(String name){
        System.out.println("name:" + name);
        return name + ",你好!";
    }

    //可以指定wsdl中的方法名,參數名和返回值
    @WebMethod(operationName="sayHello")
    public @WebResult(name="result") String sayHello2(@WebParam(name="name") String name,@WebParam(name="age") int age){
        System.out.println("name:" + name);
        return name + ",你好!,年齡爲:" + age;
    }

    public static void main(String[] args) {
        // 一個端口可以發佈多個ws服務
        String address="http://192.168.1.105/ws";
        // 創建一個服務端點, banding服務的實現類
        Endpoint.publish(address, new MyWebService());
        System.out.println("訪問wsdl的地址爲:" + address + "?WSDL");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

通過上面這些註解,我將ws服務相關的信息給重新配置了,運行一下,來對比註解看一下生成的wsdl: 
這裏寫圖片描述

這裏寫圖片描述 
  可以看出,生成的wsdl中的配置完全按照我們自己指定的來,這樣通過解析該wsdl文件得到的java代碼中的類以及方法也是按照自定義的來,這就能滿足實際中具體的要求了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章