`
younker
  • 浏览: 60411 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAXB2.0 Project实例

阅读更多
笔者安装的是Java Web Services Developer Pack是jwsdp-2_0-windows-i586.exe,
You can reach it at:
安装完之后,笔者写了一个Java Application和一个web project,借助Java Web Services Developer Pack工具包中的JAXB,操纵通过xjc工具生成的与xsd文件相对应的Java类,生成该java类的对象,来产生一个xml文件。
下面是笔者编写Java Application的过程。
环境:Window xp,MyEclipse6.0,JDK1.5,JWSDP2.0。
步骤如下:
1、在MyEclipse6.0里面New一个Java Project,命名为:testJABX。

2、导入JAXB的工具包。右键点击testJABX,然后选择Build Path-->Configure Build Path,然后选择libraries选项卡,然后Add External JARS,加入jwsdp-2.0\jaxb\lib这个包下面的jaxb1-impl.jar,jaxb-api.jar,jaxb-impl.jar,jaxb-xjc.jar这四个包。

3、在命令行进入..\jwsdp-2.0\jaxb\bin,然后用xjc +xsd文件名,生成Java类。

4、将生成的类导进你的Java Project,将这些类组织好。
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element type="PurchaseOrderType" name="purchaseOrder"><xsd:element type="xsd:string" name="comment"><xsd:complextype name="PurchaseOrderType"><xsd:sequence><xsd:element type="USAddress" name="shipTo"><xsd:element type="USAddress" name="billTo"><xsd:element minoccurs="0" ref="comment"><xsd:complextype name="USAddress"><xsd:sequence><xsd:element type="xsd:string" name="name"><xsd:element type="xsd:string" name="street"><xsd:element type="xsd:string" name="city"><xsd:element type="xsd:string" name="state"><xsd:complextype name="Items"><xsd:sequence><xsd:element maxoccurs="unbounded" minoccurs="1" name="item"><xsd:complextype><xsd:sequence><xsd:element type="xsd:string" name="productName"><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="purchaseOrder" type="PurchaseOrderType"><xsd:element name="comment" type="xsd:string"><xsd:complextype name="PurchaseOrderType"><xsd:sequence><xsd:element name="shipTo" type="USAddress"><xsd:element name="billTo" type="USAddress"><xsd:element ref="comment" minoccurs="0"><xsd:complextype name="USAddress"><xsd:sequence><xsd:element name="name" type="xsd:string"><xsd:element name="street" type="xsd:string"><xsd:element name="city" type="xsd:string"><xsd:element name="state" type="xsd:string"><xsd:complextype name="Items"><xsd:sequence><xsd:element name="item" minoccurs="1" maxoccurs="unbounded"><xsd:complextype><xsd:sequence><xsd:element name="productName" type="xsd:string"><xsd:simpletype name="SKU"><xsd:restriction base="xsd:string"><xsd:pattern value="\d{3}-[A-Z]{2}"></xsd:pattern></xsd:restriction></xsd:simpletype>
    生成的java文件有:Items.java,PurchaseOrderType,USAddress.java,ObjectFactory.java。笔者把它组织在primer.po这个包    下面。
    关于xsd文件生成java文件的资料,读者可以自行上网找,网上大把这样的资料。
    不知怎么回事,贴不上xsd文件。不过,也无关紧要的了

5、写主程序,测试一下。结果是在控制台输出一个xml文件。xml文件中的数据值,是与程序员设置Java对象值一一对应的。
    主程序主要是给xsd生成的Java对象赋值。  
主程序如下:
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.GregorianCalendar;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import javax.xml.bind.*;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;

import primer.po.*;
 
public class Main {
   
    // This sample application demonstrates how to construct value classes
    // and create a java content tree from scratch and marshal it
    // to XML data
   
    public static void main( String[] args ) {
        try {
            // create a JAXBContext
            JAXBContext jc = JAXBContext.newInstance( "primer.po" );
           
            // create an empty PurchaseOrder
            PurchaseOrderType po = new PurchaseOrderType();
           
            // set the required orderDate attribute
            po.setOrderDate( getDate() );
           
            // create shipTo USAddress object
            USAddress shipTo = createUSAddress( "Alice Smith",
                                                "123 Maple Street",
                                                "Cambridge",
                                                "MA",
                                                "12345" );
                                               
            // set the required shipTo address
            po.setShipTo( shipTo );
           
            // create billTo USAddress object
            USAddress billTo = createUSAddress( "Robert Smith",
                                                "8 Oak Avenue",
                                                "Cambridge",
                                                "MA",
                                                "12345" );
           
            // set the requred billTo address
            po.setBillTo( billTo );
                                               
            // create an empty Items object
            Items items = new Items();
           
            // get a reference to the ItemType list
            List<items.item> itemList = items.getItem();
           
            // start adding ItemType objects into it
            itemList.add( createItem( "Nosferatu - Special Edition (1929)",
                                      new BigInteger( "5" ),
                                      new BigDecimal( "19.99" ),
                                      null,
                                      null,
                                      "242-NO" ) );
            itemList.add( createItem( "The Mummy (1959)",
                                      new BigInteger( "3" ),
                                      new BigDecimal( "19.98" ),
                                      null,
                                      null,
                                      "242-MU" ) );
            itemList.add( createItem( "Godzilla and Mothra: Battle for Earth/Godzilla vs. King Ghidora",
                                      new BigInteger( "3" ),
                                      new BigDecimal( "27.95" ),
                                      null,
                                      null,
                                      "242-GZ" ) );
           
            // set the required Items list
            po.setItems( items );
          
        // create an element for marshalling
        JAXBElement <purchaseordertype> poElement = (new ObjectFactory()).createPurchaseOrder(po);

            // create a Marshaller and marshal to System.out
            Marshaller m = jc.createMarshaller();
            m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
           
            m.marshal(poElement, new FileOutputStream("test.xml"));
           
            m.marshal(poElement, System.out);
           
        } catch( JAXBException je ) {
            je.printStackTrace();
        } catch( IOException ioe ) {
            ioe.printStackTrace();
        }
    }
   
    public static USAddress createUSAddress(  String name, String street,
                                              String city, String state,
                                              String zip ) {
   
        // create an empty USAddress objects                                            
        USAddress address = new USAddress();
      
        // set properties on it
        address.setName( name );
        address.setStreet( street );
        address.setCity( city );
        address.setState( state );
        address.setZip( new BigDecimal( zip ) );
       
        // return it
        return address;
    }
   
    public static Items.Item createItem( String productName,
                                         BigInteger quantity,
                                         BigDecimal price,
                                         String comment,
                                         XMLGregorianCalendar shipDate,
                                         String partNum ) {
  
        // create an empty ItemType object
        Items.Item item = new Items.Item();
       
        // set properties on it
        item.setProductName( productName );
        item.setQuantity( quantity );
        item.setUSPrice( price );
        item.setComment( comment );
        item.setShipDate( shipDate );
        item.setPartNum( partNum );
       
        // return it
        return item;
    }
                                                                       
    private static XMLGregorianCalendar getDate() {
    try {
        return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
    } catch (DatatypeConfigurationException e) {
        throw new Error(e);
        }
    }
}

6、主程序写好之后,发现会报出一个错误:   
      The type javax.xml.stream.XMLStreamWriter cannot be resolved. It is indirectly referenced from
required .class files
    这是因为在JDK1.5中,没有XMLStreamWriter这个类。
    所以,我们需要导进包含
XMLStreamWriter的jar包。这个包是jsr173_1.0_api.jar。读者可以自己去sun的网站上下载。
    本文附件也加了这个jar包。
    因为这个错误,花费了笔者半天的时间,汗。

7、运行主程序,结果出来了。
<purchaseorder orderdate="2007-09-15T12:01:12.375+08:00"><items><item partnum="242-GZ"><usprice></usprice></item></items></purchaseorder>
Well Done!!
</purchaseordertype> </items.item></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:schema></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:schema>
  • jsr173_1.0_api.jar (47.8 KB)
  • 描述: jsr173_1.0_api.jar包,包含XMLStreamWriter这个类。
  • 下载次数: 420
  • testJABX.rar (16.3 KB)
  • 描述: 源文件
  • 下载次数: 303
分享到:
评论
2 楼 Joo 2008-04-19  
不错
Binding Schema那块也一起讲讲就好了
1 楼 smudhd 2007-11-01  
不错的文章,值得学习

相关推荐

    jaxb2.0 JEE5

    JEE5规范中提出。从java对象转成xsd,反之也可以

    jaxb2.0英文文档

    jaxb2.0文档,java于xml动态绑定框架,很好的东西。

    jaxb2.0 JAR

    改JAR包是JAXB2.0的核心包。。。。。。。。。。。。。。。。。。。

    jaxb 2.0 java architecture for xml binding

    THE Java™Architecture for XML Binding (JAXB) provides a fast and convenient way to bind between XML schemas and Java representations, making it easy for Java developers to incorporate XML data and ...

    JAXB2.0编组和解组实现

    NULL 博文链接:https://code727.iteye.com/blog/1914731

    jaxb-api-2.1.jar

    在使用webservice,esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader错误.执行System.out.println(System.getProperty("java.endorsed.dirs"));输出jaxb-api-2.1.jar...

    jaxb-api-2.0.jar

    jaxb-api-2.0.jar jaxb-api-2.0.jar

    jaxb-2.2.2

    jaxb-api-2.2.2-sources.jar jaxb最新架包 可解决相关问题 开发者必备

    jaxb资料及实例,里面还包含了其他资料地址3

    jaxb资料及实例,里面还包含了其他资料地址2

    jaxb-xjc-2.0EA3.jar

    jaxb-xjc-2.0EA3.jar

    JAXB 学习资料 作者个人总结和测试程序

    JAXB2.0的使用方法和测试代码,作者根据使用测试得出的总结。

    jaxb-2_1_9.zip

    java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file://build/web/WEB-INF/lib/jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class...

    jaxb.rar_J2EE JA_JDK6 JAXB_jaxb_jaxb2 binding xjb_nbproje

    J2EE中解析XML文件的技术。最初JAXB是JavaEE的一部分,在JDK6.0中,sun将其移到了JavaSE中。在JDK6.0中,JAXB的版本中2.0,比起1.0版本,JAXB2.0基于Annotation来标识要作绑定的类和属性,从而缩减了开发工作量。

    jaxb-api-2.2 jaxb-impl

    在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...

    immutable-xjc:immutable-xjc是一个JAXB 2.0 XJC插件,用于使用可选的构建器模式生成器使模式派生类不可变

    IMMUTABLE-XJC是一个JAXB 2.x XJC插件,用于使模式派生类不可变: 删除所有的setter方法 分数班决赛 创建一个以所有字段为参数的公共构造函数 创建一个受保护的无参数构造函数 将课程中的所有字段标记为final ...

    XFireXFire

    支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor;  支持基于HTTP、JMS、XMPP等多种协议访问Web服务;  支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-...

    JAXB与xml相互转换实例

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB与xml相互转换实例。

    jaxb-impl-2.0.3

    jaxb-impl-2.0.3.jar 可用包

    Xfire整合webservice jar包

    支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor; 支持基于HTTP、JMS、XMPP等多种协议访问Web服务; 支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-...

Global site tag (gtag.js) - Google Analytics