En mi aplicación, tenemos un método de servicio web llamado getFoo() que devuelve un objeto Foo. El método getFoo() se llama varios cientos de veces por segundo. El objeto Foo se clasifica desde nuestro objeto Java a la respuesta XML SOAP utilizando Apache CXF.¿Cómo puedo almacenar en caché el XML SOAP estructurado generado por Apache CXF para un objeto Java en particular para mejorar el rendimiento?
Desde el perfil de nuestra aplicación, determinamos que la clasificación de este objeto (objeto java -> jabón codificado xml) es el mayor consumidor de ciclos de CPU. y dado que nuestro objeto Foo no cambia muy a menudo, volver a ordenar este objeto cada vez es innecesario.
Me di cuenta de que esto es una optimización común y me pregunté cómo otros lo abordaron. Miré brevemente los documentos CXF y hay un interceptor Marshall que probablemente podría utilizar. Podría crear un mapa que pueda asignar objetos Foo a la versión codificada en XML. Pero, entonces surgen algunos otros problemas, como cómo eliminar objetos de este mapa una vez que ya no son necesarios, etc. Sería bueno si hubiera soporte integrado para detectar de alguna manera los cambios en el objeto y reorganizarlos .. . Nada imposible, pero no quería reinventar la rueda.
EDITAR (6/16/09): Hemos progresado haciendo un BareOutInterceptor personalizado y modificando la cadena Interceptor para llamar a la personalizada. La costumbre agrega algo de lógica adicional para llamar solo al método "writeParts (....)" que realiza la clasificación solo de una vez para un objeto java dado. Publicará la solución una vez finalizado. Además, cambié el nombre de la pregunta.
¿Hay algún experto de Apache CXF en SO que pueda decirnos cómo agregar un marcador de referencias personalizadas en la cadena del interceptor de salida? –