0

一種のHTTPプロキシとして機能するgroovletを作成しました。GETリクエストを受け入れ、リクエストで提供されたURLに基​​づいてWebサービス呼び出しを行います。

これが私がこれまでに持っているコードです:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0')
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

String url = params.url

def http = new HTTPBuilder(url)

http.request(GET, TEXT) {

     response.success = { resp, reader ->
       println reader
     }

     response.'404' = { resp -> 
       println 'not found!'
     }
}

groovletのフォルダーにGroovyHTTPBuilderJARファイルがありWEB-INF/libます。ただし、コードが正常に機能していません。(フォルダを入れてみたところ$TOMCAT_HOME/common/lib、以下と同じ結果になりました。)

上記のようにコードを実行すると、ページが完全に空白に戻ります。

一番上の行だけを削除すると@Grab(JARは理論的にはすでにクラスパスにあるはずなので)、Tomcatから厄介なエラーが発生します(5.5で実行していますが、6でもほぼ同じ動作が得られます)。

HTTPステータス500-GroovyServletエラー:スクリプト:'/proxy.groovy':スクリプト処理に失敗しました。起動に失敗しました:セマンティック分析中の一般的なエラー:タイプorg.apache.http.client.methods.HttpRequestBaseが存在しませんjava.lang.TypeNotPresentException:タイプorg.apache.http.client.methods.HttpRequestBaseが存在しません...

その後、スタックトレースが続きます。

私のgroovletの何が問題になっていますか?

4

1 に答える 1

3

2つのこと。

@Grabまず、GroovletsはGrape(コマンド)を使用できないようです。そのため、この線が存在する場合、グルーブレットはサイレントに失敗します。

次に、モジュールは他の約19個のパッケージ(エラーメッセージで参照されているものhttp-builderを含む)にも依存しています。org.apache.http.client.methods.HttpRequestBaseこれらのパッケージは~/.groovy/grapesフォルダーにあります。

すべての依存関係を検索する場合は、Grapesディレクトリを削除します。@Grab次に、そのコマンドを使用するスクリプトをローカルで実行します。スクリプトの実行が終了したら、Grapesディレクトリを調べて、ダウンロードしたすべてのものを確認できます。

私がそれをしたとき、私は次のパッケージのリストを手に入れました:

antlr
asm
commons-beanutils
commons-codec
commons-collections
commons-lang
commons-logging
net.sf.ezmorph
net.sf.json-lib
net.sourceforge.nekohtml
org.apache
org.apache.commons
org.apache.httpcomponents
org.codehaus.groovy
org.codehaus.groovy.modules.http-builder
xerces

したがって、groovletでHttpBuilderを使用する場合は、WEB-INF/libまたはTomcatcommon/libディレクトリでこれらすべての依存関係を取得する必要があります。

一方、それほど凝ったものが必要ない場合は、GroovyURLオブジェクトを使用できます。ここでいくつかの例を参照してください。

于 2010-06-09T17:40:25.907 に答える