After lot of trying I finally managed to get Castor tools working to parse XML files. And now that I have it working for me, I am always going to use it for XML parsing. It makes things so much simpler and easier.
Castor takes in a xml file and unmarshals it into Java objects. There are three ways to associate Java Classes with XML elements.
- The first one is introspection. Given the class to the Unmarshelar, Castor populates the instance fields from XML.
- The second is to use bindings defined by user.
- The third is to use the XML Code Generator tool and have it generate Java Classes.
Of course, I used the third option, and that is the one I am going to mention here.
Castor jars can be downloaded from the Castor Project.It has a few dependencies. So I decided top use Maven. And I am already using Eclipse.
I imported the castor-code-generation jar. Then created a pom.xml file. I added a plugin to it:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>castor-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<schema>config.xsd</schema>
<packaging>pba.plgen.xml.binding</packaging>
<properties>generation.properties</properties>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
Where the properties file is:
# Specifies whether the sources generated should be source compatible with # Java 1.4 or Java 5.0. Legal values are "1.4" and "5.0". When "5.0" is # selected, generated source will use Java 5 features such as generics and # annotations. # Defaults to "5.0". # org.exolab.castor.builder.javaVersion=5.0 # Set to true if you want to have an equals() and # hashCode() method generated for each generated class; # false by default org.exolab.castor.builder.equalsmethod=true # Specifies whether automatic class name conflict resolution # should be used or not; defaults to false. org.exolab.castor.builder.automaticConflictResolution=true # Property specifying whether extra members/methods for extracting XML schema # documentation should be made available; defaults to false org.exolab.castor.builder.extraDocumentationMethods=false
Right Click -> Run As -> Maven generate-sources
And all the source code is generated.
Suppose that the root element is plgen. Then a class Plgen is generated. All the child nodes of plgen become instance variables of Plgen. To unmarshal the xml file,
public void parse() {
try {
m_plgen = Plgen.unmarshal(new FileReader(m_configFilePath));
} catch (MarshalException e) {
e.printStackTrace();
} catch (ValidationException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Well, I haven’t written this properly. But, its enough to make me remember how to get castor working again. My mission accomplished.
Popularity: 10% [?]
Related posts: