JAXB Castor Comparison

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.

Did you enjoy this tutorial? Be sure to subscribe to the my RSS feed not to miss my new posts!
... or make it popular on

6 Comments

  1. Hi,

    I like this post, I really liked your suggestion, when we should use castor or JAXB.

    “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.”

    Thanks,
    Jimmi
    http://www.rialight.com

  2. JAXB is part of the JDK => nothing to download, except if you would like to use an “early access” release.
    JAXB is maintained by Sun and hence has a more certain future and a better support (documentations, forums, etc).
    Did you see all the plugins available?

    I tried Castor… and really now, since I use JAXB, I cannot see why I would go back to Castor…

  3. I tried castor with objects and was able to get xmls although mapping didnot work perfectly.
    jaxb w’d be pain.
    Jaxb-2 is using annotations and is dynamic like castor(probaly using reflection like castor now)

    but castor had all that long time back. šŸ™‚

    castor commiters, pls. add annotations support to kep jaxB folks quiet.

  4. Hi,
    thanks for your post.

    I have additional reason for Castor: When you use a lot of similar web services in your application you can map different XSD files (with the same definition) to one object.

  5. “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.”

    I have used castor on many projects and from what i see is this is Actually an issue with JAXB not any feature..

    reason is : 1 we are forced to have annotated classes and it relies on generated classes , from maintenance perspective , its much better to have a binding /mapping file since it is one place where u have all your mappings , vs its spread through out your model classes and n number of classes have to be changed – which also means more testing expense .

    In case of Complex object structures with inheritance — to understand how object is mapped to xml i would have to open objects and read annottaions and assuume the xml and which is very impractical

    if xml structure changes we can manage it in most cases just by modifying mapping xml .

    It also seems to be dependent on schema which is a good feature but shud be an option not mandatory

  6. Another case is : when u have a huge code base already in production and all model classes are already existing , same object may be going to JMS , Database or some analytic’s. etc

    now for XML
    we would not use generated classes – means manually writing annotations to hundred of model classes . which are also used by other layers they have to do testing as well .

Leave a Comment.