Groovy Servlet не может найти файлы JAR в Tomcat
-
25-09-2019 - |
Вопрос
Я создал 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
Линия в верхней части (поскольку банка равно теоретически находятся в классной патке), я получаю неприятную ошибку из Tomcat (я запускаю его на 5,5, но я получаю примерно одинаковое поведение 6):
HTTP Status 500 - Ошибка Groovyservlet: Script: '/Proxy.groovy': обработка сценариев не удалась. Включение. org.apache.http.client.methods.httprequestbase не присутствует ...
Тогда затем следует след стека.
Что не так с моим Groovlet?
Решение
Две вещи.
Во-первых, кажется, что Grovlets не могут использовать виноград ( @Grab
команда). Вот почему Groovlet не работает, когда эта линия присутствует.
Во-вторых, то http-builder
Модуль также зависит от 19 других пакетов (включая org.apache.http.client.methods.HttpRequestBase
который ссылается в сообщение об ошибке). Вы можете найти эти пакеты в ~/.groovy/grapes
папка.
Если вы хотите найти все зависимости, удалите каталог винограда. Затем запустите скрипт локально, который использует это @Grab
команда. Как только скрипт завершит выполнение, вы можете посмотреть в каталог винограда и увидеть все, что он скачал.
Когда я сделал это, я получил следующий список пакетов:
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 или ваш каталог Common / lib tomcat.
С другой стороны, если вам не нужно ничего страшного фантазии, вы можете использовать Erovy URL-объект. Видеть Некоторые примеры здесь.