Вопрос

Я создал 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-объект. Видеть Некоторые примеры здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top