gpt4 book ai didi

java - 通过 SOAP 流式传输?

转载 作者:行者123 更新时间:2023-11-29 05:57:20 26 4
gpt4 key购买 nike

我有 WS,其中 SOAP 负载中有一个 xsd:base64Binary 元素。

最初这是为最大 1MB 设计的,但要求发生了变化,现在它应该接受 50MB 的上传文件转换为 base64 :( 在 java 中,这在内存方面变得巨大。

我的理论解决方案是将这些“附件”从一端传输到另一端(文件从网络应用程序上传,然后转换为 base64 并调用网络服务存储在某些 Adob​​e 应用程序中)-我说效率很低

我读过有关 Stax 的资料,但它不适用于 Web 服务。

有没有一种方法可以将流媒体与 Web 服务结合使用?

(MTOM,但没有找到带流的样本)

最佳答案

我认为您可以使用自定义 servlet 并覆盖 post 方法来完成此操作。

通过 Stax 读取足够多的请求的 InputStream 以找到包含 base64 的元素,然后将其通过管道传输到某种 Base64InputStream,直到到达元素的末尾。使用 Stax 或 JaxB 将对象转换为响应并将其发回。

无论您做什么,都不要缓冲整个请求。不要在不考虑它如何处理缓冲的情况下使用典型的 soap 框架,如 CXF 或 JAXWS。你会狠狠地打击你的垃圾收集器,它会 panic ,逃跑,再也不会调用你。

编辑:垃圾收集

如果您正在运行 4gb 堆,并假设您使用的是 HotSpot,请确保您使用的是来自 Oracle (7u5) 的最新 Java。接下来,切换到用于处理大堆的收集器:g1gc (-XX:+UseG1GC) 或 CMS (-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode)

此外,考虑添加以下内容:

-XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseLargePages -XX:+UseStringCache -XX:+UseCompressedOops

关于java - 通过 SOAP 流式传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11568769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com