我正在升级应用程序内的现有 SOAP 堆栈(客户端和服务器端),以通过使用 SOAP 附件(SwA 或 MTOM)来支持二进制内容。现有代码库广泛利用 SAAJ,并使用 Axis2(目前是 1.5.6)实现。(应用程序的其他部分已经使用 Axis2,因此坚持使用它似乎是合理的)。
通过 SAAJ API(添加节点、元素、SOAPAttachments 实例...)构建 SOAPMessage 时,一切正常。序列化的 SOAPMessage 确实是一个正确的 xop/mtom 消息。
当通过 Axis2 的 MessageFactory 解析像 InputStream 这样的消息时出现了我的问题(不,我们不使用 AxisServlet/Endpoint,我们有时会直接解析原始流)。它可以工作(我取回了一个功能上等效的 SOAPMessage 实例),但我希望 Axis2 使用(axiom 的底层)附件缓存功能,以免附件读入主内存,我无法做到这一点。
根据我对 Axis2 在axis-saaj.jar 中的实现的理解,似乎 SOAPMessageImpl 被硬编码以在没有启用缓存功能的情况下实例化 Axiom Attachments 实例,而且看起来没有可配置的方式(axis conf 文件、系统属性、专有扩展messagefactory,无论如何......)来改变这种行为。
我错过了什么吗?没有办法使用带有附件缓存的axis-saaj(或从InputStream 到SOAPMessage 实例的任何其他方式)?我几乎找不到关于axis2-saaj 的文档,而且到目前为止,Axis User ML 对此保持沉默。
谢谢!