天天看點

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

歡迎關注我新搭建的部落格:http://www.itcodai.com/

WebService系列文章:

【WebService】帶你走進webservice的世界

【WebService】自定義WebService服務及其調用

【WebService】CXF處理javaBean等複合類型以及Map等複雜類型的資料

【WebService】CXF攔截器的設定以及自定義CXF攔截器

  前面分析了一下關于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");
    }
}
           

  運作一下,即可開啟ws服務,請求http://192.168.10.1:6666/ws?WSDL即可看到wsdl頁面,接下來分析一下該wsdl檔案中與上面程式中的對應關系,看下圖(為了清晰的展示,圖我就不縮小了):

【WebService】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");
    }
}
           

通過上面這些注解,我将ws服務相關的資訊給重新配置了,運作一下,來對比注解看一下生成的wsdl:

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

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

  

文末福利:“程式員私房菜”,一個有溫度的公衆号~

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

—–樂于分享,共同進步!

—–我的部落格首頁:http://blog.csdn.net/eson_15

繼續閱讀