2011-11-22 7 views
5

मेरे पास OMElement ऑब्जेक्ट है और इससे मैं InputStream या रीडर ऑब्जेक्ट प्राप्त करना चाहता हूं। क्या मैं चाहता हूँ OMElement जो मेरे पास है से xml स्ट्रीम करने के लिए, मेमोरी में लोड हो रही बिना है। मैं केवल उस से XMLStreamReader ऑब्जेक्ट प्राप्त करने में सक्षम हो सकता हूं। लेकिन मुझे उसमें से InputStream/Reader प्राप्त करने का कोई तरीका नहीं मिल रहा है।OMElement ऑब्जेक्ट से एक इनपुटस्ट्रीम/io.Reader प्राप्त करें

OMElement element /*I have this object */ 
XMLStreamReader xmlreader = element.getXMLStreamReaderWithoutCaching(); 

क्या कोई मेरी मदद कर सकता है? मैं सचमुच प्रशंसा करता हूँ!

धन्यवाद

पुनश्च: मैं एक InputStream पाने के लिए एक तरह से आ गए हैं, लेकिन यह एक अपवाद है जो मैं इसे हल करने के लिए मदद की जरूरत है देता है।

XMLStreamReader xmlReader = element.getXMLStreamReader(false); 

    try { 
     if (xmlReader.getEventType() == XMLStreamReader.START_DOCUMENT) { 
       xmlReader.next(); 
     } 
     DataHandler handler = XMLStreamReaderUtils.getDataHandlerFromElement(xmlReader); 
     handler.getInputStream(); 

getDataHandlerFromElement करने के लिए कॉल अपवाद javax.xml.stream.XMLStreamException उत्पन्न: बेस 64 डिकोडिंग के दौरान त्रुटि

+0

मैं जान सकता हूँ, आप कैसे इस मुद्दे पर काबू पाने था? एक नमूना कोड के साथ? – Ratha

उत्तर

2

getDataHandlerFromElement विधि के प्रयोजन के बेस 64 एन्कोड की गई बाइनरी एक तत्व में निहित डेटा को डिकोड करने के लिए है, जो आप नहीं चाहते हैं।

स्वयंसिद्ध वर्तमान में एक स्ट्रीमिंग का पुल serializer नहीं है (और मुझे लगता है कि यह समर्थन करता है, किसी अन्य एक्सएमएल पुस्तकालय पता नहीं है)। यह केवल पुश मोड में एक्सएमएल को क्रमबद्ध करने का समर्थन करता है, यानी आउटपुटस्ट्रीम या राइटर को लिखकर। आप एक अलग थ्रेड में क्रमबद्धता करते हैं और एक PipedOutputStream/PipedInputStream (क्या सक्रियण एक DataHandler कि एक डेटास्रोत के द्वारा समर्थित नहीं है के लिए DataHandler # getInputStream() के लिए करता है के समान) इस्तेमाल कर सकते हैं। यह निरंतर स्मृति आवश्यकता को पूरा करेगा, लेकिन मुझे लगता है कि एक अलग थ्रेड का उपयोग करने के कारण ओवरहेड आपके मामले में स्वीकार्य नहीं होगा।

मैंने पहले भी इस तरह के एक पुल serializer लागू करने के लिए संभावना के बारे में सोचा था, और मुझे लगता है कि ऐसा करने के लिए (एक अलग थ्रेड का उपयोग किए बिना) तकनीकी रूप से संभव है। कृपया feature request for Axiom खोलें ताकि हम इसे अगले रिलीज़ में से किसी एक में कार्यान्वित कर सकें। मुझे लगता है कि यह एक्सीम के लिए एक दिलचस्प जोड़ होगा।

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