2011-11-22 3 views
5

나는 OMElement 객체를 가지고 있으며 그 객체로부터 InputStream 또는 독자 객체를 가져오고 싶습니다. 내가 원하는 것은 메모리에로드되지 않고 OMElement에서 xml을 스트리밍하는 것입니다. 나는 그에게서 XMLStreamReader 객체를 얻을 수있을뿐입니다. 그러나 나는 그 중에서 InputStream/Reader을 얻을 수있는 방법을 찾을 수 없습니다.OMElement 객체에서 InputStream/io.Reader 가져 오기

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

아무도 도와 줄 수 있습니까? 정말 고마워!

감사

PS : 나는 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 부호화 된 바이너리 데이터를 디코딩하고, 그건 네가 원하는게 아니야.

현재 Axiom에는 스트리밍 끌어 오기 serializer가 없습니다 (그리고 나는 이것을 지원하는 다른 XML 라이브러리를 모른다). 푸시 모드에서 XML에 직렬화, 즉 OutputStream 또는 Writer에 쓰기 만 지원합니다. 별도의 스레드에서 직렬화를 수행하고 PipedOutputStream/PipedInputStream을 사용할 수 있습니다 (DataSource가 지원하지 않는 DataHandler에 대해 DataHandler # getInputStream()에 대해 수행하는 것과 유사). 이것은 상수 메모리 요구 사항을 만족시킬 것이지만, 별도의 스레드를 사용하여 발생하는 오버 헤드가 귀하의 경우에 받아 들여지지 않을 것이라고 생각합니다.

나는 과거에 그러한 풀 직렬기를 구현할 수있는 가능성에 대해 생각했다. 기술적으로는 (별도의 스레드를 사용하지 않고) 기술적으로 가능하다고 생각한다. 다음 릴리스 중 하나에서 구현할 수 있도록 feature request for Axiom을 개설하십시오. 나는 그것이 공리에 흥미로운 추가가 될 것이라고 생각합니다.