2013-01-18 6 views
6

Ich brauche einen WSDL-Web-Service und die Java-Client-Code, den ich bisher gesehen habe sieht aufgebläht und kompliziert. Ich habe mich gefragt, ob eine sauberere Lösung in Clojure existieren könnte, damit ich vielleicht diesen Teil in Clojure implementieren und eine einfachere API für den Java-Code bereitstellen kann.Consuming WSDL in Clojure

Antwort

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

Es würde ./some.import.ns/*.class erstellen. So können Sie einfach use sie in Ihrem clojure Projekt

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

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

Leider konnte ich nicht widerstehen ... Ich würde die 'let' umschreiben das Einfädeln Makro verwenden' -> 'wie folgt:' [port (-> (some_WS_Service.) .getSome_WS_ServicePort)] '. –

+0

@JacekLaskowski Danke. Das AFAIR-Proxy-Objekt ist nicht Thread-sicher. Daher kann die Serviceklasse einmal instanziiert werden, aber für jeden Thread sollte ein Proxy erstellt werden. Sie würden wahrscheinlich sowieso nicht im selben "Let" sein. – mobyte

+0

Guter Punkt! Ich habe nicht darüber nachgedacht. Jedenfalls glaube ich nicht, dass sich irgendetwas ändert. –