sách gpt4 ăn đã đi

java - 如何用jaxb包装子列表

In lại 作者:搜寻专家 更新时间:2023-10-30 19:53:42 25 4
mua khóa gpt4 giày nike

当尝试映射客户-> 订单 1:n 与 jaxb 2.2.6 的关系时,我想得到包装在单独节点“订单”中的订单列表。

目前的结果是:

     

100
John Doe

100 main street, smalltown, pa

1100


5 broadway, ny, ny

1200


但我想得到:

     

100
John Doe


100 main street, smalltown, pa

1100


5 broadway, ny, ny

1200



需要更改什么才能获得此结果?

相关源码有:

  • 客户界面
  • CustomerJaxbDao 实现
  • 下单界面
  • OrderJaxbDao 实现
  • TestCustomerWrite Junit4 测试用例

并使用这个 jaxb 实现:

            

com.sun.xml.bind
jaxb-impl
2.2.6

客户界面:

/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-15 15:12 with smartGENERATOR
*/
package com.bitplan.testentity;
nhập java.util.List;
import com.bitplan.testentity.Order;


/**
* interface for Customer
*/
public interface Customer {
// >>>{interface}{Customer}{Customer}
// no implementation yet !!!
// <<<{interface}{Customer}{Customer}
/**
* getter for name
* @return name
*/
public String getName();

/**
* setter for name
* @param pname - new value for name
*/
public void setName(String pname);

/**
* getter for id
* @return id
*/
public long getId();

/**
* setter for id
* @param pid - new value for id
*/
public void setId(long pid);

/**
* getter for orders
* @return orders
*/
public List getOrders();

/**
* setter for orders
* @param porders - new value for orders
*/
public void setOrders(List porders);

} // Customer

下单界面:

/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-15 at 23:59 with smartGENERATOR
*/
package com.bitplan.testentity;

/**
* interface for Order
*/
public interface Order {
// >>>{interface}{Order}{Order}
// no implementation yet !!!
// <<<{interface}{Order}{Order}
/**
* getter for orderid
* @return orderid
*/
public long getOrderid();

/**
* setter for orderid
* @param porderid - new value for orderid
*/
public void setOrderid(long porderid);

/**
* getter for shipping address
* @return address
*/
public String getAddress();

/**
* setter for shipping address
* @param paddress - new value for shipping address
*/
public void setAddress(String paddress);

} // Order

CustomerJaxbDao 实现

/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-15 at 23:51 with smartGENERATOR
*/
package com.bitplan.testentity.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;

import com.bitplan.testentity.Order;
import com.bitplan.testentity.Customer;

nhập java.util.List;
nhập 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
*/
chuỗi tên riêng tư;

/**
* id
*/
private long id;

/**
* orders
*/
private List orders=new ArrayList();

/**
* 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
*/
@XmlElement(name="orders", type=OrderJaxbDao.class)
public List getOrders() { return orders; };

/**
* setter for orders
* @param porders - new value for orders
*/
public void setOrders(List porders) { orders=porders; };


} // CustomerJaxbDao

OrderJaxbDao 实现

/**
* Copyright (C) 2011-2012 BITPlan GmbH
*
* http://www.bitplan.com
*
* generated: 2012-10-15 with smartGENERATOR
*/
package com.bitplan.testentity.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import com.bitplan.testentity.Order;


/**
* JaxB Data access object for Order
* Entity: Order for container testentity
* Table: Order
*/
@XmlRootElement(name="Order")
public class OrderJaxbDao implements Order {
/**
* orderid
*/
private long orderid;

/**
* shipping address
*/
private String address;

/**
* getter for orderid
* @return orderid
*/
@XmlElement(name="orderid")
public long getOrderid() { return orderid; };

/**
* setter for orderid
* @param porderid - new value for orderid
*/
public void setOrderid(long porderid) { orderid=porderid; };

/**
* getter for shipping address
* @return address
*/
@XmlElement(name="address")
public String getAddress() { return address; };

/**
* setter for shipping address
* @param paddress - new value for shipping address
*/
public void setAddress(String paddress) { address=paddress; };


} // OrderJaxbDao

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 {

@Bài kiểm tra
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);

}

}

câu trả lời hay nhất

代替

/**
* getter for orders
* @return orders
*/
@XmlElement(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 getOrders() { return orders; };

@XmlElementWrapper 名称是包装元素(订单)的名称,@XmlElement 名称是包装内每个条目元素的名称(订单) ).

关于java - 如何用jaxb包装子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12911953/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress