有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java和JAXB:尝试将混合对象列表写入xml

我正在尝试使用JAXB将不同类型的对象列表写入xml,但没有任何运气。使用JAXB这可能吗?我需要将所有对象的所有属性(不仅仅是接口定义的属性)写入xml文件

在我的主课上:

    List<Itransport> myList = new ArrayList<>();

    Bike b = new Bike();
    b.setSpeed(1);
    b.setColor("yellow");
    myList.add(b);

    Car c = new Car();
    c.setDoors(5);
    c.setSpeed(10);
    myList.add(c);

    Train t = new Train();
    t.setLength(10);
    t.setSpeed(50);
    myList.add(t);

    Transport tr = new Transport();
    tr.setVehicles(myList);

    // save the data
    try {
        JAXBContext context = JAXBContext.newInstance(Itransport.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // Write to file
        String homeDir = System.getProperty("user.home");
        String filePath = homeDir + File.separator + "test.xml";
        File f = new File(filePath);
        marshaller.marshal(tr, f);

    } catch (JAXBException ex) {
    }

我的接口类:

    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public interface Itransport {

        public int getSpeed();
        public void setSpeed(int _Speed);

    }

我的收藏课:

    @XmlRootElement(name="vehicles")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Transport {

        @XmlElement(name="transport", type=Itransport.class)
        List<Itransport> vehicles = new ArrayList<>();

        public List<Itransport> getVehicles() {
            return vehicles;
        }

        public void setVehicles(List<Itransport> vehicles) {
            this.vehicles = vehicles;
        }

    }

我的自行车课:

    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Bike implements Itransport{

        private int speed = 0;
        private String color = "";

        @Override
        public int getSpeed() {
            return speed;
        }

        @Override
        public void setSpeed(int _speed) {
            speed = _speed;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

    }

汽车类和火车类与自行车类几乎相同,但有一些其他属性

有人知道如何整理/取消整理混合对象列表吗

谢谢你的反馈


共 (1) 个答案

  1. # 1 楼答案

    注册每个额外的对象,以便能够封送混合列表

    JAXBContext res = JAXBContext.newInstance(car.class, train.class, bicycle.class);