在我的应用程序中,我们有一个名为 getFoo() 的 Web 服务方法,它返回一个 Foo 对象。getFoo () 方法每秒被调用数百次。Foo 对象使用 Apache CXF 从我们的 Java 对象编组到 SOAP XML 响应。
通过分析我们的应用程序,我们确定这个对象(java 对象 -> soap 编码的 xml)的编组是 CPU 周期的最大消耗者。并且由于我们的 Foo 对象不会经常更改,因此每次都重新编组该对象是不必要的。
我认为这是一个常见的优化,并想知道其他人是如何解决它的。 我简要查看了 CXF 文档,其中有一个 Marshall 拦截器,我可能可以使用它。我可以创建一个可以将 Foo 对象映射到 XML 编码版本的 Map。但是,随后出现了一些其他问题,例如一旦不再需要对象时如何从该地图中删除对象等。如果内置支持以某种方式检测对象的更改并重新编组,那就太好了。 . 没有什么不可能,但又不想重新发明轮子。
编辑(2009 年 6 月 16 日):通过制作自定义 BareOutInterceptor 并修改拦截器链以调用自定义链,取得了一些进展。自定义添加了一些额外的逻辑,只调用“writeParts(....)”方法,该方法只对给定的 java 对象执行一次编组。完成后将发布解决方案。另外,我重命名了这个问题。