Java/JDK 6/JAXB

Материал из Java эксперт
Перейти к: навигация, поиск

From XML Schema to Java Generic List

   <source lang="java">

<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>


      </source>
   
  
 
  



Generate Java Source From XML Schema (XSD)

   <source lang="java">

<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>


      </source>
   
  
 
  



JAXB Demo

JAXB XML Schema Enum and Java Enum

   <source lang="java">

<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>


      </source>
   
  
 
  



Marshal Java object to a file

   <source lang="java">

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;
 }

}

       </source>
   
  
 
  



Marshal Java object to xml and output to console

   <source lang="java">

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>

   CA
   <name>Cath</name>
   <salary>300</salary>

</employee>

       </source>
   
  
 
  



Set Target Name Space To Be Java Package Name

   <source lang="java">

<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>


      </source>
   
  
 
  



simple jaxb

   <source lang="java">

/*

* 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;

}

      </source>
   
  
 
  



Unmarshall From XML using JAXB

   <source lang="java">

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>


      </source>