I was looking recently for some java framework to save some objects in xml files. Until now I’ve tested from a noob perspective 2 frameworks: JAXB and Castor. Don’t get misleaded by my judgment because I didn’t use any of them very deep.
I was playing with JAXB some time ago and at that time I’ve seen some interesting features there. I’ve created an XSL schema file and I’ve then generated some files. The generated classes were not some simple POJO files. They contain some annotations specifying the names of the tag and attributes in the XML file. I know this technique from .NET, where I’ve used it for some time and I consider it great(but it comes with a big disadvantage – you can not use some existing classes unless you change them and add annotations).
JAXB is not a single framework, it is a part of the Sun JWSDP – Java Web Services Developer Pack (Java WSDP) 2.0
Recently I’ve tried Castor and I can say it’s more than a simple beaver. It’s approach is different is different than JAXB approach. Castor is using some XML files containing the bindings.
After a few minuted spent on the internet I came to this conclusion:
- JAXB is nice, Castor si nice as well.
- In order to use JAXB you need to install a big library from which to use only JAXB. When you want to distribute you’re application you’ll need to add also about 6-7 jars from JWSDP. Castor is really light. For distribution you need to add only castor.jar which relies on xerces.jar
- Obviously Castor is using reflection for marshalling/unmarshalling. JAXB is using annotations. I don’t know how fast the annotations are, but for sure reflection is slow.
- For Castor you need to manage the XML file containing the bindings, to configure the application to read it from some where, … etc. On the other side fot JAXB you have everything in the generated class. JAXB seems better here.
- Let’s look the previous thing from another perspective: You have some classes which are already created and you want to persist them. And to increase the dramatical effect and make easier your decision let’s assume you can not change them. In this case is very easy to decide, because you can not use JAXB.
- Both can be used to generate classes from XSL schema files. Castor has a tool to generate simple bindings from POJO classes. JAXB generate not only the classes containing data but also some factories.
- Castor can be used to persist data in database instead of xml files. This looks very good if you plan to switch between xml files and database.
Considering those points I would go for Castor if I would need a simple XML serialization. I’d use JAXB only if I would have to use something more from Java Web Services Developer Pack.