ClojureのSOAPライブラリ
Clojure用のSOAPライブラリを公開。
https://bitbucket.org/taka2ru/clj-soap
準備
Leiningenのproject.cljにこう書くだけで利用可。
project.clj
(defproject someproj "0.0.1-SNAPSHOT" :depenencies [[org.clojure/clojure "1.2.1"] [org.clojure/clojure-contrib "1.2.0"] [clj-soap "0.1.0"]] :aot [someproj.core]) ; src/someproj/core.cljでサービスを定義する場合。
$ lein deps
サーバを書く
サーバを書くには、defserviceを使う。
(ns someproj.core (:require [clj-soap.core :as soap])) (soap/defservice jp.hoge.MyApp ^Integer (multiple [^Integer x ^Integer y] (* x y))) (defn -main [] (soap/serve "jp.hoge.MyApp")) ; 複数クラスがある場合は、並べて書けばいい。
※project.cljでAOTコンパイルを指定するのを忘れずに
$ lein compile $ lein repl user=> (use 'someproj.core :reload-all) user=> (-main)
これで、 http://localhost:6060/axis2/services/ にアクセスしてみると、WSDLが見れる。
クライアント
client-fn にWSDLのURLを渡してやると、関数が帰ってくる。
関数の第1引数にメソッド名をキーワード指定し、以降に引数を並べてやれば呼び出しができる。
(let [cl (client-fn "http://localhost:6060/axis2/services/MyApp?wsdl")] (cl :multiple 10 20))