# JiBX: Binding XML to Java Code

JiBX Basics
Overview
Flexibility
Performance
Clean code
News and Status
User Comments
Sponsors
Bugs
Getting Started
Binding Tutorial
A basic binding
Binding extras
Structure mapping
Collections
Using mappings
Advanced binding
Method hooks
Custom code
Binding Compiler
Binding on Load
Runtime
JiBX Extras
Building JiBX
Schema Compatibility
Mailing Lists
FAQ
Contributing
License
Binding Definition
Definition details
Definition contexts
Conversions
XML summary
<binding> element
<include> element
<format> element
<namespace> element
<mapping> element
<value> element
<structure> element
<collection> element
Attribute groups
Usage API
Runtime JavaDocs
Subprojects
Generator Tools
JibxSoap
Xsd2Jibx

### What is JiBX?

JiBX is a framework for binding XML data to Java objects. It lets you work with data from XML documents using your own class structures. The JiBX framework handles all the details of converting your data to and from XML based on your instructions. JiBX is designed to perform the translation between internal data structures and XML with very high efficiency, but still allows you a high degree of control over the translation process.

How does it manage this? JiBX uses binding definition documents to define the rules for how your Java objects are converted to or from XML (the binding). At some point after you've compiled your source code into class files you execute the first part of the JiBX framework, the binding compiler. This compiler enhances binary class files produced by the Java compiler, adding code to handle converting instances of the classes to or from XML. After running the binding compiler you can continue the normal steps you take in assembling your application (such as building jar files, etc.). You can also skip the binding compiler as a separate step and instead bind classes directly at runtime, though this approach has some drawbacks.

The second part of the JiBX framework is the binding runtime. The enhanced class files generated by the binding compiler use this runtime component both for actually building objects from an XML input document (called unmarshalling, in data binding terms) and for generating an XML output document from objects (called marshalling). The runtime uses a parser implementing the XMLPull API for handling input documents, but is otherwise self-contained.

This approach gives several important benefits:

1. Flexibility - Use any class structure you want, so long as you can tell JiBX how to translate it to and from XML.
2. Performance - Pull parsing and class file enhancement techniques let JiBX build high-performance marshalling and unmarshalling code directly into your classes.
3. Clean code - You write the code and JiBX works with it, not the other way around!

For an outside opinion of how JiBX performance stacks up against other Java XML serialization and data binding frameworks, you can view the results of the BindMark tests, along with a similar study focused around Web services performance..

You can also see the earlier performance study by JiBX author Dennis Sosnoski, Data Binding, Part 2: Performance, on the IBM developerWorks XML Zone. Besides these performance issues, Dennis has also covered the JiBX 1.X code generation architecture, and several aspects of the JiBX 2.0 design, in his developerWorks Java Classworking Toolkit column.