Domanda

Ho creato un groovlet che agirà come una sorta di proxy HTTP. Accetta richieste GET e poi fa le chiamate di servizio web in base l'URL fornito nella richiesta.

Ecco il codice che ho finora:

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

Ho il Groovy HTTPBuilder file JAR nella cartella WEB-INF/lib di il groovlet. Tuttavia, il codice non funziona come dovrebbe. (Ho anche provato a mettere la cartella in $TOMCAT_HOME/common/lib con gli stessi risultati qui sotto.)

Quando eseguo il codice esattamente come è al di sopra, la pagina ritorna completamente in bianco.

Se rimuovo solo la linea @Grab in alto (dal momento che il JAR dovrebbe essere teoricamente già classpath), ottengo un errore di brutto da Tomcat (sto correndo su 5.5, ma ottengo più o meno lo stesso comportamento su 6):

  

HTTP Stato 500 - GroovyServlet errore:   script: '/proxy.groovy': Script   elaborazione failed.startup non riuscita:   Errore generale durante la semantica   Analisi: Tipo   org.apache.http.client.methods.HttpRequestBase   non presente   java.lang.TypeNotPresentException:   genere   org.apache.http.client.methods.HttpRequestBase   non presente ...

Questo è seguito da l'analisi dello stack.

Cosa c'è di sbagliato con il mio groovlet?

È stato utile?

Soluzione

Due cose.

In primo luogo, sembra che Groovlets non possono utilizzare Uva (il comando @Grab). Ecco perché il groovlet fallisce silenziosamente quando questa riga è presente.

In secondo luogo, il modulo http-builder dipende anche da circa 19 altri pacchetti (tra cui il org.apache.http.client.methods.HttpRequestBase cui viene fatto riferimento nel messaggio di errore). È possibile trovare questi pacchetti nella cartella ~/.groovy/grapes.

Se si desidera trovare tutte le dipendenze, cancellare la directory Uva. Poi eseguire uno script locale che utilizzi quel comando @Grab. Una volta che lo script ha terminato l'esecuzione, si può guardare nella directory di uve e vedere tutto ciò che hanno scaricato.

Quando l'ho fatto, ho avuto il seguente elenco di pacchetti:

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

Quindi, se si desidera utilizzare HttpBuilder in un groovlet, avrete bisogno di ottenere tutte quelle dipendenze in WEB-INF / lib o la vostra directory comune / lib Tomcat.

D'altra parte, se non hai bisogno di niente terribilmente di fantasia, è possibile utilizzare l'oggetto Groovy URL. Vedere alcuni esempi qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top