Я пытаюсь сделать общий метод для отправки запросов SOAP и получения ответов. Я программирую с помощью Groovy, и я использую библиотеку wslite, чтобы помочь мне с SOAP. Вот пример фрагмент кода для создания запроса SOAP и получить ответ:Динамическое построение замыканий с карты?
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.soap.*
SOAPClient client = new SOAPClient('http://www.dneonline.com/calculator.asmx')
def response = client.send(SOAPAction: 'http://tempuri.org/Add') {
body {
Add(xmlns: 'http://tempuri.org/') {
intA(x)
intB(y)
}
}
}
По общем, я имел в виду возможности динамически создать запрос SOAP (учитывая определенную информацию, такие как имя службы/методы, параметры, содержащиеся в метод и т. д.) и получить ответ SOAP. Я думаю примерно следующее:
@Grab('com.github.groovy-wslite:groovy-wslite:1.1.2')
import wslite.soap.*
def getResponse(String clientURL, String action, String service, String serviceNamespace, Map parameters, ...) {
SOAPClient client = new SOAPClient(clientURL)
def response = client.send(SOAPAction: action) {
body {
"$service"(xmlns: serviceNameSpace) {
...
}
}
}
}
Моя проблема заключается в создании крышки для тела запроса. Как, в примере, если мой метод получил service
Add
, а serviceNamespace
http://tempuri.org/
, и parameter
карты так: [intA: x, intB: y]
... Как объединить все эти, так что я могу построить этот вид закрытия:
Add(xmlns: 'http://tempuri.org/') {
intA(x)
intB(y)
}
Я довольно много новичок в Groovy, так что не будьте слишком суровы. Если есть лучший способ реализовать эту концепцию общего метода, я бы с удовольствием это услышал. Концепция похожа на this. Но я предпочел бы играть с Map
, чем String
. На самом деле я не использую Grails. Просто Гровой.
будет '[intA: x, intB: y] .each {fn, arg -> delegate." $ Fn "(arg)}' do? – cfrick