六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 17|回复: 0

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

[复制链接]

升级  1.4%

153

主题

153

主题

153

主题

进士

Rank: 4

积分
507
 楼主| 发表于 2013-2-3 10:42:28 | 显示全部楼层 |阅读模式
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的接口类似的方法。
 
 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表