为了账号安全,请及时绑定邮箱和手机立即绑定

没有由JAXB生成的@XmlRootElement

没有由JAXB生成的@XmlRootElement

开心每一天1111 2019-08-15 15:46:37
没有由JAXB生成的@XmlRootElement我正在尝试从FpML(Finanial产品标记语言)4.5版生成Java类。生成了大量代码,但我无法使用它。尝试序列化一个简单的文档,我得到这个:javax.xml.bind.MarshalException   - with linked exception: [com.sun.istack.SAXException2: unable   to marshal type  "org.fpml._2008.fpml_4_5.PositionReport"   as an element because it is missing an  @XmlRootElement annotation]实际上没有类有@XmlRootElement注释,所以我可以做错什么?我将xjc(JAXB 2.1)指向fpml-main-4-5.xsd,然后包含所有类型。
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

这已在上面已经链接的博客文章的底部提到,但这对我来说很有用:


Marshaller marshaller = jc.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

marshaller.marshal(new JAXBElement<MyClass>(new QName("uri","local"), MyClass.class, myClassInstance), System.out);


查看完整回答
反对 回复 2019-08-15
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

正如上面的一个答案中暗示的那样,如果在XSD中将其类型定义为命名类型,则不会在根元素上获得XMLRootElement,因为该命名类型可以在XSD中的其他位置使用。尝试将其设为匿名类型,即代替:

<xsd:element name="myRootElement" type="MyRootElementType" /><xsd:complexType name="MyRootElementType">...</xsd:complexType>

你将会拥有:

<xsd:element name="myRootElement">
    <xsd:complexType>
    ...
    <xsd:complexType></xsd:element>


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 1158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信