如何将javax.xml.transform.Source
转换为InputStream? Source
的实现是javax.xml.transform.dom.DOMSource
。如何将javax.xml.transform.Source转换为InputStream?
Source inputSource = messageContext.getRequest().getPayloadSource();
如何将javax.xml.transform.Source
转换为InputStream? Source
的实现是javax.xml.transform.dom.DOMSource
。如何将javax.xml.transform.Source转换为InputStream?
Source inputSource = messageContext.getRequest().getPayloadSource();
首先尝试downcast到javax.xml.transform.stream.StreamSource
。如果成功,您可以通过获得者访问底层InputStream
或Reader
。这将是最简单的方法。
如果向下转换失败,您可以尝试使用javax.xml.transform.Transformer
将其转换为已使用java.io.ByteArrayOutputStream
设置的javax.xml.transform.stream.StreamResult
。然后你返回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;
这通常不太可能,除非它可以上下式浇铸StreamSource或其他implementations。