【问题标题】:Problems with JAXB, Marshal, - unable to marshal type “java.lang.String”JAXB、Marshal 的问题 - 无法编组类型“java.lang.String”
【发布时间】:2014-10-02 18:02:39
【问题描述】:

当我运行封送操作时,我收到以下错误:

javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "java.lang.String" as an element because it is missing an @XmlRootElement annotation]
    ...

Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "java.lang.String" as an element because it is missing an @XmlRootElement annotation
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:237)
    at com.sun.xml.internal.bind.v2.runtime.LeafBeanInfoImpl.serializeRoot(LeafBeanInfoImpl.java:126)
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:483)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:308)
    ... 6 more

这是我的编组功能......

public StringBuffer Marshaller(Object marshall){   // make marshalling->Java to XML
        StringWriter writer = new StringWriter();
        try {
            JAXBContext jaxbContext=JAXBContext.newInstance(marshall.getClass());
            Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
            // çıktı
            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            jaxbMarshaller.marshal(marshall, writer);
            System.out.println(writer.getBuffer().toString());
        } catch (PropertyException e) {
            e.printStackTrace();
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return writer.getBuffer();

    }

感谢您的关注..

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    您不能仅编组 String,因为它没有任何根元素信息(因此缺少 @XmlRootElement 注释的异常),但您可以将其包装在 JAXBElement 的实例中,然后元帅。 JAXBElement 是将此根元素信息提供给 JAXB 的另一种方式。

    JAXBElement创建示例

    JAXBElement<String> jaxbElement =
      new JAXBElement(new QName("root-element"), 
        String.class, string);
    

    如果您从 XML 架构生成模型

    如果您从 XML 模式创建对象模型。并且您有一个顶级 XML 元素,它的数据类型类似于 xs:string,那么在生成的 ObjectFactory 类上会有一个方便的方法来帮助您创建 JAXBElement 实例。

    【讨论】:

    • 你能解释一下吗?
    • @nurdankaraman - 我在回答中添加了一些附加信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2017-11-23
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多