如何配置Apache CXF通过非Spring配置文件使用单个JAXBContext?

时间:2012-09-14 07:38:15

标签: java web-services jaxb cxf

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以根据全局JAXBContext的定义尝试建议的here解决方案,但我不确定它是否能与jax-rs一起使用。

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

您的提供商看起来像:

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

并且需要在您的网络应用中的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>