我在CXF(或一般的SOAP)中遇到了这个问题。 当我在服务器和客户端两端启用 MTOM 请求时,我的应用程序运行良好,Java 堆大小不会呈指数级增长。但是,如果某些客户端决定不使用 MTOM 发送大型(我的意思是 500MB+ 附件作为 B64 编码格式)消息,则会出现问题,这会导致 Java 堆大小呈指数级增长,当然也会发生内存异常。
那么我怎样才能完全禁用非 MTOM 消息并强制客户端使用它。是否有任何使用 CXF 或其他解决方案...我的意思是检测非 MTOM 消息并立即抛出故障(不处理整个 XML 消息)。或者是否有任何解决方案可以限制非 MTOM 消息大小,例如如果消息为 ~30MB 允许它,否则抛出错误。
这是我思考了很长时间的问题,不幸的是,搜索了很多,没有找到任何解决方案。
我不想因为合同而放弃 SOAP 并坚持使用 REST。但我认为,如果我找不到任何解决方案,那将是我唯一的机会。
任何建议不胜感激。
我找到的最佳解决方案是用 http://cxf.apache.org/docs/securing-cxf-services.html
控制大型请求有效负载
我必须启用org.apache.cxf.stax.maxXMLCharacters属性并将其值设置为元素的敏感数字... 它有一个模棱两可的描述,你必须使用不安全的解析器来做到这一点,但这是不正确的。