当前位置: 首页 > 面试题库 >

Java Unmarshal使用JAXB的对象列表

子车高超
2023-03-14
问题内容

我有看起来像下面的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ObjectList>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
</ObjectList>

我有一个如下的ObjectList类:

@XmlRootElement
public class ObjectList {

    @XmlElementWrapper(name = "ObjectList")
    @XmlElement(name = "Object")
    private ArrayList<Object> ObjectList;

    public ArrayList<Object> getObjectList() {
        return ObjectList;
    }

    public void setObjectList(ArrayList<Object> objectList) {
        ObjectList = objectList;
    }
}

还有一个对象类,如下所示:

@XmlRootElement(name = "Object")
public class Object {

    Date attributeOne;
    boolean attritbuteTwo;
    String attributeThree;
    boolean attributeFour;

    @XmlAttribute
    public Date getAttributeOne() {
        return attributeOne;
    }
    public void setAttributeOne(Date attributeOne) {
        this.attributeOne = attributeOne;
    }

    @XmlAttribute
    public boolean isAttributeTwo() {
        return attritbuteTwo;
    }
    public void setAttributeTwo(boolean attritbuteTwo) {
        this.AttributeTwo = AttributeTwo;
    }

    @XmlAttribute
    public String getAttributeThree() {
        return attributeThree;
    }
    public void setAttributeThree(String attributeThree) {
        this.attributeThree = attributeThree;
    }

    @XmlAttribute
    public boolean isAttributeFour() {
        return attributeFour;
    }
    public void setAttributeFour(boolean attributeFour) {
        this.attributeFour = attributeFour;
    }
}

当我尝试使用以下代码将xml解组为和对象时:

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectList.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

RESTResponse response = getObjects();

ObjectList objects = (ObjectList) unmarshaller.unmarshal(new StringReader(response.getResponseBody()));

我收到以下错误:

javax.xml.bind.UnmarshalException:意外元素(uri:“”,本地:“ ObjectList”)。期望的元素是<{}
Object>,<{} objectList>

编辑: 我只是注意到几个问题,我将ObjectList对象的XmlRootElement标记更改为@XmlRootElement(name =“
ObjectList”),将我对象的XmlRootElement标记更改为@XmlRootElement(name =“
object)。我不再得到异常,但是我现在得到并清空对象列表。

任何帮助深表感谢。


问题答案:

好吧,它说的是期望的元素:ObjectobjectList(以小写字母“ o” ObjectList开头),但它读取的是(以大写字母“ o”
开头)!



 类似资料:
  • 我有如下所示的XML: 我有一个ObjectList类,它如下所示: 和如下所示的对象类: 当我尝试使用以下代码将xml解封到and对象中时: 我得到以下错误: UnMarshalException:意外元素(URI:“”,本地:“ObjectList”)。需要的元素为<{}Object>、<{}ObjectList> 编辑:我刚刚注意到两个问题我将我的ObjectList对象的XmlRootEl

  • 我有 和Xlink类,该类在内联变量中工作良好。 对于的XML输入 并且子课程拒绝被取消注册(没有任何异常被抛出)。 注:不幸的是,MOXy不是一个选项。 编辑:新编组对象 Edit2:在对测试对象进行了一些解组和编组的实验之后,我发现我需要在内容的标题中定义xmlns名称空间,以便与类似问题在于,我从一个包装类中获取Course元素,该包装类由resteasy解析出来。因此,生成的类不会携带名称

  • 问题内容: 我正在尝试整理实现公共接口的对象列表。涉及3个类和1个接口: 社区 类(具有一种方法: List getPeople(); ) 人员 接口(具有一种方法: String getName(); ) 女生 班(实施人员) 男生 班(实施人员) 请参见下面的代码。 我想要一个看起来像这样的XML: 或可能: 到目前为止,我得到的是: 我意识到我可以将元素更改为其他名称,但是我希望元素名称成为

  • 问题内容: 我有一个问题。我想使用JAXB将一个对象转换为另一个对象。就像在中,我有一个class 和另一个class ,它们都有相同的参数,实际上都是相同的(复制粘贴),但是包不同。我想使用进行它们之间的转换。 怎么做,请帮帮我。 问题答案: 您可以执行以下操作。 注意: 不需要利用JAXBSource将数据具体化为XML。 它在对象模型上不需要任何注释。 com.home.Student co

  • 问题内容: 我正在研究的项目使用JAXB参考实现,即类来自软件包。 我有一堂课: 我想使用JAXB编组器来获取对象的JSON表示形式: 封送处理的数据为XML格式,而不是JSON格式。如何指示 JAXB参考实现 输出JSON? 问题答案: JAXB参考实现不支持JSON,您需要添加一个包,例如Jackson或Moxy 莫西 杰克逊 在这里查看示例

  • 注意: 我不需要创建java对象,因为我只需要检查一些值,但我没有找到任何东西来取消将它们作为通用对象或树或任何东西。像杰克逊的 JsonNode。如果可能的话,让我知道,这样我就可以避免所有这些混乱的对象来映射一切。 现在的问题是: 我不得不解组一个简单的xml,但是结果总是空的。我已经尝试了不同的注释,但是如果它们没有失败,结果就是null。 这似乎是这个问题的相同情况,但使用相同的注释是行不