Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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_Jaxb2 - Fatal编程技术网

Java 无法让JAXB使用简单的示例处理接口

Java 无法让JAXB使用简单的示例处理接口,java,xml,jaxb2,Java,Xml,Jaxb2,我正在尝试第3.2.1节中所示的JAXB接口的简单示例,但它不适合我。我使用的是最新的JDK 1.8_70,没有使用任何特殊的库。为了完整性起见,代码: @XmlRootElement class Zoo { @XmlAnyElement public List<Animal> animals; } interface Animal { void sleep(); void eat(); ... } @XmlRootElement class Dog impl

我正在尝试第3.2.1节中所示的JAXB接口的简单示例,但它不适合我。我使用的是最新的JDK 1.8_70,没有使用任何特殊的库。为了完整性起见,代码:

@XmlRootElement
class Zoo {
  @XmlAnyElement
  public List<Animal> animals;
}

interface Animal {
  void sleep();
  void eat();
  ...
}

@XmlRootElement
class Dog implements Animal { ... }

@XmlRootElement
class Lion implements Animal { ... }
编辑:发布的JAXBContext.newInstance代码:

Zoo zoo = new Zoo();
zoo.animals = new ArrayList<Animal>();
zoo.animals.add( new Cat() );
zoo.animals.add( new Dog() );
zoo.animals.add( new Dog() );

JAXBContext ctx = JAXBContext.newInstance(Zoo.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.marshal(zoo, System.out);

尝试在提供给JAXBContext.newInstance的列表中指定其他类

将@XmlSeeAllow注释应用于Zoo类也应该有效

@XmlRootElement
@XmlSeeAlso({Cat.class, Dog.class})
class Zoo {
    ...
}
JAXBContext ctx = JAXBContext.newInstance(Zoo.class, Cat.class, Dog.class);
@XmlRootElement
@XmlSeeAlso({Cat.class, Dog.class})
class Zoo {
    ...
}