Frage

Ich habe ein groovlet geschaffen, die als eine Art von HTTP-Proxy fungieren. Es nimmt Anfragen und dann macht Web-Service-Anrufe auf der Basis der URL in der Anfrage zur Verfügung gestellt.

Hier ist der Code, den ich bisher habe:

@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!'
     }
}

Ich habe die Groovy HTTPBuilder JAR-Datei in dem Ordner WEB-INF/lib von die groovlet. Allerdings ist der Code nicht funktioniert, wie es sollte. (Ich habe auch versucht, den Ordner in $TOMCAT_HOME/common/lib mit den gleichen Ergebnissen setzen, wie weiter unten).

Wenn ich den Code ausführen genau so, wie es oben ist, die Seite kommt wieder vollständig leer.

Wenn ich an der Spitze nur die @Grab Zeile entfernen (da die JAR theoretisch in dem Classpath bereits sein sollen), erhalte ich einen bösen Fehler von Tomcat (Ich laufe es auf 5,5, aber ich habe in etwa das gleiche Verhalten auf 6):

  

HTTP-Status 500 - GroovyServlet Fehler:   Skript: '/proxy.groovy': Script   Verarbeitung failed.startup fehlgeschlagen:   Allgemeiner Fehler bei der semantischen   Analyse: Typ   org.apache.http.client.methods.HttpRequestBase   nicht vorhanden   java.lang.TypeNotPresentException:   Art   org.apache.http.client.methods.HttpRequestBase   nicht vorhanden ...

ist, dass dann durch den Stack-Trace verfolgt wird.

Was ist mit meinem groovlet falsch ist?

War es hilfreich?

Lösung

Zwei Dinge.

Zunächst scheint es, dass Groovlets nicht Grape verwenden kann (der @Grab Befehl). Deshalb ist die groovlet nicht still, wenn diese Zeile vorhanden ist.

Zweitens ist die http-builder Modul hängt auch etwa 19 weitere Pakete auf (einschließlich der org.apache.http.client.methods.HttpRequestBase, die in der Fehlermeldung verwiesen wird). Sie können diese Pakete im ~/.groovy/grapes Ordner.

Wenn Sie alle Abhängigkeiten finden wollen, löschen Sie die Trauben Verzeichnis. Führen Sie dann ein Skript lokal, dass Anwendungen, daß @Grab Befehl. Wenn das Skript Ausführung beendet hat, können Sie in den Trauben Verzeichnis schauen und sehen alles, was sie heruntergeladen werden.

Als ich es tat, bekam ich die folgende Liste der Pakete:

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

Wenn Sie also HttpBuilder in einem groovlet verwenden möchten, müssen Sie alle diese Abhängigkeiten in WEB-INF / lib oder Tomcat common / lib erhalten.

Auf der anderen Seite, wenn Sie etwas schrecklich Phantasie nicht brauchen, können Sie das Groovy URL-Objekt verwenden. Siehe hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top