簡體   English   中英

如何編寫原始的多部分SOAP HTTP消息以通過Grails輸出

[英]How to write raw multipart SOAP HTTP message to output with Grails

我有一個Grails應用程序,應該使用以前存儲的原始SOAP消息進行響應。 這些消息是從數據庫中讀取的。 當我將消息寫入輸出時,它將被添加到HTTP響應的主體部分。 結果是,由於HTTP標頭等是主體的一部分,因此在客戶端讀取響應失敗。 客戶端的結果看起來像這樣

------=_Part_0_1123526246346
Content-Type: application/soap+xml; charset=utf-8
Content-Transfer-Encoding: 8bit
Content-ID: <some-id>

<soap:Envelope>
<!-- Message contents -->
</soap:Envelope>

------=_Part_0_1123526246346
Content-Type: application/pdf
Content-Transfer-Encoding: binary
Content-ID: <temp.pdf>
Content-Disposition: attachment; name="temp.pdf"

<!-- Lots of binary data -->

%%EOF
------=_Part_0_1123526246346--

所有這些都意味着這是一條包含SOAP文檔的多部分SOAP消息。 客戶端正確使用了寫入DB的消息,並且僅將肥皂信封視為正文,將PDF視為附件。

如何使用Grails以RAW輸出的形式編寫此消息,以使HTTP內容最終不會被復制?

如果需要完全控制由控制器產生的response (包括標題),則應查看可用的響應對象。 Grails中的每個控制器都可以通過response對象訪問HttpServletResponse ,因此您可以自己管理原始響應。

但是,您的問題是您需要一個多部分響應,並且HTTP標頭已嵌入文本中。 您應該能夠解析它們,並使用Jason Hunter中著名的軟件包手動創建MultiPartResponse

只需對數據進行一點分析,將Grails中可用的HttpServletResponseMultipartResponse結合起來,您就可以得到所需的結果。

另一個可能的選擇是簡單地在HttpServletResponse上設置標頭以指示它是一個多部分響應,然后將文本/數據直接寫入輸出流。 這可能會或可能不會起作用,具體取決於消費方式,但值得嘗試。

// some controller method
response.setContentType("multipart/x-mixed-replace")
response.outputstream << theDataAsAByteArray

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM