我已经创建了的Groovlet,将作为一种HTTP代理。它接受GET请求,然后基于在所述请求中提供的URL使得web服务调用。

下面是到目前为止,我已经得到了代码:

@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中。但是,代码是不工作,因为它应该。 (I还试图把该文件夹中具有相同的效果如下$TOMCAT_HOME/common/lib。)

当我运行,正是因为它是上面的代码中,页面回来完全空白。

如果我在上面只删除@Grab线(因为JAR理论上应该在classpath的话),我从Tomcat的一个讨厌的错误(我运行它在5.5,但我得到的大致相同的行为6):

  

HTTP状态500 - 的GroovyServlet错误:   剧本: '/proxy.groovy':脚本   处理failed.startup失败:   在语义常规错误   分析:类型   org.apache.http.client.methods.HttpRequestBase   不存在   java.lang.TypeNotPresentException:   类型   org.apache.http.client.methods.HttpRequestBase   不存在...

这随后是堆栈跟踪。

什么是错我的Groovlet?

有帮助吗?

解决方案

两件事情。

首先,似乎Groovlets的不能使用葡萄(该@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中所有的相关性或您的Tomcat的common / lib目录下。

在另一方面,如果你不需要任何花哨的要命,你可以使用Groovy的URL对象。请参阅一些示例此处

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top