Pergunta

Eu criei um groovlet que atuará como uma espécie de proxy HTTP. Ele aceita solicitações GET e faz chamadas de serviço da Web com base na URL fornecida na solicitação.

Aqui está o código que tenho até agora:

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

Eu tenho o Groovy httpbuilder Arquivo jar no WEB-INF/lib pasta do groovlet. No entanto, o código não está funcionando como deveria. (Eu também tentei colocar a pasta em $TOMCAT_HOME/common/lib com os mesmos resultados abaixo.)

Quando eu executo o código exatamente como está acima, a página volta completamente em branco.

Se eu remover apenas o @Grab Linha no topo (já que o frasco deve estar teoricamente no caminho de classe), recebo um erro desagradável do tomcat (estou executando no 5.5, mas recebo aproximadamente o mesmo comportamento em 6):

Status HTTP 500 - Erro de groovyServlet: script: '/proxy.groovy': processamento de scripts falhas.STARTUP Falha: erro geral durante a análise semântica: type org.apache.http.client.methods.httprequestbase não presente org.apache.http.client.methods.httprequestbase não presente ...

Isso é seguido pelo rastreamento da pilha.

O que há de errado com meu groovlet?

Foi útil?

Solução

Duas coisas.

Primeiro, parece que os groovlets não podem usar uva (o @Grab comando). É por isso que o groovlet falha silenciosamente quando essa linha está presente.

Segundo, o http-builder O módulo também depende de cerca de 19 outros pacotes (incluindo o org.apache.http.client.methods.HttpRequestBase que é referenciado na mensagem de erro). Você pode encontrar esses pacotes no ~/.groovy/grapes pasta.

Se você deseja encontrar todas as dependências, exclua o diretório uvas. Em seguida, execute um script localmente que use isso @Grab comando. Depois que o script terminar de executar, você pode procurar no diretório uvas e ver tudo o que baixou.

Quando fiz isso, recebi a seguinte lista de pacotes:

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

Portanto, se você deseja usar o HttpBuilder em um groovlet, precisará obter todas essas dependências no Web-Inf/Lib ou no seu diretório Tomcat Common/Lib.

Por outro lado, se você não precisar de nada terrivelmente chique, pode usar o objeto URL groovy. Ver Alguns exemplos aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top