Groovy 动态生成的闭包
动态生成的闭包 我已经用groovy wslite编写了soap请求:Groovy 动态生成的闭包,groovy,closures,groovyws,Groovy,Closures,Groovyws,动态生成的闭包 我已经用groovy wslite编写了soap请求: def request = { envelopeAttributes('xmlns:art': 'http://url') body { 'art:validate' { item(itemValue) } } } 它工作得很好,但现在我必须将其更改为list,因此最后它将是这样的: de
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
item(itemValue)
}
}
}
它工作得很好,但现在我必须将其更改为list,因此最后它将是这样的:
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
item(itemValue)
item(itemValue2)
item(itemValue3)
}
}
}
但我知道如何从列表中动态创建此请求。我甚至将其提取到变量:
def items = {
item(itemValue)
item(itemValue2)
item(itemValue3)
}
但我不知道如何在这个结尾中添加新项目。有什么简单的方法吗?Builder闭包是普通的Groovy代码,所以
def values = [itemValue, itemValue2, itemValue3]
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
values.each { item(it) }
}
}
}
应该行得通。或者如果你有
def items = {
item(itemValue)
item(itemValue2)
item(itemValue3)
}
那你就可以了
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate'(items)
}
}
(将现有的闭包传递给
art:validate
而不是内联定义一个新的闭包)。Builder闭包是普通的Groovy代码,类似
def values = [itemValue, itemValue2, itemValue3]
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
values.each { item(it) }
}
}
}
应该行得通。或者如果你有
def items = {
item(itemValue)
item(itemValue2)
item(itemValue3)
}
那你就可以了
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate'(items)
}
}
(将现有的闭包传递给
art:validate
而不是内联定义一个新的闭包)。对于给定的项目
闭包,这可能会起作用:
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
items.delegate = delegate
items()
}
}
}
如果您需要使用给定的
项目
结尾在艺术:验证中包含其他内容,这可能会起作用:
def request = {
envelopeAttributes('xmlns:art': 'http://url')
body {
'art:validate' {
items.delegate = delegate
items()
}
}
}
如果您需要art:validate中的其他内容,请将闭包传递给art:validate
:-)将闭包传递给art:validate
:-)的漂亮调用