我在CXF(或一般的SOAP)中遇到此问题。 当我在双方 - 服务器和客户端上启用MTOM请求时,我的应用程序运行良好,Java堆大小不会呈指数级增长。但是,如果某个客户端决定不使用MTOM发送LARGE(我的意思是500MB +附件作为B64编码格式)消息,则会出现问题,这会导致Java堆大小呈指数级增长,当然会发生OutOfMemoryException。
那么如何才能完全禁用非MTOM消息并强制客户端使用它。是否有任何解决方案使用CXF或其他...我的意思是检测非MTOM消息并立即抛出故障(不处理整个XML消息)。或者是否有任何解决方案来限制非MTOM消息大小,例如,如果消息是〜30MB允许它,否则抛出错误。
这是我长期以来一直在思考的一个问题,不幸的是,没有找到任何解决方案。很多人都在搜索它。
由于合同,我不想放弃SOAP并坚持使用REST。但我想如果我找不到任何解决方案,那将是我唯一的机会。
任何建议都表示赞赏。
答案 0 :(得分:0)
我找到的最佳解决方案是用http://cxf.apache.org/docs/securing-cxf-services.html
编写的我必须启用org.apache.cxf.stax.maxXMLCharacters属性并将其值设置为元素的敏感数字... 它有一个含糊不清的描述,你不得不使用不安全的解析器来做到这一点,但这是不正确的。