Groovy сервлет не может найти JAR-файлы в Tomcat - PullRequest
0 голосов
/ 09 июня 2010

Я создал Groovlet, который будет действовать как своего рода HTTP-прокси. Он принимает запросы GET, а затем выполняет вызовы веб-службы на основе URL-адреса, указанного в запросе.

Вот код, который я получил до сих пор:

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

У меня есть файл Groovy HTTPBuilder JAR в папке WEB-INF/lib Groovlet. Тем не менее, код работает не так, как должен. (Я также попытался поместить папку в $TOMCAT_HOME/common/lib с теми же результатами, что и ниже.)

Когда я запускаю код в точности так, как указано выше, страница возвращается совершенно пустой.

Если я удаляю только строку @Grab вверху (поскольку JAR теоретически должен быть уже в пути к классам), я получаю неприятную ошибку от Tomcat (я запускаю его на 5.5, но я получаю примерно то же самое поведение на 6):

HTTP Status 500 - Ошибка GroovyServlet: скрипт: '/proxy.groovy': скрипт обработка не удалась Общая ошибка во время семантики анализ: тип org.apache.http.client.methods.HttpRequestBase не присутствует java.lang.TypeNotPresentException: Тип org.apache.http.client.methods.HttpRequestBase нет ...

Затем следует трассировка стека.

Что не так с моим Groovlet?

1 Ответ

2 голосов
/ 09 июня 2010

Две вещи.

Во-первых, кажется, что Groovlets не может использовать Grape (команда @Grab).Вот почему groovlet молча завершается сбоем, когда эта строка присутствует.

Во-вторых, модуль http-builder также зависит от примерно 19 других пакетов (включая org.apache.http.client.methods.HttpRequestBase, на который ссылается сообщение об ошибке).Вы можете найти эти пакеты в папке ~/.groovy/grapes.

Если вы хотите найти все зависимости, удалите каталог Grapes.Затем выполните локальный скрипт, который использует эту команду @Grab.Как только скрипт завершит выполнение, вы можете заглянуть в каталог Grapes и увидеть все, что он скачал.

Когда я это сделал, я получил следующий список пакетов:

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

Так что есливы хотите использовать HttpBuilder в Groovlet, вам нужно получить все эти зависимости в WEB-INF / lib или в каталоге Tomcat common / lib.

С другой стороны, если вам ничего не нужноужасно причудливый, вы можете использовать объект URL Groovy.См. несколько примеров здесь .

...