Question

J'ai créé un groovlet qui agira comme une sorte de proxy HTTP. Il accepte les requêtes GET et fait ensuite les appels de service Web basé sur l'URL fournie dans la demande.

Voici le code que j'ai à ce jour:

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

Quand je lance le code exactement comme il est au-dessus, la page revient complètement vide.

Si je supprime juste la ligne de @Grab en haut (depuis le JAR devrait théoriquement être dans le classpath déjà), je reçois une erreur méchant de Tomcat (je suis en cours d'exécution sur 5.5, mais j'obtenir à peu près le même comportement 6):

  

HTTP Status 500 - GroovyServlet Erreur:   Scénario: '/proxy.groovy': Script   traitement failed.startup a échoué:   Erreur générale lors sémantique   Analyse: Type   org.apache.http.client.methods.HttpRequestBase   pas présent   java.lang.TypeNotPresentException:   Type   org.apache.http.client.methods.HttpRequestBase   pas présent ...

qui est ensuite suivi par la trace de la pile.

Quel est le problème avec mon groovlet?

Était-ce utile?

La solution

Deux choses.

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

En second lieu, le module http-builder dépend également d'environ 19 autres emballages (y compris le org.apache.http.client.methods.HttpRequestBase qui est référencé dans le message d'erreur). Vous pouvez trouver ces paquets dans le dossier ~/.groovy/grapes.

Si vous voulez trouver toutes les dépendances, supprimez le répertoire raisins. Ensuite, exécutez un script local qui utilise cette commande @Grab. Une fois que le script a terminé son exécution, vous pouvez regarder dans le répertoire des raisins et voir tout ce téléchargé.

Quand je l'ai fait, je suis la liste suivante des paquets:

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 Tomcat commun / lib.

Par contre, si vous n'avez pas besoin quoi que ce soit terriblement fantaisie, vous pouvez utiliser l'objet URL Groovy. Voir quelques exemples .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top