6

ここのどこかで私はjava.rmi.server.UIDGAEを動揺させているものを使用しています。:骨への依存関係だけを取得した後、私は行き詰まっています。

(ns helloworld.core
  (:use ;[hiccup.core]
        [hiccup.page-helpers :only (html5 include-css)]
        [clojure.contrib.string :only (split)]
        [compojure.core :only (defroutes GET)]
        [hiccup.middleware :only (wrap-base-url)])
  (:require [appengine-magic.core :as ae]
            [compojure.route :as route
              :only (resources not-found) ]
            [compojure.handler :as handler :only (site)])
  (:gen-class :extends javax.servlet.http.HttpServlet))

 (defn index-page
  ([name]
     (html5
      [:head
       [:title (str "Hello " name)]
       (include-css "/css/style.css")]
      [:body
       [:h1 (str "Hello " name)]]))
  ([] (index-page "World")))

(def match-opperator
  { "add"      +
    "subtract" -
    "multiply" *
    "divide"   /})

(defroutes hello-routes
  (GET "/:f/*" [f & x]
       (index-page (apply (match-opperator f)
                          (map #(Integer/parseInt %)
                               (split #" " (:* x))))))
  (GET "/" [] (index-page))
  (route/resources "/")
  (route/not-found "Page not found"))

(def app
     (-> (handler/site hello-routes)
         (wrap-base-url)))

(ae/def-appengine-app helloworld-app #'app)

私はそれを突堤にロードすることができ、それをdev-appserverにロードした後、私はこれを取得します:

HTTPエラー500

/ multiply / 1%202%204%208へのアクセスに問題があります。理由:

    java.rmi.server.UIDは制限付きクラスです。詳細については、GoogleAppEngineデベロッパーガイドをご覧ください。

のせいで:

java.lang.NoClassDefFoundError:java.rmi.server.UIDは制限付きクラスです。詳細については、GoogleAppEngineデベロッパーガイドをご覧ください。
    com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)で
    org.apache.commons.fileupload.disk.DiskFileItem。(DiskFileItem.java:103)で
    java.lang.Class.forName0(ネイティブメソッド)で
    java.lang.Class.forName(Class.java:186)で
    ring.middleware.multipart_params $ reading__4414__auto __。invoke(multipart_params.clj:1)で
    ring.middleware.multipart_params__init.load(不明なソース)で
    ring.middleware.multipart_params__initで。(不明なソース)
    java.lang.Class.forName0(ネイティブメソッド)で
    java.lang.Class.forName(Class.java:264)で
    clojure.lang.RT.loadClassForName(RT.java:1578)で
    clojure.lang.RT.load(RT.java:399)で
    clojure.lang.RT.load(RT.java:381)で
    clojure.core $ load $ fn__4519.invoke(core.clj:4915)で

ps:これが役立つ場合の私のproject.cljです:

(defproject helloworld"1.0.0-SNAPSHOT"
  :description "FIXME:説明を書く"
  :dependencies [[org.clojure / clojure "1.2.1"]
                 [org.clojure / clojure-contrib "1.2.0"]
                 [compojure "0.6.2"]
                 [しゃっくり"0.3.4"]]

  :dev-dependencies [[appengine-magic "0.4.1"]
                     [swank-clojure "1.2.1"]])
4

1 に答える 1

6

:onlyFWIWGAEに少しの違いはないと思います。おそらく、ロードするクラスを監視してreferおり、関数への拒否によってコードのロードが停止することはありません。

スタックトレースを確認する以外にドメイン固有の経験がないので、問題の原因となっているハンドラーはおそらくcompojure.handler/site、を含むと思いますwrap-multipart-params。アプリケーションにその機能が必要かどうかは疑わしいので、でできるかどうかを確認してくださいcompojure.handler/api。次に、必要な特定のラッパーがsiteある場合は、それらを手動でラップします。

繰り返しになりますが、クラスのロードに関する以前のポイントを考えると、名前空間を取得するとすぐにのコードmultipart-paramsがロードされると思います。そのため、その後に何をするかは重要ではない可能性があります。すべてのラッピングを手動で行う必要があるかもしれません。それほど複雑ではありません。そうすれば、multipart-params名前空間を使用することを回避できるはずです。requirecompojure.handlerapisiterequire

于 2011-05-31T03:25:10.257 に答える