Java 如何用jaxb包装子列表
当尝试将customer->order 1:n关系映射到jaxb 2.2.6时,我希望 包装在单独节点“订单”中的订单列表 目前的结果是:Java 如何用jaxb包装子列表,java,xml,jaxb,Java,Xml,Jaxb,当尝试将customer->order 1:n关系映射到jaxb 2.2.6时,我希望 包装在单独节点“订单”中的订单列表 目前的结果是: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Customer> <id>100</id> <name>John Doe</name> <orders&g
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer>
<id>100</id>
<name>John Doe</name>
<orders>
<address>100 main street, smalltown, pa</address>
<orderid>1100</orderid>
</orders>
<orders>
<address>5 broadway, ny, ny</address>
<orderid>1200</orderid>
</orders>
</Customer>
TestCustomerWrite Junit4测试用例
package com.bitplan.storage.jaxb;
import static org.junit.Assert.*;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.junit.Test;
import com.bitplan.testentity.Customer;
import com.bitplan.testentity.Order;
import com.bitplan.testentity.jaxb.CustomerJaxbDao;
import com.bitplan.testentity.jaxb.OrderJaxbDao;
/**
*
* @author wf
*
*/
public class TestCustomerWrite {
@Test
public void test() throws JAXBException {
Customer customer=new CustomerJaxbDao();
customer.setId(100);
customer.setName("John Doe");
long orderid=1000;
String[] addresses={"100 main street, smalltown, pa","5 broadway, ny, ny"};
for (String address:addresses) {
Order order=new OrderJaxbDao();
order.setAddress(address);
order.setOrderid(orderid+=100);
customer.getOrders().add(order);
}
JAXBContext jaxbContext = JAXBContext.newInstance(CustomerJaxbDao.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw=new StringWriter();
jaxbMarshaller.marshal(customer, sw);
System.out.println(sw);
}
}
这似乎起到了作用:
@XmlElementWrapper(name="orders")
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
@xmlementwrapper(name=“orders”)
@xmlement(name=“order”,type=OrderJaxbDao.class)
public List getOrders(){return orders;};
改进的CustomerJaxbDao
/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-16 12:20 with smartGENERATOR
*/
package com.bitplan.testentity.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import com.bitplan.testentity.Customer;
import java.util.List;
import com.bitplan.testentity.Order;
import javax.xml.bind.annotation.XmlElementWrapper;
import java.util.ArrayList;
/**
* JaxB Data access object for Customer
* Entity: Customer for container testentity
* Table: Customer
*/
@XmlRootElement(name="Customer")
public class CustomerJaxbDao implements Customer {
/**
* name
*/
private String name;
/**
* id
*/
private long id;
/**
* orders
*/
private List<Order> orders=new ArrayList<Order>();
/**
* getter for name
* @return name
*/
@XmlElement(name="name")
public String getName() { return name; };
/**
* setter for name
* @param pname - new value for name
*/
public void setName(String pname) { name=pname; };
/**
* getter for id
* @return id
*/
@XmlElement(name="id")
public long getId() { return id; };
/**
* setter for id
* @param pid - new value for id
*/
public void setId(long pid) { id=pid; };
/**
* getter for orders
* @return orders
*/
@XmlElementWrapper(name="orders")
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
/**
* setter for orders
* @param porders - new value for orders
*/
public void setOrders(List<Order> porders) { orders=porders; };
} // CustomerJaxbDao
/**
*版权所有(C)2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
*生成时间:2012-10-16 12:20使用smartGENERATOR
*/
包com.bitplan.testentity.jaxb;
导入javax.xml.bind.annotation.XmlRootElement;
导入javax.xml.bind.annotation.xmlement;
导入com.bitplan.testentity.Customer;
导入java.util.List;
导入com.bitplan.testentity.Order;
导入javax.xml.bind.annotation.XmlElementWrapper;
导入java.util.ArrayList;
/**
*面向客户的JaxB数据访问对象
*实体:集装箱测试客户
*表:客户
*/
@XmlRootElement(name=“客户”)
公共类CustomerJaxbDao实现Customer{
/**
*名字
*/
私有字符串名称;
/**
*身份证
*/
私人长id;
/**
*命令
*/
私有列表顺序=新的ArrayList();
/**
*名字的getter
*@returnname
*/
@xmlement(name=“name”)
公共字符串getName(){return name;};
/**
*名称设置器
*@param pname-名称的新值
*/
public void setName(字符串pname){name=pname;};
/**
*id的getter
*@returnid
*/
@xmlement(name=“id”)
public long getId(){return id;};
/**
*id设置器
*@param pid-id的新值
*/
public void setId(长pid){id=pid;};
/**
*订单获取者
*@退货订单
*/
@xmlementwrapper(name=“orders”)
@xmlement(name=“order”,type=OrderJaxbDao.class)
public List getOrders(){return orders;};
/**
*订单制定者
*@param porders-订单的新值
*/
公共无效设置顺序(列表顺序){orders=porders;};
}//CustomerJaxbDao
而不是
/**
* getter for orders
* @return orders
*/
@XmlElement(name="orders", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
/**
*订单获取者
*@退货订单
*/
@xmlement(name=“orders”,type=OrderJaxbDao.class)
public List getOrders(){return orders;};
你需要
/**
* getter for orders
* @return orders
*/
@XmlElement(name="order", type=OrderJaxbDao.class)
@XmlElementWrapper(name="orders")
public List<Order> getOrders() { return orders; };
/**
*订单获取者
*@退货订单
*/
@xmlement(name=“order”,type=OrderJaxbDao.class)
@xmlementwrapper(name=“orders”)
public List getOrders(){return orders;};
@xmlementwrapper
名称是包装元素(orders)的名称,@xmlement
名称是包装(order)中每个条目元素的名称。听起来您想在CustomerJaxbDao
类中包装订单
@XmlElementWrapper( name="orders" )
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
@xmlementwrapper(name=“orders”)
@xmlement(name=“order”,type=OrderJaxbDao.class)
public List getOrders(){return orders;};
也许你想做什么就做什么
package com.bitplan.storage.jaxb;
import static org.junit.Assert.*;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.junit.Test;
import com.bitplan.testentity.Customer;
import com.bitplan.testentity.Order;
import com.bitplan.testentity.jaxb.CustomerJaxbDao;
import com.bitplan.testentity.jaxb.OrderJaxbDao;
/**
*
* @author wf
*
*/
public class TestCustomerWrite {
@Test
public void test() throws JAXBException {
Customer customer=new CustomerJaxbDao();
customer.setId(100);
customer.setName("John Doe");
long orderid=1000;
String[] addresses={"100 main street, smalltown, pa","5 broadway, ny, ny"};
for (String address:addresses) {
Order order=new OrderJaxbDao();
order.setAddress(address);
order.setOrderid(orderid+=100);
customer.getOrders().add(order);
}
JAXBContext jaxbContext = JAXBContext.newInstance(CustomerJaxbDao.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw=new StringWriter();
jaxbMarshaller.marshal(customer, sw);
System.out.println(sw);
}
}
@XmlElementWrapper(name="orders")
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-16 12:20 with smartGENERATOR
*/
package com.bitplan.testentity.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import com.bitplan.testentity.Customer;
import java.util.List;
import com.bitplan.testentity.Order;
import javax.xml.bind.annotation.XmlElementWrapper;
import java.util.ArrayList;
/**
* JaxB Data access object for Customer
* Entity: Customer for container testentity
* Table: Customer
*/
@XmlRootElement(name="Customer")
public class CustomerJaxbDao implements Customer {
/**
* name
*/
private String name;
/**
* id
*/
private long id;
/**
* orders
*/
private List<Order> orders=new ArrayList<Order>();
/**
* getter for name
* @return name
*/
@XmlElement(name="name")
public String getName() { return name; };
/**
* setter for name
* @param pname - new value for name
*/
public void setName(String pname) { name=pname; };
/**
* getter for id
* @return id
*/
@XmlElement(name="id")
public long getId() { return id; };
/**
* setter for id
* @param pid - new value for id
*/
public void setId(long pid) { id=pid; };
/**
* getter for orders
* @return orders
*/
@XmlElementWrapper(name="orders")
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
/**
* setter for orders
* @param porders - new value for orders
*/
public void setOrders(List<Order> porders) { orders=porders; };
} // CustomerJaxbDao
/**
* getter for orders
* @return orders
*/
@XmlElement(name="orders", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };
/**
* getter for orders
* @return orders
*/
@XmlElement(name="order", type=OrderJaxbDao.class)
@XmlElementWrapper(name="orders")
public List<Order> getOrders() { return orders; };
@XmlElementWrapper( name="orders" )
@XmlElement(name="order", type=OrderJaxbDao.class)
public List<Order> getOrders() { return orders; };