2014-10-02 6 views
6

जब मैं मार्शल आपरेशन मैं निम्नलिखित त्रुटि मिलती है चलाने प्रकार मार्शल करने में असमर्थ:समस्या - "java.lang.String"

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

    } 

अपने हितों के लिए धन्यवाद ..

उत्तर

9

तुम सिर्फ एक String मार्शल नहीं कर सकते हैं यह किसी भी मूल तत्व जानकारी (लापताके बारे में इसलिए अपवाद नहीं है के रूप मेंएनोटेशन), लेकिन आप इसे JAXBElement के उदाहरण में लपेट सकते हैं और उसके बाद मार्शल कर सकते हैं। JAXBElement इस रूट तत्व की जानकारी JAXB को आपूर्ति करने का एक और तरीका है।

JAXBElement

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

बनाने से आपको एक XML स्कीमा

से अपने मॉडल जनरेट किया गया, तो आप एक XML स्कीमा से अपने ऑब्जेक्ट मॉडल बनाया है का उदाहरण। और आपके पास एक शीर्ष-स्तरीय XML तत्व है जो xs:string जैसे डेटा प्रकार है, तो उत्पन्न ObjectFactory कक्षा पर एक सुविधा विधि होगी जो आपको JAXBElement उदाहरण बनाने में मदद करेगी।

+0

क्या आप और अधिक समझा सकते हैं? –

+0

@nurdankaraman - मैंने अपने उत्तर में कुछ अतिरिक्त जानकारी जोड़ दी है। –

+0

आपको बहुत बहुत धन्यवाद :) –

संबंधित मुद्दे