2013-07-18 18 views
0

我正在Windows Werver上運行的Glassfish上構建一個具有java客戶端和java web服務的webservice 2012年Java:WSDL Web服務wsimport,我是否需要重新運行wsimport我更改web服務服務器中的@WebService類代碼

這是我的@WebService類:

import java.util.ArrayList; 
import java.util.List; 

import javax.jws.WebService; 

@WebService 
public class ProductCatalog { 

    public List<String> getProductCategories(){ 
    List<String> categories = new ArrayList<>(); 
    categories.add("Books"); 
    categories.add("Music"); 
    categories.add("Movies"); 

    return categories; 
    } 
} 

客戶端創建我用的wsimport轉換是在Java中生成所需的java源文件正在添加從存根方法由WS發佈的WSDL xml。

我已經注意到的是,如果我一個cetgory添加到列表:

 //...code 
    categories.add("Books"); 
categories.add("Music"); 
categories.add("Movies"); 
categories.add("Pens"); 
    //...code 

我從客戶端獲取更新的ArrayList:圖書,音樂,電影+「筆」

  • 但是如果我給che類添加一個新方法,方法對於客戶端的 是不可見的,怎麼回事?
  • 是否因爲我需要再次在WSDL文件上運行WSIMPORT並且 重新編譯客戶端?
  • 如果以上情況屬實,每次服務器端/服務器代碼發生更改時,是否有避免WSIMPORT 類/源文件生成的方法?

感謝路德

回答

1

Web服務通常用於進程間通信,因此需要用於操作該服務的強烈合同。 WSDL提供了這種合同的手段。因此,每當合同發生變化時,您都需要更新WSDL。

但是,仍然有一個選項,WSDL不是服務調用所必需的。它可以使用動態調用(https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Development_Guide/Develop_a_JAX-WS_Client_Application.html)來實現。有優點和缺點。根據您的使用情況,這可能是一個解決方案。

+0

動態調用是否有可能通過「大幅」減慢soap通信過程來危害性能? – Luther

0

實現此目的的一種方法是將業務邏輯寫入單獨的類並在服務類中調用該方法。將getProductCategories()方法取出到其他類中,並創建該類的實例並調用該方法。當您在業務類中添加新方法時,不需要更改wsdl或任何其他內容。但不要更改方法簽名和參數。

相關問題