2010-06-08 14 views
0

J'ai créé un groovlet qui agira comme une sorte de proxy HTTP. Il accepte les requêtes GET, puis effectue les appels de service Web en fonction de l'URL fournie dans la demande.La servlet Groovy ne trouve pas les fichiers JAR dans Tomcat

Voici le code que j'ai jusqu'à présent:

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

J'ai le fichier Groovy HTTPBuilder JAR dans le dossier WEB-INF/lib du groovlet. Cependant, le code ne fonctionne pas comme il se doit. (J'ai également essayé de mettre le dossier dans $TOMCAT_HOME/common/lib avec les mêmes résultats que ci-dessous.)

Lorsque je cours le code exactement comme ci-dessus, la page revient complètement vide. Si je supprime juste la ligne @Grab en haut (puisque le JAR devrait théoriquement déjà être dans le classpath), Tomcat me fait une erreur désagréable (je la lance sur 5.5, mais j'ai à peu près le même comportement sur 6):

HTTP Status 500 - GroovyServlet Error: script: '/proxy.groovy': Script processing failed.startup failed: General error during semantic analysis: Type org.apache.http.client.methods.HttpRequestBase not present java.lang.TypeNotPresentException: Type org.apache.http.client.methods.HttpRequestBase not present...

Cela est ensuite suivi de la trace de pile.

Quel est le problème avec mon groovlet?

Répondre

2

Deux choses. Tout d'abord, il semble que Groovlets ne peut pas utiliser Grape (la commande @Grab). C'est pourquoi le groovlet échoue silencieusement lorsque cette ligne est présente.

Deuxièmement, le module http-builder dépend également d'environ 19 autres packages (y compris le org.apache.http.client.methods.HttpRequestBase référencé dans le message d'erreur). Vous pouvez trouver ces packages dans le dossier ~/.groovy/grapes.

Si vous voulez trouver toutes les dépendances, supprimez le répertoire Raisins. Ensuite, exécutez un script localement qui utilise cette commande @Grab. Une fois l'exécution du script terminée, vous pouvez regarder dans le répertoire Grapes et voir tout ce qu'il a téléchargé.

Quand je l'ai fait, j'ai eu la liste des modules:

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 

Donc, si vous voulez utiliser HttpBuilder dans un groovlet, vous aurez besoin d'obtenir toutes ces dépendances dans WEB-INF/lib ou votre répertoire commun Tomcat/lib.

D'autre part, si vous n'avez pas besoin de quelque chose de terriblement sophistiqué, vous pouvez utiliser l'objet URL Groovy. Voir some examples here.