在 CXF 中禁用非 MTOM SOAP 消息或限制它们的大小

Disable non-MTOM SOAP messages or restrict their size in CXF

我在 CXF(或一般的 SOAP)中遇到过这个问题。 当我在服务器和客户端的两端启用 MTOM 请求时,我的应用程序运行良好,Java 堆大小不会呈指数增长。但是,如果某些客户端决定不使用 MTOM 发送大型(我的意思是 500MB+ 附件作为 B64 编码格式)消息,就会出现问题,这会导致 Java 堆大小呈指数增长,当然会发生 OutOfMemoryException。

那么我如何才能完全禁用非 MTOM 消息并强制客户端使用它。有没有使用 CXF 或其他东西的解决方案......我的意思是检测非 MTOM 消息并立即抛出错误(不处理整个 XML 消息)。或者是否有限制非 MTOM 消息大小的解决方案,比如如果消息是 ~30MB 允许它,否则抛出错误。

这个问题我想了很久,查了很多,很遗憾,没有找到解决办法。

我不想因为契约而放弃 SOAP 而坚持 REST。但我想如果我找不到任何解决方案那将是我唯一的机会。

如有任何建议,我们将不胜感激。

我找到的最佳解决方案写在 http://cxf.apache.org/docs/securing-cxf-services.html

控制大请求负载

我必须启用 org.apache.cxf.stax.maxXMLCharacters 属性 并将其值设置为元素的合理数字... 它有一个模棱两可的描述,你必须使用不安全的解析器来做那件事,但那是不正确的。