Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用jaxb包装子列表_Java_Xml_Jaxb - Fatal编程技术网

Java 如何用jaxb包装子列表

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

当尝试将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>
         <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; };