相关疑难解决方法(0)

Java/JAXB:将XML属性解组为特定的Java对象属性

有一个丑陋的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)

这个问题的答案非常接近,但我无法弄清楚最终的解决方案.

java xml jaxb

19
推荐指数
2
解决办法
3万
查看次数

JAXB @XmlElements,不同类型但同名?

我有一个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)

java jax-rs jaxb jersey

10
推荐指数
1
解决办法
2万
查看次数

eclipselink/Moxy:基于类型的继承和属性名称开发

我正在使用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)

polymorphism inheritance jaxb eclipselink moxy

6
推荐指数
1
解决办法
5082
查看次数

标签 统计

jaxb ×3

java ×2

eclipselink ×1

inheritance ×1

jax-rs ×1

jersey ×1

moxy ×1

polymorphism ×1

xml ×1