当前位置: 首页 > 知识库问答 >
问题:

使用JAXB解组XML时的ClassCastException

林和煦
2023-03-14

我已经生成java类使用xjc从一个xsd,其中根元素是类型ATypeA

jaxb生成的根元素是AType

当我尝试解组与该xsd对应的xml并强制转换JaxbElement时,它会引发一个强制转换异常:

片段:

JAXBContext jaxbContext=JAXBContext.new实例(Class.for名称(AType));
Unmarshaller unmarshaller=jaxbContext.createUnmarshaller();
AType aType=(AType)unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.get字节()));

例外情况:

java。ClassCastException:javax。xml。绑定JAXBElement

其他情况下的相同代码正确执行并成功反序列化。

我怎么能找到散集()给我什么类型的对象?我不知道在这种情况下出了什么问题,我尝试过打印jaxbElement中的字段,但它不是很有用!


共有2个答案

彭仲卿
2023-03-14

您可以尝试这样做:

Object o = unmarshaller.unmarshal(...);
System.out.println(o.getClass().getName());
弘焕
2023-03-14

如果根元素的类(此处为AType)不包含XmlRootElement注释,则返回的根元素将被包装在JAXBElement中,并且必须使用其getValue()-方法来获取根元素。

如果根元素的类型是匿名类型,那么XJC将只生成XmlRootElement注释。

 类似资料:
  • 编辑:感谢Preetam Kumar,这个问题已经解决,但错误现在在其他地方。当我再次尝试解组我的xml文件时,我收到这个错误,告诉我找不到元素: 然而,我给了xml文件到模式的正确路径,但是它似乎没有使用它...我不明白。 注意:我知道模式和xml标记在下面的示例中不完全匹配,我已经在我的文件中纠正了它。 最近,我不得不使用JAXB java库将一些XML文件解析为java对象。 我制作了一个X

  • 我陷入了一个棘手的问题,我应该使用JAXB库取消marshaX输入流,除了XML结构没有帮助。 我的问题是:标记用于值为>的的

  • 所以我有几个XML,我正在尝试解封。 一个XML可以如下所示: 在我的Table类中 } 我从这个链接获取了MapAdapter:JAXB封送和反封送映射到/从 value 我的问题是:我希望能够在传入XML时将记录中的每个标记名(Doc_id/sub_id或XML中的任何内容)及其每个值作为字符串获取,但我不确定如何实现。 如果能给我指明正确的方向,我将不胜感激。 编辑: 2个新问题!我意识到我

  • 问题内容: 我是JAXB的新手,并且想知道是否有一种方法可以使用xpath表达式将XML解组到我的响应对象。问题是我正在呼叫第三方Web服务,收到的响应有很多详细信息。我不希望将XML中的所有详细信息映射到我的响应对象。我只希望从xml映射一些细节,使用这些细节我可以使用特定的XPath表达式并将其映射到我的响应对象。有没有注释可以帮助我实现这一目标? 例如考虑以下响应 我只对检索街道名称感兴趣,

  • 我是JAXB新手,想知道是否有一种方法可以使用xpath表达式将XML解组到响应对象。问题是我正在呼叫第三方Web服务,我收到的回复有很多详细信息。我不希望将XML中的所有细节映射到我的响应对象。我只希望映射xml中的一些细节,使用特定的XPath表达式可以获得这些细节,并将其映射到响应对象。有没有注释可以帮助我实现这一点? 例如,考虑以下响应 我只对检索街道名称感兴趣,所以我想使用xpath表达

  • 嗨,我正在解组一个XML文件,该文件有一个标记,可以包含值或元素列表。我想知道解组这种XML的最佳方法是什么。例子: 我无法改变XML的构建方式,因此我希望有人能给出答案。非常感谢。