簡體   English   中英

JAXB,Marshal的問題, - 無法編組類型“java.lang.String”

[英]Problems with JAXB, Marshal, - unable to marshal type “java.lang.String”

當我運行marshal操作時,我收到以下錯誤:

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();

    }

謝謝你的興趣..

你不能只編組一個String因為它沒有任何根元素信息(因此有關缺少的@XmlRootElement注釋的例外),但你可以將它包裝在JAXBElement一個實例中,然后編組它。 JAXBElement是向JAXB提供此根元素信息的另一種方法。

創建JAXBElement示例

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

如果您從XML架構生成模型

如果您是從XML Schema創建了對象模型。 你有一個頂級的XML元素,它是一個像xs:string這樣的數據類型,然后在生成的ObjectFactory類上會有一個方便的方法來幫助你創建JAXBElement實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM