gpt4 book ai didi

java - 如何缓存 Apache CXF 为特定 Java 对象生成的编码 SOAP XML 以提高性能?

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:23 27 4
gpt4 key购买 nike

在我的应用程序中,我们有一个名为 getFoo() 的网络服务方法,它返回一个 Foo 对象。 getFoo() 方法每秒被调用数百次。 Foo 对象使用 Apache CXF 从我们的 Java 对象编码到 SOAP XML 响应。

通过分析我们的应用程序,我们确定此对象的编码(java 对象 -> soap 编码的 xml)是 CPU 周期的最大消耗者。并且由于我们的 Foo 对象没有改变很多时候,每次都重新编码这个对象是不必要的。

我认为这是一个常见的优化,想知道其他人是如何解决它的。我简单地查看了 CXF 文档,发现有一个 Marshall 拦截器我可能会用到。我可以创建一个可以将 Foo 对象映射到 XML 编码版本的 Map。但是,随后出现了一些其他问题,例如一旦不再需要对象,如何从该 Map 中删除对象等。如果内置支持以某种方式检测对象的更改并重新编码,那就太好了。 . 没有什么不可能,只是不想重新发明轮子。

编辑 (6/16/09):通过制作自定义 BareOutInterceptor 并修改拦截器链以调用自定义拦截器,取得了一些进展。自定义添加了一些额外的逻辑来只调用“writeParts(....)”方法,该方法只对给定的 java 对象执行一次编码。完成后将发布解决方案。另外,我重命名了这个问题。

最佳答案

好吧,不完全是你要找的答案,但无论如何:REST 用于高流量的 Web 服务(例如谷歌)的原因是 REST 被设计为可缓存 - 而 SOAP 并不是被设计为可缓存。

SOAP 基本上基于(根据 HTTP 定义)不可缓存的 POST 请求,而 REST 使用易于缓存的 GET。

您必须在 SOAP (POST) 请求转到实际的 Web 服务之前检查它 - 即使用代理。 “标准”代理通常不知道 SOAP 语法。

IBM's WebSphere Application Server though can do that

问候, 奥拉夫

关于java - 如何缓存 Apache CXF 为特定 Java 对象生成的编码 SOAP XML 以提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/989551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com