2013-01-18 41 views
6

我需要使用WSDL Web服務,並且迄今爲止看到的Java客戶端代碼看起來很臃腫和複雜。我想知道在Clojure中是否可能存在更清晰的解決方案,以便我可以在Clojure中實現該部分,並向Java代碼公開更簡單的API。在Clojure中使用WSDL

回答

9
cd your_project_dir/src 
wsimport -p some.import.ns http://.../service?wsdl 

它會創建./some.import.ns/*.class。所以你可以use他們在你的Clojure項目

(ns your.ns ... 
    (:import [some.import.ns some_WS_Service ...])) 

(let [port (-> (some_WS_Service.) 
       .getSome_WS_ServicePort] 
    (... (.someMethod port) ...)) 
+0

對不起,我無法抗拒......我已經重寫了'let'使用線程宏' - >'如下:'[端口( - >(some_WS_Service。).getSome_WS_ServicePort)]'。 –

+0

@JacekLaskowski謝謝。 AFAIR代理對象不是線程安全的。所以服務類可以實例化一次,但是應該爲每個線程創建代理。無論如何,他們可能不會處於相同的「讓」狀態。 – mobyte

+0

好點!我沒有想過。無論如何,我不認爲它會改變任何事情。 –