It’s easy and powerful use Groovy classes in your Java web application using the Spring Framework. Here you can find a tutorial.

In my last project I had to scan a complex xml file and copy the information to a database. A Java class (using org.wc3.dom.* and DocumentBuilder) did the work but the hundreds lines of code were complex and not easy to maintain.


DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder        docBuilder        = docBuilderFactory.newDocumentBuilder();
doc = docBuilder.parse(fileName);
NodeList listOfEntries = doc.getElementsByTagName("entry");
for (int s = 0; s < listOfEntries.getLength(); s++) {
  Node firstEntityNode = listOfEntries.item(s);
  if (firstEntityNode.getNodeType() == Node.ELEMENT_NODE) {
  ListEntry entry              = new ListEntry();
  Element   firstEntityElement = (Element) firstEntityNode;
  NodeList  uidList            = firstEntityElement.getElementsByTagName("uid");

For this reason I decided to integrate groovy in the Spring-JSF application, Groovy has the XMLSlurper class that allows to easily access an XML file like if it is a collection of classes.

You can see <a href="" target="_blank">here</a> a tutorial for SMLSlurper.

In my application the role of the first Groovy class were the following:
	<li>accept 2 parameters from a traditional java class (xml file address and an integer parameter)</li>
	<li>process the xml file</li>
	<li>use 2 existing Java classes</li>
	<li>return an ArrayList of custom objects with the values found in the list</li>

<strong>1. add the groovy jar to the libraries of your application</strong>

<strong>2. create a traditional Java Interface</strong>

package ch.genidea.checknames.importer;
import java.util.List;

import ch.genidea.checknames.model.ListEntry;
import ch.genidea.checknames.model.SourceList;

public interface Parser {
    List parse();
    void setFilename(String filename);
    void setSourceList(SourceList sourceList);

I had to declare the setters for the 2 variables to import in the groovy class.

3. create the groovy class in the classpath. If you are using maven add it to the src/main/resources directory.


package ch.genidea.checknames.importer

import java.util.List;
import ch.genidea.checknames.model.ListEntry;
import ch.genidea.checknames.model.SourceList;

public class ParserImpl implements ch.genidea.checknames.importer.Parser{
    String filename
    List <ListEntry> result
    SourceList sourceList

    public List<ListEntry> parse(){
        def pers=new XmlSlurper().parse(new File(filename))

        List <ListEntry> result = new ArrayList<ListEntry>()
        def allEntry = pers.Entry

        return result
    ListEntry addEntry(def it)
            ListEntry entity = new ListEntry()
             entity.uid = (it.uid.text() as Integer)
             entity.familyName = it.lastName.text()
             entity.firstName = it.firstName.text()
             return entity

    void setFilename(String filename)
        this.filename = filename
    void setSourceList(SourceList sourceList)
        this.sourceList = sourceList


In few lines the class did the same work of hundreds of lines of code of the previous implementation 🙂

In this groovy class we use ListEntry and SourceList that are traditional java classes and we return a List object

4. Declare the bean in Spring

<beans xmlns=""
<lang:groovy id="parser" script-source="classpath:ch/genidea/checknames/importer/ParserImpl.groovy" />

<bean name = "listImportService" class="ch.genidea.checknames.lists.service.ListImportServiceImpl">
<property name="parser" ref="parser"></property>


5. use the groovy class in your sourcecode 🙂

List<ListEntry> list = parser.parse();

The only drawbacks I had are:

Small issues compared to the great benefits of having less and more readable codeeasy a