Java/JDK 6/JAXB
Содержание
- 1 From XML Schema to Java Generic List
- 2 Generate Java Source From XML Schema (XSD)
- 3 JAXB Demo
- 4 JAXB XML Schema Enum and Java Enum
- 5 Marshal Java object to a file
- 6 Marshal Java object to xml and output to console
- 7 Set Target Name Space To Be Java Package Name
- 8 simple jaxb
- 9 Unmarshall From XML using JAXB
From XML Schema to Java Generic List
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:Revealed="http://www.jexp.ru"
targetNamespace="http://www.jexp.ru">
<element name="Schedule">
<complexType>
<sequence>
<element name="course" type="Revealed:Course" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<complexType name="Course">
<sequence>
<element name="courseId" type="string"/>
<element name="name" type="string"/>
<element name="description" type="string"/>
</sequence>
</complexType>
</schema>
Generate Java Source From XML Schema (XSD)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="item" type="Item"/>
<xsd:complexType name="Item">
<xsd:sequence>
<xsd:element name="code" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
JAXB Demo
JAXB XML Schema Enum and Java Enum
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:Revealed="http://www.jexp.ru"
targetNamespace="http://www.yourNameSpace.ru">
<simpleType name="Location">
<restriction base="string">
<enumeration value="north"></enumeration>
<enumeration value="south"></enumeration>
<enumeration value="east"></enumeration>
<enumeration value="west"></enumeration>
</restriction>
</simpleType>
</schema>
Marshal Java object to a file
import java.io.FileOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
public class JavaToXMLDemo {
public static void main(String[] args) throws Exception {
JAXBContext context = JAXBContext.newInstance(Employee.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Employee object = new Employee();
object.setCode("CA");
object.setName("Cath");
object.setSalary(300);
m.marshal(object, new FileOutputStream("result.xml"));
}
}
@XmlRootElement
class Employee {
private String code;
private String name;
private int salary;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int population) {
this.salary = population;
}
}
Marshal Java object to xml and output to console
import java.io.FileOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
public class JavaToXMLDemo {
public static void main(String[] args) throws Exception {
JAXBContext context = JAXBContext.newInstance(Employee.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Employee object = new Employee();
object.setCode("CA");
object.setName("Cath");
object.setSalary(300);
m.marshal(object, System.out);
}
}
@XmlRootElement
class Employee {
private String code;
private String name;
private int salary;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int population) {
this.salary = population;
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
<code>CA</code>
<name>Cath</name>
<salary>300</salary>
</employee>
Set Target Name Space To Be Java Package Name
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:Revealed="http://www.jexp.ru"
targetNamespace="http://www.yourNameSpace.ru">
<simpleType name="Location">
<restriction base="string">
<enumeration value="north"></enumeration>
<enumeration value="south"></enumeration>
<enumeration value="east"></enumeration>
<enumeration value="west"></enumeration>
</restriction>
</simpleType>
</schema>
simple jaxb
/*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://jwsdp.dev.java.net/CDDLv1.0.html
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://jwsdp.dev.java.net/CDDLv1.0.html If applicable,
* add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your
* own identifying information: Portions Copyright [yyyy]
* [name of copyright owner]
*/
package webservices.simple_jaxb;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
// import java content classes generated by binding compiler
import primer.po.*;
/*
* $Id: UnmarshalRead.java,v 1.2 2006/04/01 20:21:48 msreddy Exp $
*
* Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
public class UnmarshalRead {
// This sample application demonstrates how to unmarshal an instance
// document into a Java content tree and access data contained within it.
public static void main( String[] args ) {
try {
// create a JAXBContext capable of handling classes generated into
// the primer.po package
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
// create an Unmarshaller
Unmarshaller u = jc.createUnmarshaller();
// unmarshal a po instance document into a tree of Java content
// objects composed of classes from the primer.po package.
JAXBElement<?> poElement = (JAXBElement<?>)u.unmarshal( new File( "po.xml" ) );
PurchaseOrderType po = (PurchaseOrderType)poElement.getValue();
// examine some of the content in the PurchaseOrder
System.out.println( "Ship the following items to: " );
// display the shipping address
USAddress address = po.getShipTo();
displayAddress( address );
// display the items
Items items = po.getItems();
displayItems( items );
} catch( JAXBException je ) {
je.printStackTrace();
}
}
public static void displayAddress( USAddress address ) {
// display the address
System.out.println( "\t" + address.getName() );
name = address.getName();
System.out.println( "\t" + address.getStreet() );
System.out.println( "\t" + address.getCity() +
", " + address.getState() +
" " + address.getZip() );
System.out.println( "\t" + address.getCountry() + "\n");
}
public static void displayItems( Items items ) {
// the items object contains a List of primer.po.ItemType objects
List itemTypeList = items.getItem();
// iterate over List
for( Iterator iter = itemTypeList.iterator(); iter.hasNext(); ) {
Items.Item item = (Items.Item)iter.next();
System.out.println( "\t" + item.getQuantity() +
" copies of \"" + item.getProductName() +
"\"" );
}
}
public static String getName() {
if (name == null) {
main(null);
}
return name;
}
private static String name;
}
Unmarshall From XML using JAXB
import generated.Item;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class UnmarshallingDemo {
public static void main (String [] args) {
try {
JAXBContext jc = JAXBContext.newInstance ("generated");
Unmarshaller u = jc.createUnmarshaller ();
File f = new File ("item.xml");
JAXBElement element = (JAXBElement) u.unmarshal (f);
Item item = (Item) element.getValue ();
System.out.println (item.getCode ());
System.out.println (item.getName ());
System.out.println (item.getPrice ());
} catch (JAXBException e) {
e.printStackTrace ();
}
}
}
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="item" type="Item"/>
<xsd:complexType name="Item">
<xsd:sequence>
<xsd:element name="code" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="price" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>