{title:'XML Details'}

Juneau supports converting arbitrary POJOs to and from XML using ultra-efficient serializers and parsers. The XML serializer converts POJOs directly to XML without the need for intermediate DOM objects. Likewise, the XML parser uses a STaX parser and creates POJOs directly without intermediate DOM objects.

Unlike frameworks such as JAXB, Juneau does not require POJO classes to be annotated to produce and consume XML. However, several XML annotations are provided for handling namespaces and fine-tuning the format of the XML produced.

The following example shows XML for a typical bean:

##### Sample Beans

| @Bean(typeName="person") | public class Person { | | // Bean properties | public String name; | @Swap(TemporalCalendarSwap.IsoInstant.class) public Calendar birthDate; | public List<Address> addresses; | | // Getters/setters omitted | } | | @Bean(typeName="address") | public class Address { | | // Bean properties | public String street, city; | public StateEnum state; | public int zip; | public boolean isCurrent; | | // Getters/setters omitted | }

##### Sample Code

| Person person = new Person() | .name("John Smith") | .birthDate("1946-08-12T00:00:00Z") | .addresses( | new Address() | .street("100 Main Street") | .city("Anywhereville") | .state(NY) | .zip(12345) | .isCurrent(true); | );

##### Normal XML:

| <person> | <name>John Smith</name> | <birthDate>1946-08-12T04:00:00Z</birthDate> | <addresses> | <address> | <street>100 Main Street</street> | <city>Anywhereville</city> | <state>NY</state> | <zip>12345</zip> | <isCurrent>true</isCurrent> | </address> | </addresses> | </person>

Juneau produces JSON-equivalent XML, meaning any valid JSON document can be losslessly converted into an XML equivalent. In fact, all of the Juneau serializers and parsers are built upon this JSON-equivalence.