如何將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。