Java 根据访问权限找不到Groovy DSL方法

Java 根据访问权限找不到Groovy DSL方法,java,groovy,dsl,Java,Groovy,Dsl,我正在Groovy中创建一个DSL来进行Http端点测试,我希望它是自然语言ish,并且我有一个带有“with”方法的对象。当我链接这些命令时,正确地调用了我的方法,但是如果对变量脚本调用了“with”方法,则由于使用了现有的Groovy“with(Closure)”,编译失败。DSL脚本文件由GroovyShell读入并执行 这是有效的: request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ] 但事实并非如此:

我正在Groovy中创建一个DSL来进行Http端点测试,我希望它是自然语言ish,并且我有一个带有“with”方法的对象。当我链接这些命令时,正确地调用了我的方法,但是如果对变量脚本调用了“with”方法,则由于使用了现有的Groovy“with(Closure)”,编译失败。DSL脚本文件由GroovyShell读入并执行

这是有效的:

request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ]
但事实并非如此:

request = http GET to "${url}"
request with headers, [ 'Cookie': 'monster' ]
被调用的对象是用Java编写的,但可以移动到Groovy。这是方法签名:

<returns this> with(HttpMethodElement eml, Object value);
我认为Groovy可能在脚本中将Java对象转换或包装成Groovy对象,但这两种方法具有不同的签名,应该是合法的

是解析器

Groovy sees

request = http GET to "${url}" with headers, [ 'Cookie': 'monster' ]
作为

正如您所看到的,这很好,但是当它试图解析

request with headers, [ 'Cookie': 'monster' ]
被视为

request( with headers, [ 'Cookie': 'monster' ] )

所以with变成了一个参数,然后你丢失了一个逗号,这就导致了你的问题。基本上,解析器丢失了

是的,我想要真正确定正确的形式需要在一行上进行多次传递。难题。
request with headers, [ 'Cookie': 'monster' ]
request( with headers, [ 'Cookie': 'monster' ] )