| Excerpt | ||
|---|---|---|
| ||
create a SOAP server and make calls to remote SOAP servers using Groovy |
WARNING: Before using GroovySOAP, make sure to check GroovyWS
Introduction
| Wiki Markup |
|---|
{link:SOAP|http://www.w3.org/TR/soap/}{link} |
| Wiki Markup |
|---|
{link:Xfire |http://xfire.codehaus.org}{link} |
Installation
You just need to download this jar file in your ${user.home}/.groovy/lib directory. This jar file embeds all the dependencies.
...
The PersonService.groovy script contains the service implementation and the custom data type (Person).
| Code Block | ||
|---|---|---|
| ||
class Person {
int id
String firstname
String lastname
}
Person findPerson(int id) {
return new Person(id:id, firstname:'First', lastname:'Last')
|
...
However, if you compile custom data types from Java the bytecode won't contain a metaClass property and, hence, there is no need to define a custom mapping.
The Client
| Code Block | ||
|---|---|---|
| ||
import groovy.net.soap.SoapClient
def proxy = new SoapClient('http://localhost:6980/PersonServiceInterface?wsdl')
def person = proxy.findPerson(12)
println 'Person (' + person.id + ') = ' +
person.firstname + ' ' + person.lastname
|
...
The client (ImageClient.groovy)
| Code Block | ||
|---|---|---|
| ||
import groovy.swing.SwingBuilder
import groovy.net.soap.SoapClient
import javax.swing.ImageIcon
import org.apache.commons.codec.binary.Base64
proxy = new SoapClient("http://localhost:6980/ImageServiceInterface?WSDL")
// get the string, transform it to a byte array and decode this array
b64 = new Base64()
bbytes = b64.decode(proxy.getImage().getBytes())
swing = new groovy.swing.SwingBuilder()
// this is regular SwingBuilder stuff
i1 = swing.label(icon:new ImageIcon(bbytes))
frame = swing.frame(title:'Groovy logo', defaultCloseOperation:javax.swing.WindowConstants.DISPOSE_ON_CLOSE) {
panel(){
widget(i1)
}
}
frame.pack()
frame.show()
|
...
and the missing and secred part is here.
Demos with public web services
There exist a lot of web-services available for testing. One which is pretty easy to evaluate is the currency rate calculator from webservicex.net.
Here is a small swing sample that demonstrate the use of the service. Enjoy !
| Code Block | ||
|---|---|---|
| ||
import groovy.swing.SwingBuilder
import groovy.net.soap.SoapClient
proxy = new SoapClient("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL")
def currency = ['USD', 'EUR', 'CAD', 'GBP', 'AUD']
def rate = 0.0
swing = new SwingBuilder()
refresh = swing.action(
name:'Refresh',
closure:this.&refreshText,
mnemonic:'R'
)
frame = swing.frame(title:'Currency Demo') {
panel {
label 'Currency rate from '
comboBox(id:'from', items:currency)
label ' to '
comboBox(id:'to', items:currency)
label ' is '
textField(id:'currency', columns:10, rate.toString())
button(text:'Go !', action:refresh)
}
}
frame.pack()
frame.show()
def refreshText(event) {
rate = proxy.ConversionRate(swing.from.getSelectedItem(), swing.to.getSelectedItem())
swing.currency.text = rate
}
|
...