【问题标题】:How to configure Apache CXF to use a single JAXBContext through a Non-Spring configuration file?如何通过非 Spring 配置文件将 Apache CXF 配置为使用单个 JAXBContext?
【发布时间】:2012-09-07 08:33:26
【问题描述】:

我已经读过,跨多个线程共享单个 JAXBContext 对象可以大大降低使用 JAXB 的应用程序的 CPU 使用率。一个证明是here。我们目前正在使用 Apache CXF 来开发 Web 服务。 Apache CXF 默认使用 JAXB。

  • 根据this,可以通过配置文件将Apache CXF 配置为使用单个JAXBContext 实例。
  • 根据this,我们可以提供一个配置文件给CXF。这个配置文件是一个 Spring 配置文件。
  • 根据this,Apache CXF 可以在没有 Spring 的情况下使用。

鉴于以上信息,我如何将 Apache CXF 配置为使用单个 JAXBContext 而不使用基于 Spring 的配置文件,因为我正在查看使用 servlet 传输而不使用 Spring 的代码库?是否可以为 JAXBContext 添加任何其他配置参数以进一步提高性能?

【问题讨论】:

  • 您的问题找到答案了吗?

标签: java web-services jaxb cxf


【解决方案1】:

您可以尝试基于全局 JAXBContext 的定义提出的解决方案 here,但我不确定它是否能很好地与 jax-rs 配合使用。

没有 spring 的更简单的解决方案是定义您自己的 @Provider,扩展 org.apache.cxf.jaxrs.provider.JAXBElementProvider,然后在 cxf 中注册它,例如,如果您使用的是 tomee,则使用 openejb-jar.xml 文件。

您的提供者如下所示:

@Provider
public class MyJAXBElementProvider<T> extends JAXBElementProvider<T> {
  public MyJAXBElementProvider() {
    super();
    setSingleJaxbContext(true);
    setExtraClass(...);
  }
}

它需要在您的 web 应用程序的 WEB-INF/openejb-jar.xml 文件中注册,例如:

<?xml version="1.0"?>
<openejb-jar>
  <pojo-deployment class-name="jaxrs-application">
    <properties>
    cxf.jaxrs.providers = mypackage.MyJAXBElementProvider
    </properties>
  </pojo-deployment>
</openejb-jar>

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 2013-01-06
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多