Java/JDK 6/JAXB

Материал из Java эксперт
Версия от 18:01, 31 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>