Pregunta

He creado un groovlet que actuará como una especie de proxy HTTP. Se acepta peticiones GET y luego hace que las llamadas de servicio web basado en la URL proporcionada en la solicitud.

Aquí está el código que tengo hasta ahora:

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

Tengo la maravilloso HTTPBuilder archivo JAR en la carpeta de WEB-INF/lib la groovlet. Sin embargo, el código no está funcionando como debiera. (También intentado poner la carpeta en la $TOMCAT_HOME/common/lib con los mismos resultados que a continuación.)

Al ejecutar el código exactamente como es arriba, la página se vuelve completamente en blanco.

Si quito solo la línea @Grab en la parte superior (ya que el JAR debe ser teóricamente en la ruta de clase ya), me sale un error desagradable de Tomcat (Me estoy quedando en 5.5, pero me sale más o menos el mismo comportamiento en 6):

  

HTTP Status 500 - GroovyServlet de error:   guión: '/proxy.groovy': Guión   procesamiento failed.startup falló:   Error general durante la semántica   Análisis: Tipo   org.apache.http.client.methods.HttpRequestBase   no presente   java.lang.TypeNotPresentException:   Tipo   org.apache.http.client.methods.HttpRequestBase   no está presente ...

Esto es seguido por el seguimiento de la pila.

¿Qué hay de malo en mi groovlet?

¿Fue útil?

Solución

Dos cosas.

En primer lugar, parece que no se puede utilizar Groovlets uva (el comando @Grab). Es por eso que el groovlet falla silenciosamente cuando esta línea está presente.

En segundo lugar, el módulo http-builder depende también sobre otros 19 paquetes (incluyendo el org.apache.http.client.methods.HttpRequestBase que se hace referencia en el mensaje de error). Usted puede encontrar estos paquetes en la carpeta ~/.groovy/grapes.

Si usted quiere encontrar todas las dependencias, elimine el directorio de uvas. A continuación, ejecute un script local que utiliza ese comando @Grab. Una vez que el guión ha terminado de ejecutarse, puede buscar en el directorio de uvas y ver todo lo descargado.

Cuando lo hice, me dio la siguiente lista de paquetes:

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

Así que si desea utilizar HttpBuilder en un groovlet, tendrás que conseguir todas esas dependencias en WEB-INF / lib o su directorio común / lib de Tomcat.

Por otro lado, si usted no necesita nada terriblemente lujoso, puede utilizar el objeto maravilloso URL. Ver algunos ejemplos aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top