उपरोक्त कार्यान्वयन में, withEndpointRequest
एक बंद है जो दो पैरामीटर लेता है।
withEndpointRequest(String serviceUrl, Closure payload)
।
जब आप अपने ग्राहक से withEndpointRequest
उपयोग कर रहे हैं, आप वास्तव में withEndpointRequest
साथ बंद इनलाइन की घोषणा के द्वारा
def namespace = "http://www.myveryimportantcompany.com/hr/schemas"
def serviceURL = "http://localhost:8080/myapp/services"
def payload = {
HolidayRequest(xmlns: namespace) {
Holiday {
StartDate("2006-07-03")
EndDate("2006-07-07")
}
Employee {
Number("42")
FirstName("Russ")
LastName("Miles")
}
}
}
def response = withEndpointRequest(serviceURL, payload)
ऊपर groovier बनाया गया था कर रहे हैं। ऊपर के रूप में भी
def response = withEndpointRequest(serviceURL, {
//payload goes here as an inline closure as the second parameter
HolidayRequest(xmlns: namespace) {
Holiday {
StartDate("2006-07-03")
EndDate("2006-07-07")
}
Employee {
Number("42")
FirstName("Russ")
LastName("Miles")
}
}
})
जो कम वर्बोज़ है लिखा जा सकता है। अंत में, यह सुव्यवस्थित किया जा सकता है और अधिक groovier बनाया के रूप में
def response = withEndpointRequest(serviceURL) {
HolidayRequest(xmlns: namespace) {
Holiday {
StartDate("2006-07-03")
EndDate("2006-07-07")
}
Employee {
Number("42")
FirstName("Russ")
LastName("Miles")
}
}
}
एक बात लिख यहाँ ध्यान दें कि Closure payload
पिछले पैरामीटर है है के द्वारा।
अब ध्यान दें कि बंद करें (payload
) payload.call()
को तब तक नहीं बुलाया जाता है जैसा कि SpringWS प्लगइन के अंदर आपके प्रश्न में उल्लिखित है।
Closures as Method Arguments पर एक नज़र डालें।
मुझे उम्मीद है कि मैं आपको जो समझना चाहता हूं उसे व्यक्त करने में सक्षम था। :)
ऐसा लगता है कि पेलोड विधि अवरोधन किसी तरह का साथ प्लगइन द्वारा इंजेक्ट किया जाता है करने के लिए बंद पारित करने के लिए। – moskiteau
ऐसा लगता है कि ब्रेसिज़ में सामान पेलोड ('HolidayRequest') है। शायद ग्रोवी में कुछ वाक्य रचनात्मक चीनी है जो आपको इस तरह फ़ंक्शन तर्क निर्दिष्ट करने देती है?'प्रिंटसम (5) {7}' या उसके जैसा कुछ भी कॉल करके इसका परीक्षण करने का प्रयास करें। – rliu