`
conkeyn
  • 浏览: 1522974 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

学习dom4j的jaxb实现(半成品)

阅读更多

primer.xml

<?xml version="1.0"?>
<purchaseOrders>
  <!-- 1st -->
  <purchaseOrder id="1" orderDate="2004-06-28">
    <shipTo country="US">
      <name>Alice Smith</name>
      <street>123 Maple Street</street>
      <city>Cambridge</city>
      <state>MA</state>
      <zip>12345</zip>
    </shipTo>
    <billTo country="US">
      <name>Robert Smith</name>
      <street>8 Oak Avenue</street>
      <city>Cambridge</city>
      <state>MA</state>
      <zip>12345</zip>
    </billTo>
    <items/>
  </purchaseOrder>
  <!-- 2nd -->
  <purchaseOrder id="2" orderDate="2004-06-29">
    <shipTo country="US">
      <name>Lee Grant</name>
      <street>123 Maple Street</street>
      <city>Cambridge</city>
      <state>MA</state>
      <zip>12345</zip>
    </shipTo>
    <billTo country="US">
      <name>Stonewall  Jackson</name>
      <street>8 Oak Avenue</street>
      <city>Lexington</city>
      <state>MA</state>
      <zip>12345</zip>
    </billTo>
    <items/>
  </purchaseOrder>
</purchaseOrders>
 

 

Item.java

import java.io.Serializable;

import javax.xml.bind.Element;

public class Items implements Serializable, Element
{
    private static final long serialVersionUID = 6041417537367507061L;

}

 USAddress.java

import java.io.Serializable;
import java.math.BigDecimal;

import javax.xml.bind.Element;

public class USAddress implements Serializable, Element
{
    private static final long serialVersionUID = -590607725333909750L;
    private String            name;

    private String            street;

    private String            city;

    private String            state;

    private String            country;

    private BigDecimal        zip;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getStreet()
    {
        return street;
    }

    public void setStreet(String street)
    {
        this.street = street;
    }

    public String getCity()
    {
        return city;
    }

    public void setCity(String city)
    {
        this.city = city;
    }

    public String getState()
    {
        return state;
    }

    public void setState(String state)
    {
        this.state = state;
    }

    public BigDecimal getZip()
    {
        return zip;
    }

    public void setZip(BigDecimal zip)
    {
        this.zip = zip;
    }

    public String getCountry()
    {
        return country;
    }

    public void setCountry(String country)
    {
        this.country = country;
    }
}

 PurchaseOrder.java

import java.io.Serializable;
import java.util.Calendar;

import javax.xml.bind.Element;

/**
 * @author linzq
 * 
 */
public class PurchaseOrder implements Serializable, Element
{
    private static final long serialVersionUID = 487350120910629296L;

    private Integer           id;

    private Calendar          orderDate;

    private USAddress         billTo;

    private USAddress         shipTo;

    private Items             items;

    public Calendar getOrderDate()
    {
        return orderDate;
    }

    public void setOrderDate(Calendar orderDate)
    {
        this.orderDate = orderDate;
    }

    public Integer getId()
    {
        return id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public USAddress getBillTo()
    {
        return billTo;
    }

    public void setBillTo(USAddress billTo)
    {
        this.billTo = billTo;
    }

    public USAddress getShipTo()
    {
        return shipTo;
    }

    public void setShipTo(USAddress shipTo)
    {
        this.shipTo = shipTo;
    }

    public Items getItems()
    {
        return items;
    }

    public void setItems(Items items)
    {
        this.items = items;
    }
}

 PurchaseOrders.java

import java.io.Serializable;
import java.util.List;

import javax.xml.bind.Element;

/**
 * @author linzq
 * 
 */
public class PurchaseOrders implements Serializable, Element
{
    private static final long serialVersionUID = -1845681258981901430L;

    List<PurchaseOrder>       purchaseOrder;

    public List<PurchaseOrder> getPurchaseOrder()
    {
        return purchaseOrder;
    }

    public void setPurchaseOrder(List<PurchaseOrder> purchaseOrder)
    {
        this.purchaseOrder = purchaseOrder;
    }

}

 ObjectFactory.java

public class ObjectFactory
{
    public static PurchaseOrders createPurchaseOrders()
    {
        return new PurchaseOrders();
    }

    public static PurchaseOrder createPurchaseOrder()
    {
        return new PurchaseOrder();
    }

    public static USAddress createUSAddress()
    {
        return new USAddress();
    }

    public static Items createItems()
    {
        return new Items();
    }
}

 PurchaseOrderHandler.java

public class PurchaseOrderHandler implements JAXBObjectHandler
{

    @Override
    public void handleObject(javax.xml.bind.Element jaxbElement)
            throws Exception
    {
        PurchaseOrder order = (PurchaseOrder) jaxbElement;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        System.out.println("Order - id:" + order.getId() + ", date:" +
                format.format(order.getOrderDate().getTime()));
    }
}

 PurchaseOrderDateModifier.java

public class PurchaseOrderDateModifier implements JAXBObjectModifier
{

    @Override
    public javax.xml.bind.Element modifyObject(
            javax.xml.bind.Element jaxbElement) throws Exception
    {
        PurchaseOrder order = (PurchaseOrder) jaxbElement;

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        order.setOrderDate(calendar);
        return order;
    }
}

 JAXBDemo.java

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Calendar;

import javax.xml.bind.JAXBException;

import org.dom4j.io.OutputFormat;
import org.dom4j.jaxb.JAXBWriter;
import org.xml.sax.SAXException;

/**
 * @author linzq
 * 
 */
public class JAXBDemo
{

    public static String getOutputDir()
    {
        return JAXBDemo.class.getResource(".").getFile().toString();
    }

    /**
     * @param args
     * @throws IOException
     * @throws SAXException
     * @throws JAXBException
     */
    public static void main(String[] args) throws IOException, SAXException,
            JAXBException
    {
        System.out
                .println(JAXBDemo.class.getResource(".").getFile().toString());
        System.exit(0);
        ObjectFactory factory = new ObjectFactory();

        PurchaseOrders orders = factory.createPurchaseOrders();

        // Order 1
        PurchaseOrder order = factory.createPurchaseOrder();

        USAddress billTo = factory.createUSAddress();
        billTo.setCity("Cambridge");
        billTo.setCountry("US");
        billTo.setName("Robert Smith");
        billTo.setState("MA");
        billTo.setStreet("8 Oak Avenue");
        billTo.setZip(new BigDecimal(12345));
        order.setBillTo(billTo);

        USAddress shipTo = factory.createUSAddress();
        shipTo.setCity("Cambridge");
        shipTo.setCountry("US");
        shipTo.setName("Alice Smith");
        shipTo.setState("MA");
        shipTo.setStreet("123 Maple Street");
        shipTo.setZip(new BigDecimal(12345));
        order.setShipTo(shipTo);

        Calendar orderDate = Calendar.getInstance();
        orderDate.set(2004, 06, 30);
        order.setOrderDate(orderDate);

        Items items = factory.createItems();
        order.setItems(items);

        orders.getPurchaseOrder().add(order);

        // Order 2
        PurchaseOrder order2 = factory.createPurchaseOrder();

        USAddress billTo2 = factory.createUSAddress();
        billTo2.setCity("Cambridge");
        billTo2.setCountry("US");
        billTo2.setName("Robert Smith");
        billTo2.setState("MA");
        billTo2.setStreet("8 Oak Avenue");
        billTo2.setZip(new BigDecimal(12345));
        order2.setBillTo(billTo2);

        USAddress shipTo2 = factory.createUSAddress();
        shipTo2.setCity("Cambridge");
        shipTo2.setCountry("US");
        shipTo2.setName("Alice Smith");
        shipTo2.setState("MA");
        shipTo2.setStreet("123 Maple Street");
        shipTo2.setZip(new BigDecimal(12345));
        order2.setShipTo(shipTo2);

        Calendar orderDate2 = Calendar.getInstance();
        orderDate2.set(2004, 06, 30);
        order2.setOrderDate(orderDate2);

        Items items2 = factory.createItems();
        order2.setItems(items2);

        orders.getPurchaseOrder().add(order2);

        File outputFile = new File(getOutputDir(), "jaxbWrite.xml");

        JAXBWriter jaxbWriter = new JAXBWriter("com.gbit.test.primer",
                OutputFormat.createPrettyPrint());
        jaxbWriter.setOutput(outputFile);

        jaxbWriter.startDocument();
        jaxbWriter.write(orders);
        jaxbWriter.endDocument();
    }
}

 编译和执行虽然没有错,但是没有预期的结果出现。现在就是在想,应该是在POJO需要实现javax.xml.bind.Marshaller的接口类似的方法。

 

 

 

 

分享到:
评论

相关推荐

    dom4j-1.6.1+httpclient-4.5.7+httpcore-4.4.5+jaxb-core+jaxb-impl.jar 亲测有用

    1. **DOM4J**: DOM4J 是一个非常灵活且功能强大的Java XML API,它提供了多种处理XML的方式,包括读取、写入、修改和操作XML文档。DOM4J支持SAX和DOM解析器,并且提供了比标准DOM API更高效和用户友好的接口。在Java...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    7. **与JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 集成,方便地在XML和Java对象之间进行转换。 8. **与Spring框架集成**:在Spring框架中,DOM4J常用于配置文件的解析,例如Spring的bean...

    Dom4j 1.6.1 JAVA API

    dom4j帮助文档 官方API All Classes Packages ...org.dom4j.jaxb org.dom4j.rule org.dom4j.rule.pattern org.dom4j.swing org.dom4j.tree org.dom4j.util org.dom4j.xpath org.dom4j.xpp

    jdom,jaxb,dom4j,dom,sax,satx解析XML

    在Java中,有多种库和技术用于解析XML文档,包括JDOM、JAXB、DOM4J、DOM、SAX和StaX。接下来我们将详细探讨这些解析方式。 1. JDOM JDOM是Java Document Object Model的简称,它为Java提供了本地化的XML API。JDOM...

    dom4j api 参考手册

    org.dom4j.jaxb org.dom4j.rule A Pattern based XML rule engine which implements the full XSLT processing model while allowing any Action to be fired if a pattern matches. org.dom4j.rule.pattern org....

    dom4j所需要的包和依赖包

    - 源码包中包含DOM4J的全部源代码,可以学习其设计模式和实现细节。 - 开发者可以通过查看源码学习如何扩展DOM4J,创建自定义解析器或输出格式。 6. **与其他库的比较** - 相比于Java内置的DOM API,DOM4J更易于...

    dom4j解析xml文件的压缩包

    9. **JAXB集成**:DOM4J可以与Java的默认XML绑定框架JAXB进行集成,方便地将Java对象序列化为XML,或者反序列化XML为Java对象。 10. **JDOM兼容性**:这个压缩包中提到对jdom进行了封装,意味着DOM4J可能提供了一些...

    dom4j-1.6.1

    **DOM4J 1.6.1:Java XML API的卓越选择** DOM4J是一个针对Java平台的开源XML处理库,版本1.6.1是其历史中的一个重要里程碑。这个库以其高性能、全面的功能和易用性而备受赞誉,使得XML处理在Java开发中变得更加...

    dom4j-2.1.1.jar

    虽然Java标准库中的JAXB和DOM API提供了XML处理的基础功能,但DOM4J因其简洁的API和强大的功能,成为了许多Java开发者首选的XML处理库。 总结,DOM4J-2.1.1.jar作为一款强大的XML处理工具,不仅具备了基本的XML操作...

    官网下的dom4j-2.0

    5. **DOM4J与JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 集成,实现对象与XML之间的自动转换。 6. **XSLT转换**:DOM4J支持XSLT转换,可以将XML文档转换为其他格式,如HTML或PDF。 7. **...

    dom4j1.6.1+dom4j1.6.1API

    6. **与JAXB集成**:dom4j可以与Java的XML绑定框架JAXB集成,实现XML与Java对象之间的自动转换,简化数据交换。 7. **性能与效率**:尽管dom4j基于DOM模型,但其设计考虑了性能优化,对于中等大小的XML文档,性能...

    java dom4j jar包+dom4j API

    5. **与JAXB和JDOM兼容**:DOM4J可以方便地与这些其他的XML处理库进行集成。 **DOM4J的主要类和接口:** 1. **Element**:代表XML文档中的元素节点,是DOM4J的核心类。 2. **Document**:表示整个XML文档,包含根...

    dom4j用到的xpath\dom4j等一系列jar包

    7. **JAXB集成**:DOM4J可以与Java Architecture for XML Binding(JAXB)集成,实现XML与Java对象之间的映射。 8. **转换和序列化**:DOM4J提供了XML到其他格式(如HTML或Text)的转换,并且可以将XML文档序列化为...

    dom4j-jar与dom4j解析xml文档介绍

    8. **与JAXB和JDOM的比较**:dom4j相比JAXB(Java Architecture for XML Binding)和JDOM,提供了更丰富的API和功能,同时在某些场景下性能更优,但JAXB和JDOM在特定任务上(如Java对象和XML之间的自动绑定)可能更...

    dom4j-2.1.0.jar

    - `dom4j-2.1.0-javadoc.jar`:这个文件包含DOM4J库的API文档,对于开发者来说,它是理解和学习DOM4J的重要参考资料。 - `dom4j-2.1.0-sources.jar`:这个文件包含了DOM4J源代码,开发者可以通过查看源码来深入...

    dom4j框架包

    除了DOM4J,`jaxen-1.1-beta-6.jar`文件是Jaxen库,这是一个XPath引擎,用于在各种XML API(包括DOM4J)之间提供统一的XPath实现。Jaxen使得开发者能够在不了解底层API的情况下,使用XPath来查找和操作XML文档,增强...

    dom4j-1.6.1最新版.zip.rar

    8. **JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 结合使用,方便XML和Java对象之间的转换。 在实际开发中,DOM4J常用于Web服务、配置文件处理、数据交换以及XML格式的数据持久化等方面。...

    dom4j dom4j实例

    **DOM4J详解与实例应用** DOM4J是一款强大的Java XML处理库,它提供了一种灵活且高效的方式来处理XML文档。DOM4J以其简洁的API、高性能和丰富的功能,成为了许多Java开发者在处理XML时的首选工具。在这个实例中,...

    dom4j.zip压缩包

    DOM4J相较于JAXB(Java Architecture for XML Binding)和JDOM,更注重性能和灵活性。JAXB主要用于对象与XML之间的自动绑定,而JDOM则提供了一种基于树模型的XML处理方式,DOM4J在功能和易用性上相对更胜一筹。 7....

    dom4j 1.6.1.jar +dom.4j.api

    - **JAXB集成**:DOM4J可以与Java Architecture for XML Binding (JAXB) 集成,方便XML与Java对象之间的转换。 在实际开发中,DOM4J通常用于Web服务、配置管理、数据持久化等领域。尽管现在有其他XML处理库如JDOM2...

Global site tag (gtag.js) - Google Analytics