2012-08-06 10 views
9

मुझे यकीन नहीं है कि जैक्सब के साथ निम्नलिखित प्रश्न संभव है, लेकिन मैं वैसे भी पूछूंगा।रूट तत्व के बिना जैक्सब मार्शल बाल तत्व क्या कर सकते हैं?

एक निश्चित परियोजना में, हम xml फ़ाइल की अगली संरचना बनाने के लिए परिभाषित स्कीमा के साथ जैक्सबी का उपयोग कर रहे हैं। aaa और bbb, जहां aaa @XmlRootElement के रूप में बनाया गया:

<aaa> 
    <bbb> 
     more inner children here 
    </bbb> 
    <bbb> 
     more inner children here 
    </bbb> 
</aaa> 

हम भी JAXB का स्वत: वर्ग पैदा जो कक्षाओं बनाता का उपयोग कर रहे हैं।

अब हम एक नई परियोजना में एक ही स्कीमा का उपयोग करना चाहते हैं, जो पिछले प्रोजेक्ट के साथ भी संगत होगा। मैं क्या करना चाहता हूं, उसी जेएक्सबी जेनरेटेड क्लास का उपयोग करना है, स्कीमा में कोई भी बदलाव किए बिना xshal में केवल एक ही बीबीबी ऑब्जेक्ट को मार्शल करने के लिए।

JAXBContext jc = JAXBContext.newInstance("generated"); 
Marshaller marshaller = jc.createMarshaller(); 
marshaller.marshal(bbb, writer); 

तो हम अगले परिणाम मिलेगा:

<bbb> 
    <inner child1/> 
    <inner child2/> 
    ... 
</bbb> 

मैं वर्तमान में ऐसा करने में सक्षम नहीं कर रहा हूँ के रूप में marshaller चिल्लाता है कि मैं एक @XmlRootElement परिभाषित नहीं है।

हम वास्तव में स्कीमा को 2 स्कीमा में विभाजित करने के मामले से बचने की कोशिश कर रहे हैं, केवल बीबीबी में से एक और दूसरा जहां aaa bbb आयात करता है।

अग्रिम धन्यवाद!

+3

मैं इस पोस्ट में समाधान खोजने के लिए सक्षम था [JAXB के साथ खंडित मार्शलिंग] [1] [1]: http://stackoverflow.com/questions/9295385/jaxb-fragmented-marshalling?lq=1 –

उत्तर

11

मैं शायद 3 साल के साथ देर से हूँ, लेकिन क्या आपने कभी ऐसा ही कुछ कोशिश की है:

public static String marshal(Bbb bbb) throws JAXBException { 
    StringWriter stringWriter = new StringWriter(); 

    JAXBContext jaxbContext = JAXBContext.newInstance(Bbb.class); 
    Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

    // format the XML output 
    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

    QName qName = new QName("com.yourModel.bbb", "bbb"); 
    JAXBElement<Bbb> root = new JAXBElement<Bbb>(qName, Bbb.class, bbb); 

    jaxbMarshaller.marshal(root, stringWriter); 

    String result = stringWriter.toString(); 
    LOGGER.info(result); 
    return result; 
} 

यहाँ लेख का उपयोग मैं जब मैं rootElement बिना unmarshal मार्शल करने के लिए/है: http://www.source4code.info/2013/07/jaxb-marshal-unmarshal-with-missing.html

यह मेरे लिए बहुत अच्छा काम करता है। मैं उत्तर की तलाश में अन्य खोई हुई आत्माओं के लिए यह प्रतिक्रिया लिख ​​रहा हूं।

शुभकामनाएँ:)

-1

मैं शायद 5 साल के साथ देर से कर रहा हूँ :) लेकिन क्या आपने कभी ऐसा ही कुछ कोशिश की है: :

StringWriter stringWriter = new StringWriter(); 
JAXB.marshal(bbb, stringWriter); 
String bbbString = stringWriter.toString(); 
संबंधित मुद्दे