Let's assume we want to use the temperature conversion service from grails. In order to make the project minimal, we will modify the default view of the project, add a controller proxying to the service and generate a minimal view to display the result. Here we go:
grails create-app hotstuff cd hotstuff vi grails-app/views/index.gsp |
Modify the default view to
<html>
<head>
<title>Welcome to Grails</title>
<meta name="layout" content="main" />
</head>
<body>
<g:form name="temperature" controller="temperature" action="conversion">
<p>
<g:set var="units" value="${['Fahrenheit', 'Celsius']}" />
Convert <g:textField name="value" value="10.0" /> <g:select name="from" from="${units}" /> in <g:select name="to" from="${units}"/>
</p>
<g:submitButton name="submit" value="Convert" />
</g:form>
</body>
</html>
|
grails create-controller temperature |
Here is the controller code:
import groovyx.net.ws.WSClient
class TemperatureController {
def index = { }
def conversion = {
def proxy = new WSClient("http://www.w3schools.com/webservices/tempconvert.asmx?WSDL", this.class.classLoader)
proxy.initialize()
def message
if (!params?.value || params.from.equals(params.to)) {
message = "Units are probably the same. Don't aske me :)"
} else {
def result
if ("Celsius".equals(params.from)) {
result = proxy.CelsiusToFahrenheit(params.value)
} else {
result = proxy.FahrenheitToCelsius(params.value)
}
message = "${params.value} degrees ${params.from} are ${result} degrees ${params.to}"
}
flash.message = message
}
}
|
Then, we create the view to display the result
mkdir grails-app/views/temperature vi grails-app/views/temperature/conversion.gsp |
Here is the simplistic view:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main" />
<title>Here we are</title>
</head>
<body>
<div class="body">
<g:if test="${flash.message}">
<div class="message">${flash.message}</div>
</g:if>
</div>
</body>
</html>
|
Currently, the Grab annotation cannot be used without interfering with native grails jars, so you have to add the following jars into your application lib directory
$ ls -lrt lib/ total 31960 -rw-r--r-- 1 alleon alleon 26072 Apr 15 11:01 groovyws-0.5.0-SNAPSHOT.jar -rw-r--r-- 1 alleon alleon 4201229 Apr 15 11:03 cxf-bundle-2.1.4.jar -rw-r--r-- 1 alleon alleon 520969 Apr 15 12:48 wstx-asl-3.2.7.jar -rw-r--r-- 1 alleon alleon 60686 Apr 15 13:31 commons-logging-1.1.1.jar -rw-r--r-- 1 alleon alleon 1485863 Apr 15 13:31 bcprov-jdk15-140.jar -rw-r--r-- 1 alleon alleon 143806 Apr 15 13:31 XmlSchema-1.4.4.jar -rw-r--r-- 1 alleon alleon 291779 Apr 15 13:31 FastInfoset-1.2.2.jar -rw-r--r-- 1 alleon alleon 226915 Apr 15 13:31 jaxen-1.1.1.jar -rw-r--r-- 1 alleon alleon 3127729 Apr 15 13:31 jaxb-xjc-2.1.9.jar -rw-r--r-- 1 alleon alleon 856752 Apr 15 13:31 jaxb-impl-2.1.9.jar -rw-r--r-- 1 alleon alleon 89967 Apr 15 13:31 jaxb-api-2.1.jar -rw-r--r-- 1 alleon alleon 14611 Apr 15 13:31 geronimo-ws-metadata_2.0_spec-1.1.2.jar -rw-r--r-- 1 alleon alleon 28804 Apr 15 13:31 geronimo-stax-api_1.0_spec-1.0.1.jar -rw-r--r-- 1 alleon alleon 47817 Apr 15 13:31 geronimo-jaxws_2.1_spec-1.0.jar -rw-r--r-- 1 alleon alleon 204851 Apr 15 13:31 geronimo-javamail_1.4_spec-1.5.jar -rw-r--r-- 1 alleon alleon 12452 Apr 15 13:31 geronimo-annotation_1.0_spec-1.1.1.jar -rw-r--r-- 1 alleon alleon 34126 Apr 15 13:31 geronimo-activation_1.1_spec-1.0.2.jar -rw-r--r-- 1 alleon alleon 444503 Apr 15 13:31 xmlsec-1.4.2.jar -rw-r--r-- 1 alleon alleon 84091 Apr 15 13:31 xml-resolver-1.2.jar -rw-r--r-- 1 alleon alleon 3176148 Apr 15 13:31 xalan-2.7.1.jar -rw-r--r-- 1 alleon alleon 313982 Apr 15 13:31 wss4j-1.5.6.jar -rw-r--r-- 1 alleon alleon 148429 Apr 15 13:31 wsdl4j-1.6.2.jar -rw-r--r-- 1 alleon alleon 278281 Apr 15 13:31 serializer-2.7.1.jar -rw-r--r-- 1 alleon alleon 278145 Apr 15 13:31 saaj-impl-1.3.2.jar -rw-r--r-- 1 alleon alleon 18817 Apr 15 13:31 saaj-api-1.3.jar -rw-r--r-- 1 alleon alleon 32900 Apr 15 13:31 neethi-2.0.4.jar -rw-r--r-- 1 alleon alleon 153115 Apr 15 13:31 jdom-1.1.jar |
If you have been running our very first example all these jars are probably in your
~/.groovy/grapes/ |
directory
If you reference groovyws in your grails app then you will need a set of exclusions to prevent version conflicts ( from list Nabble - Ronny Løvtangen ):
compile("org.codehaus.groovy.modules:groovyws:0.5.2") {
excludes 'geronimo-servlet_2.5_spec', 'servlet-api', 'jaxb-xjc', 'jaxb-impl', 'xml-apis', 'saaj-impl', 'junit', 'slf4j-jdk14', 'xmlParserAPIs', 'jaxb-api', 'saaj-api', 'xmlbeans', 'jaxen', 'geronimo-stax-api_1.0_spec', 'geronimo-activation_1.0.2_spec', 'abdera-client', 'geronimo-activation_1.1_spec'
}
|