如何将javax.xml.transform.Source
转换为InputStream? Source
的实施是javax.xml.transform.dom.DOMSource
。
Source inputSource = messageContext.getRequest().getPayloadSource();
答案 0 :(得分:10)
首先尝试向下转换为javax.xml.transform.stream.StreamSource
。如果成功,您可以通过getter访问基础InputStream
或Reader
。这将是最简单的方法。
如果向下转发失败,您可以尝试使用javax.xml.transform.Transformer
将其转换为已使用javax.xml.transform.stream.StreamResult
设置的java.io.ByteArrayOutputStream
。然后你返回java.io.ByteArrayInputStream
。类似的东西:
Transformer t = // getTransformer(); ByteArrayOutputStream os = new ByteArrayOutputStream(); Result result = new StreamResult(os); t.transform(inputSource, result); return new ByteArrayInputStream(os.getByteArray());
当然,如果StreamSource
可能是一个大文档,这是不可取的。在这种情况下,您可以使用临时文件java.io.FileOutputStream
/ java.io.FileInputStram
。另一个选择是生成变换器线程并通过java.io.PipedOutputStream
/ java.io.PipedInputStream
进行通信,但这更复杂:
PipedInputStream is = new PipedInputStream(); PipedOutputStream os = new PipedOutputStream(is); Result result = new StreamResult(os); // This creates and starts a thread that creates a transformer // and applies it to the method parameters. spawnTransformerThread(inputSource, result); return is;
答案 1 :(得分:0)
通常不可能,除非它可以下载到StreamSource或其他implementations。