• Home
  • LLMs
  • Docker
  • Kubernetes
  • Java
  • All
  • About
Samples | Customizing JAXB Bindings (JAXB Maven Plugin)
  1. Notes
  2. The project Structure
  3. Maven - POM Configuration
  4. Schema: payload.xsd
  5. Sample XML: payload.xml
  6. Model: Payload.java
  7. Customizing JAXB Bindings: payload.xjb

  1. Notes
    This sample code shows how to:
    • Use the JAXB maven plugin to generate Java classes from the XML schemas.
    • Customize JAXB Bindings to reference existing classes.

    See this page for details how to use JAXB to marshal and unmarshal Java objects and XML documents:
    JAXB Marshalling/Unmarshalling
  2. The project Structure

    mtitek-jaxb-bindings
  3. Maven - POM Configuration
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>mtitek.jaxb.bindings</groupId>
        <artifactId>mtitek-jaxb-bindings</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.14.0</version>
    
                    <executions>
                        <execution>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
    
                    <configuration>
                        <args>
                            <arg>-Xsetters</arg>
                        </args>
    
                        <plugins>
                            <plugin>
                                <groupId>org.jvnet.jaxb2_commons</groupId>
                                <artifactId>jaxb2-basics</artifactId>
                                <version>1.11.1</version>
                            </plugin>
                        </plugins>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
  4. Schema: payload.xsd
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified"
        elementFormDefault="qualified" targetNamespace="http://bindings.jaxb.mtitek/payload"
        xmlns="http://bindings.jaxb.mtitek/payload" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1">
    
        <xs:element name="payload">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="id" type="xs:string" />
    
                    <xs:element name="code" type="xs:string" />
    
                    <xs:element name="parameters" type="payloadParameters"
                        minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    
        <xs:complexType name="payloadParameters">
            <xs:sequence>
                <xs:element name="parameter" type="payloadParameter"
                    minOccurs="1" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    
        <xs:complexType name="payloadParameter">
            <xs:all>
                <xs:element name="name" type="xs:string" />
                <xs:element name="value" type="xs:string" />
            </xs:all>
    
            <xs:attribute name="id" type="xs:string" />
        </xs:complexType>
    </xs:schema>
  5. Sample XML: payload.xml
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <payload xmlns="http://bindings.jaxb.mtitek/payload" xmlns:ns1="http://bindings.jaxb.mtitek/payload/data"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://bindings.jaxb.mtitek/payload payload.xsd http://bindings.jaxb.mtitek/payload/data payloadData.xsd">
        <id>123</id>
        <code>xyz</code>
    
        <parameters>
            <parameter id="11">
                <name>bar</name>
                <value>foo</value>
            </parameter>
    
            <parameter id="22">
                <value>ti</value>
                <name>ta</name>
            </parameter>
        </parameters>
    </payload>
  6. Model: Payload.java
    package mtitek.jaxb.bindings.payload;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "payload")
    @XmlType(name = "payload", propOrder = { "id", "code", "parameters" })
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Payload {
        @XmlElement(name = "id", required = true)
        private String id;
    
        @XmlElement(name = "code", required = true)
        private String code;
    
        private PayloadParameters parameters;
    
        public String getId() {
            return id;
        }
    
        public void setId(String value) {
            this.id = value;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String value) {
            this.code = value;
        }
    
        public PayloadParameters getParameters() {
            return parameters;
        }
    
        public void setParameters(PayloadParameters parameters) {
            this.parameters = parameters;
        }
    
        @Override
        public String toString() {
            return "Payload [id=" + id + ", code=" + code + "]";
        }
    }
  7. Customizing JAXB Bindings: payload.xjb
    <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <jxb:bindings node="//xs:schema//xs:element[@name='payload']"
            schemaLocation="./payload.xsd">
            <jxb:class ref="mtitek.jaxb.bindings.payload.Payload" />
        </jxb:bindings>
    </jxb:bindings>
© 2025  mtitek