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))