http - 如何编写原始的多部分SOAP HTTP消息以通过Grails输出

标签 http grails http-headers multipart

我有一个Grails应用程序,应该使用以前存储的原始SOAP消息进行响应。这些消息是从数据库中读取的。当我将消息写入输出时,它将被添加到HTTP响应的主体部分。结果是,由于HTTP header 等是主体的一部分,因此在客户端读取响应失败。客户端的结果看起来像这样

------=_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消息,其中PDF文档作为附件提供。客户端正确使用了写入DB的消息,并且仅将肥皂信封视为正文,将PDF视为附件。

如何使用Grails以RAW输出形式编写此消息,以使HTTP内容最终不会重复?

最佳答案

如果需要完全控制由 Controller 产生的response(包括标题),则应查看可用的response对象。 Grails中的每个 Controller 都可以通过response对象访问HttpServletResponse,因此您可以自己管理原始响应。

但是,您的问题是您需要一个多部分响应,并且HTTP header 已嵌入文本中。您应该能够解析出它们并使用Jason Hunter的MultiPartResponse手动创建famous package

通过对数据进行一点分析,将Grails中可用的HttpServletResponseMultipartResponse结合起来,您应该能够获得所需的结果。

另一个可能的选择是简单地在HttpServletResponse上设置 header ,以指示它是一个多部分响应,并将文本/数据直接写入输出流。这可能会或可能不会起作用,具体取决于消费方式,但值得尝试。

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

关于http - 如何编写原始的多部分SOAP HTTP消息以通过Grails输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537257/

相关文章:

php - 我应该发送哪些 header 才能缓存 PHP 脚本的输出?

c# - 在进行 Web API 调用时捕获异常

javascript - Axios POST 到 Mailchimp API : HTTP Authentication not working

http - 更换证书后出现 NET::ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN 错误

spring - Grails Spring Security无法在一夜之间登录用户

jquery - 如何从不同的应用程序远程调用Grails Web服务

java - Grails 如何包含 Source Jars?

java - 使用单个连接将多个文件发送到 servlet

c# - 通过 C# IHttpHandler 访问多部分 HTTP 请求正文

php - 尝试 cURL RSS 提要时出现错误 400 'bad request'