有一个丑陋的XML文件必须是unmarshalled:
<?xml version="1.0" ?>
<configuration>
<section name="default_options">
<value name="default_port">8081</value>
<value name="log_level">WARNING</value>
</section>
<section name="custom_options">
<value name="memory">64M</value>
<value name="compatibility">yes</value>
</section>
</configuration>
Run Code Online (Sandbox Code Playgroud)
生成的Java对象应该是:
public class DefaultOptions {
private int defaultPort;
private String logLevel;
// etc...
}
public class CustomOptions {
private String memory;
private String compatibility;
// etc...
}
Run Code Online (Sandbox Code Playgroud)
这个问题的答案非常接近,但我无法弄清楚最终的解决方案.
我有一个Animal类和Animal的扩展名为AnimalExtension.
public class Animal
public class AnimalExtension extends Animal
Run Code Online (Sandbox Code Playgroud)
这两个类之间的唯一区别是AnimalExtension有另一个名为animalId的实例变量.Animal没有此实例变量.
我也有自己的数据类型,我想要编组和解组XML.此数据类型称为AnimalList.在AnimalList中,有一个动物列表作为实例变量.
@XmlType(name = "AnimalList")
public class AnimalList{
private List<Animal> animalList;
....
Run Code Online (Sandbox Code Playgroud)
animalList可以包含Animal和AnimalExtension.但是,在XML上我不希望该元素被命名为AnimalExtension; 我希望他们都拥有Animal的元素名称.当JAXB知道Animal实际上是AnimalExtension的一个实例时,我只希望显示额外的属性.所以,如果我有一个列表,看起来像
List<Animal> animalList = new LinkedList<Animal>();
AnimalExtension animalExtension = new AnimalExtension();
animalExtension.setAnimalId(1);
amimalExtension.setName("Don");
Animal animal = new Animal();
animal.setName("Mike");
animalList.add(animalExtension);
animalList.add(animal);
Run Code Online (Sandbox Code Playgroud)
我希望XML看起来像
<AnimalList>
<Animal name="Don" id="1" />
<Animal name="Mike" />
</AnimalList>
Run Code Online (Sandbox Code Playgroud)
这是我试图做的
@XmlElements(
{
@XmlElement(name = "Animal", type = Animal.class),
@XmlElement(name = "Animal", type = AnimalExtension.class)
}
)
public List<Animal> getEntries() {
return animalList;
}
Run Code Online (Sandbox Code Playgroud)
代码编译但是当我尝试运行我的服务器时.它给了我这个与正在发生的事情无关的奇怪错误(BeanCreationException).我尝试使XmlElement的名称对于每种类型都不同并且有效,但这里的挑战是使名称相同.
org.springframework.beans.factory.BeanCreationException: Error …Run Code Online (Sandbox Code Playgroud) 我正在使用MOXy的JAXB实现和外部元数据绑定文件来面对涉及继承和多态的编组/解组问题.
我无法控制XML文件或模型类.
模型中有多个继承其他DTO类的类.以下是我正在使用的环境示例.此示例仅用于某些语法目的,真实环境涉及嵌套继承,集合等.
这是将继承的类
class A {
private String name;
public String getName(){
return name;
}
public void setName(String value){
name = value;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个继承的类
class B extends A {
private String attrFromB;
public String getAttrFromB(){
return attrFromB;
}
public void setAttrFromB(String value){
attrFromB = value;
}
}
Run Code Online (Sandbox Code Playgroud)
而另一个
class C extends A {
private String attrFromC;
public String getAttrFromC(){
return attrFromC;
}
public void setAttrFromC(String value){
attrFromC= value;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个容器类
class MyContainerClass{
private A myObject;
public A …Run Code Online (Sandbox Code Playgroud) jaxb ×3
java ×2
eclipselink ×1
inheritance ×1
jax-rs ×1
jersey ×1
moxy ×1
polymorphism ×1
xml ×1