【发布时间】:2013-06-12 19:26:28
【问题描述】:
我熟悉像这样的普通的 groovy 闭包
def printSum = {a,b ->
println a+b
}
printSum(5,7) // 12
但是,我从 SpringWS 插件中发现了我很难理解的代码:
def withEndpointRequest = { url, payload ->
def writer = new StringWriter()
def request = new MarkupBuilder(writer)
payload.delegate = request
payload.call()
def webServiceTemplate = new WebServiceTemplate()
def response = webServiceTemplate.sendToEndpoint(url, writer.toString())
new XmlSlurper().parseText(response)
}
我知道上面是一个闭包。
它是这样使用的:
def namespace = "http://www.myveryimportantcompany.com/hr/schemas"
def serviceURL = "http://localhost:8080/myapp/services"
def response = withEndpointRequest(serviceURL) {
HolidayRequest(xmlns: namespace) {
Holiday {
StartDate("2006-07-03")
EndDate("2006-07-07")
}
Employee {
Number("42")
FirstName("Russ")
LastName("Miles")
}
}
}
如果传入serviceURL,那么有效载荷在哪里?
有人可以详细解释一下这个sn-p吗?
【问题讨论】:
-
看起来payload被插件注入了某种方法拦截。
-
看起来大括号中的东西是有效载荷(
HolidayRequest)。也许 Groovy 有一些语法糖可以让您以这种方式指定函数参数?尝试通过调用printSum(5) { 7 }或类似的方式对其进行测试。
标签: groovy