2009-11-03 113 views
10

我有一個包含「邏輯」類的包(比如CheckAuthenticationDataLogic.java,GetVocabulariesLogic.java)。另一個類 - ApiService.java用於生成wsdl。 ApiService.java充滿了這樣的方法:從java class source生成WSDL

/** 
    * Check authentication data. 
    * @param contractNumber - number of contract. 
    * @param msisdn - msisdn. 
    * @param superPassword - super password. 
    * @return result of authentication. 
    */ 
    @WebMethod 
    @WebResult(name = "result") 
    public CheckAuthenticationDataResult checkAuthenticationData(@WebParam(name = "contractNumber") 
                   final String contractNumber, 
                   @WebParam(name = "msisdn") 
                   final String msisdn, 
                   @WebParam(name = "superPassword") 
                   final String superPassword) { 
    return runLogic(new CheckAuthenticationDataLogic(contractNumber, msisdn, superPassword)); 
    } 

正如你看到的,它只是一個代理方法......所以我要避免做同樣的工作兩次,產生直接從邏輯類WSDL,而無需編寫ApiService.java 。 爲此目的的任何工具或庫是否存在?

回答

16

wsgen工具生成JAX-WS Web服務中使用的JAX-WS可移植工件。請注意,您不必在開發時生成WSDL,因爲JAXWS運行時將在您部署服務時自動爲您生成WSDL。

你可能要檢查的JAX-WS RI documentation,尤其是samples(支付特別注意fromjava樣品)。

+0

我有一個錯誤「線程中的異常」主「java.lang.NoClassDefFoundError」,它發生是因爲這個類不是放在classpath中,而是放在遠程庫中(庫放在另一個文件夾中)。我如何將這些庫包含到我的類路徑中? – Oleksandr

+0

wsgen -wsdl:Xsoap1.2 -extension -d testGen -cp/home/vidocq/workspace/ws-crp/build/output/eclipse-classes com.crp.logic.CheckAuthenticationDataLogic – Oleksandr

+0

運行'wsgen時會出現什麼錯誤'用'-cp'?請更新您的問題,詳細介紹您的項目配置(位於何處)以及跟蹤。 –

0

Metro(http://metro.java.net/)Web服務堆棧提供了一個工具(wsgen)來從註釋的Java生成WSDL。

+1

你不需要新城(新城= JAX-WS RI + WSIT /探戈),你只需要包含在Java 6的JAX-WS RI所以如果你使用Java 6,你實際上不需要任何東西。 –

+0

@Pascal Thivent:你是對的。儘管如此,我認爲Metro通常比JSE提供的JAX-WS RI更新。 –

+0

那麼,JDK 6 Update版本14具有JAX-WS 2.1.6 RI,這相當不錯。但事實上,Metro 1.5包括JAX-WS 2.1.7(這被認爲是次要版本,參見http://weblogs.java.net/blog/2009/04/21/jax-ws-ri-217metro-15-發佈)。但是,如果您想使用JAX-WS RI 2.1.7,則可以從https://jax-ws.dev.java.net下載它,但您仍然不需要Metro。但說實話,我不會打擾認可的目錄機制。 –

3

Axis2是另一種選擇,特別是的Java2WSDL命令/插件