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的接口类似的方法。