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

CKi*_*ing 9 java web-services cxf jaxb

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

  • 根据,阿帕奇CXF可以被配置为通过一个配置文件来使用的JAXBContext的单个实例.
  • 根据这个,我们可以提供一个配置文件CXF.此配置文件是Spring配置文件.
  • 根据,Apache的CXF可以不用弹簧配合使用.

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

ton*_*nio 0

您可以尝试此处提出的基于 Global JAXBContext 定义的解决方案,但我不确定它是否能与 jax-rs 配合良好。

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

您的提供商将如下所示:

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

它需要在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>
Run Code Online (Sandbox Code Playgroud)