我把Clojure的进入一个大量使用新泽西州和注解现有的Java项目。 我希望能够利用现有的定制标注,过滤器等的前期工作。 到目前为止,我已经大致使用在第9章发现javax.ws.rs注解DEFTYPE方法的Clojure编程 。
(ns my.namespace.TestResource
(:use [clojure.data.json :only (json-str)])
(:import [javax.ws.rs DefaultValue QueryParam Path Produces GET]
[javax.ws.rs.core Response]))
;;My function that I'd like to call from the resource.
(defn get-response [to]
(.build
(Response/ok
(json-str {:hello to}))))
(definterface Test
(getTest [^String to]))
(deftype ^{Path "/test"} TestResource [] Test
(^{GET true
Produces ["application/json"]}
getTest
[this ^{DefaultValue "" QueryParam "to"} to]
;Drop out of "interop" code as soon as possible
(get-response to)))
你可以从注释中看到,我想打电话给DEFTYPE之外的功能,但相同的命名空间内。 至少在我的脑海里,这使我有DEFTYPE专注于互操作和接线,泽西岛,并且应用程序逻辑是不同的(更喜欢的Clojure我想写)。
我这样做然而,当我得到以下异常:
java.lang.IllegalStateException: Attempting to call unbound fn: #'my.namespace.TestResource/get-response
有什么关于DEFTYPE和命名空间独特之处?