Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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 意外元素(uri:“元素”,local:“元素”)。预期要素为<;{}链接>&书信电报;{}大小>;_Java_Jaxb_Eclipselink_Jaxb2_Moxy - Fatal编程技术网

Java 意外元素(uri:“元素”,local:“元素”)。预期要素为<;{}链接>&书信电报;{}大小>;

Java 意外元素(uri:“元素”,local:“元素”)。预期要素为<;{}链接>&书信电报;{}大小>;,java,jaxb,eclipselink,jaxb2,moxy,Java,Jaxb,Eclipselink,Jaxb2,Moxy,尝试解组此xml时: <holder> <name>a</name> <elements> <element> <name>elem</name> </element> </elements> </holder> 包装器 抽象包装器扩展ElementRoot并具有totalSize成员 public abstract class Wra

尝试解组此xml时:

<holder>
  <name>a</name>
  <elements>
    <element>
      <name>elem</name>
    </element>
  </elements>
</holder>
包装器

抽象包装器扩展ElementRoot并具有totalSize成员

public abstract class Wrapper<T> extends ElementRoot {

    protected int totalSize;

    protected List<T> collection = new ArrayList<>();

    @XmlElement
    public int getTotalSize() {
        return totalSize;
    }

    public void setTotalSize(int totalSize) {
        this.totalSize = totalSize;
    }

    public abstract List<T> getCollection();
}
元素

元素扩展了包装器并具有元素的集合

import java.util.Collection;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "elements)
public class Elements extends Wrapper {

    @Override
    @XmlElement(name="element")
    public Collection<Element> getElements() {
        return elements;
    }

    // No setter, to add getElements().add(element)
}
环境

我正在使用
Java7

JAXB-api 2.2.7
MOXy 2.5.0

这个用例中似乎有一个与抽象
getCollecion
属性相关的bug。我们已打开以下错误,您可以使用它跟踪我们在该问题上的进展:

解决问题

包装器

我们可以使用
@xmlacessortype(xmlacesstype.NONE)
,以便只处理带注释的字段/属性(请参阅:)


根据您的描述,我在您的问题中添加了一些模型类。如何对这些类进行注释?另外,元素
数据存储
应该出现在您的XML输入中的什么位置?
数据存储
是从原始数据中遗留下来的,我简化了层次结构。谢谢
import java.util.Collection;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "elements)
public class Elements extends Wrapper {

    @Override
    @XmlElement(name="element")
    public Collection<Element> getElements() {
        return elements;
    }

    // No setter, to add getElements().add(element)
}
@XmlRootElement(name = "element")
@XmlType(propOrder = {"id", "name"})
public class Element extends ElementRoot {

     private Integer id;

     private String name;

     // setters and getters no annotated

}
JAXB-api 2.2.7
MOXy 2.5.0
import java.util.*;
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.NONE)
public abstract class Wrapper<T> extends ElementRoot {

    protected int totalSize;

    protected List<T> collection = new ArrayList<>();

    @XmlElement
    public int getTotalSize() {
        return totalSize;
    }

    public void setTotalSize(int totalSize) {
        this.totalSize = totalSize;
    }

    public abstract List<T> getCollection();

}
import java.util.*;
import javax.xml.bind.annotation.*;

@XmlRootElement(name = "elements")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class Elements extends Wrapper {

    @Override
    @XmlElement(name="element")
    public List<Element> getCollection() {
        return collection;
    }

    // No setter, to add getElements().add(element)
}