jax example java web-services jaxb cxf

java - example - jax-ws



¿Cómo configurar Apache CXF para usar un solo JAXBContext a través de un archivo de configuración Non-Spring? (1)

He leído que compartir un único objeto JAXBContext en varios subprocesos puede reducir en gran medida el uso de la CPU de una aplicación que utiliza JAXB. Una prueba de esto está aquí . Actualmente estamos utilizando Apache CXF para desarrollar servicios web. Apache CXF está obligado a usar JAXB de manera predeterminada.

  • De acuerdo con esto , Apache CXF puede configurarse para usar una única instancia de JAXBContext a través de un archivo de configuración.
  • De acuerdo con esto , podemos suministrar un archivo de configuración a CXF. Este archivo de configuración es un archivo de configuración de Spring.
  • De acuerdo con esto , Apache CXF se puede usar sin Spring.

Dada la información anterior, ¿cómo configuro Apache CXF para usar un solo JAXBContext sin usar un archivo de configuración basado en Spring ya que estoy buscando una base de código que use el transporte de servlet sin Spring? ¿Hay otros parámetros de configuración que se puedan agregar para el JAXBContext que mejorarán aún más el rendimiento?


Podrías probar la solución propuesta aquí , basada en la definición de un JAXBContext Global, pero no estoy seguro si funcionará bien con jax-rs.

Una solución más simple sin resorte sería definir su propio @Provider , extendiendo org.apache.cxf.jaxrs.provider.JAXBElementProvider , y registrarlo en cxf, usando el archivo openejb-jar.xml , por ejemplo, si está trabajando con tomo .

Su proveedor se vería así:

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

y tendría que estar registrado en el archivo WEB-INF/openejb-jar.xml en su aplicación web como:

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