MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

  • Java
  • jaxb

jaxb

  • http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing.html

  • With JAXB you can:
    • Generate JAXB Java classes from an XML schema
    • Use schema-derived JAXB classes to unmarshal and marshal XML content in a Java application
    • Create a Java content tree from scratch using schema-derived JAXB classes
    • Validate XML content during unmarshalling and at runtime
    • Customize JAXB schema-to-Java bindings

XSD data types

  • http://docs.oracle.com/javaee/5/tutorial/doc/bnazq.html

XSD type

Java type

xsd:string

java.lang.String

xsd:integer

java.math.BigInteger

xsd:int

int

xsd.long

long

xsd:short

short

xsd:decimal

java.math.BigDecimal

xsd:float

float

xsd:double

double

xsd:boolean

boolean

xsd:byte

byte

xsd:QName

javax.xml.namespace.QName

xsd:dateTime

javax.xml.datatype.XMLGregorianCalendar

xsd:base64Binary

byte[]

xsd:hexBinary

byte[]

xsd:unsignedInt

long

xsd:unsignedShort

int

xsd:unsignedByte

short

xsd:time

javax.xml.datatype.XMLGregorianCalendar

xsd:date

javax.xml.datatype.XMLGregorianCalendar

xsd:g

javax.xml.datatype.XMLGregorianCalendar

xsd:anySimpleType

java.lang.Object

xsd:anySimpleType

java.lang.String

xsd:duration

javax.xml.datatype.Duration

xsd:NOTATION

javax.xml.namespace.QName

xjc command generation example

   1 cd /tmp
   2 mkdir -p xjctest/xsd
   3 cd xjctest

nano simple.xjb

   1 <jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
   2            xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
   3            xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
   4            jaxb:extensionBindingPrefixes="xjc"
   5            jaxb:version="2.0">
   6   <jaxb:globalBindings generateValueClass="true">
   7     <xjc:simple />
   8     <xjc:serializable uid="12343"/> <!-- marks generated class as Serializable-->
   9     <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
  10       parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
  11       printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
  12   </jaxb:globalBindings>
  13 </jaxb:bindings>

nano xsd/test.xsd

   1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   2 <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   3   <xs:element name="test" type="Test"/>
   4   <xs:complexType name="Test">
   5     <xs:sequence>
   6       <xs:element name="name" type="xs:string" minOccurs="0"/>
   7       <xs:element name="birthDate" type="xs:dateTime" minOccurs="0"/>
   8       <xs:element name="dummyInt" type="xs:int" minOccurs="0"/>
   9     </xs:sequence>
  10   </xs:complexType>
  11 </xs:schema>

Run command

   1 xjc xsd/test.xsd -b simple.xjb -extension -npa

parsing a schema...
compiling a schema...
generated/ObjectFactory.java
generated/Test.java
org/w3/_2001/xmlschema/Adapter1.java

To generate a proper Date it might be necessary to use an adapter for xjb.

Generate Java classes with Maven, xjc and XSD

   1  * mkdir -p /tmp/xjctest/src/main/resources

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   5 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   6   <modelVersion>4.0.0</modelVersion>
   7   <groupId>org.allowed.bitarus</groupId>
   8   <artifactId>xjctest</artifactId>
   9   <version>0.1.0</version>
  10     <build>
  11         <plugins>
  12             <plugin>
  13                 <groupId>org.jvnet.jaxb2.maven2</groupId>
  14                 <artifactId>maven-jaxb2-plugin</artifactId>
  15                 <version>0.11.0</version>
  16                 <executions>
  17                     <execution>
  18                         <goals>
  19                             <goal>generate</goal>
  20                         </goals>                        
  21                     </execution>
  22                 </executions>
  23                 <configuration>
  24                         <schemaDirectory>src/main/resources</schemaDirectory>
  25                         <schemaIncludes>
  26                             <include>*.xsd</include>
  27                         </schemaIncludes>
  28                         <bindingDirectory>src/main/resources</bindingDirectory>
  29                         <bindingIncludes>
  30                             <include>*.xjb</include>
  31                         </bindingIncludes>                   
  32                 </configuration>
  33             </plugin>
  34         </plugins>
  35     </build>
  36 </project>
  • Copy test.xsd and and simple.xjb to /tmp/xjctest/src/main/resources
  • run mvn clean install
  • The source code is created in /tmp/xjctest/target/generated-sources/xjc/

Generate classes with jaxb in Java 17

Will generate files to src/main/java with package test.org.types.Client from the xsd file.

  • test/org/types/Client.java
  • test/org/types/ObjectFactory.java
  • org/w3/_2001/xmlschema/Adapter1.java

   1 cd ~
   2 wget https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-ri/4.0.2/jaxb-ri-4.0.2.zip
   3 yum install unzip 
   4 unzip jaxb-ri-4.0.2.zip
   5 jaxb-ri/bin/xjc.sh
   6 mkdir ~/xjctest
   7 cd xjctest
   8 mkdir -p src/main/resources
   9 mkdir -p src/main/java
  10 ~/jaxb-ri/bin/xjc.sh src/main/resources/test.xsd -b src/main/resources/simple.xjb -d src/main/java -p org.example -extension -npa

pom.xml

   1 <?xml version="1.0" encoding="UTF-8"?>
   2 <project xmlns="http://maven.apache.org/POM/4.0.0" 
   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   5 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   6   <modelVersion>4.0.0</modelVersion>
   7   <groupId>org.allowed.bitarus</groupId>
   8   <artifactId>xjctest</artifactId>
   9   <version>0.1.0</version>
  10   <dependencies>
  11     <dependency>
  12       <groupId>jakarta.xml.bind</groupId>
  13       <artifactId>jakarta.xml.bind-api</artifactId>
  14       <version>4.0.0</version>
  15     </dependency>
  16     <dependency>
  17       <groupId>javax.xml.bind</groupId>
  18       <artifactId>jaxb-api</artifactId>
  19       <version>2.3.1</version>
  20     </dependency>
  21   </dependencies>
  22 </project>

src/main/resources/simple.xjb

   1 <jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
   2            xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
   3            xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
   4            jaxb:extensionBindingPrefixes="xjc"
   5            jaxb:version="3.0">
   6   <jaxb:globalBindings generateValueClass="true">
   7     <xjc:simple />
   8     <xjc:serializable uid="12343"/> <!-- marks generated class as Serializable-->
   9     <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
  10       parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
  11       printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
  12   </jaxb:globalBindings>
  13 </jaxb:bindings>

src/main/resources/test.xsd

   1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
   2 <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://org.test/types" >
   3   <xs:complexType name="Client">
   4     <xs:sequence>
   5       <xs:element name="name" type="xs:string" minOccurs="0"/>
   6       <xs:element name="creationDate" type="xs:dateTime" minOccurs="0"/>
   7       <xs:element name="id" type="xs:int" minOccurs="0"/>
   8     </xs:sequence>
   9   </xs:complexType>
  10 </xs:schema>
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01