¿Es posible registrar la solicitud/respuesta como XML usando CXF, idealmente en un archivo separado para poder controlar lo que está haciendo una aplicación?Solicitud/respuesta de registro con Apache CXF como XML
Respuesta
Añadir lo siguiente a sus puntos finales y clientes:
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
Esto guardara todo para el registro del servidor.
Si desea registrarlos en otro lugar, mire el código fuente del CXF LoggingInInterceptor y LoggingOutInterceptor. Puede seguir el patrón que utilizan para tomar los mensajes en su camino de entrada/salida y hacer con ellos lo que quiera.
añaden sus propios interceptores a la cadena con algo como esto:
<jaxws:inInterceptors>
<ref bean="myLoggingInInterceptor" />
</jaxws:inInterceptors>
tanto, he intentado un poco más con esto. Para obtener la solicitud XML y Respuestas conectado, y si está utilizando Log4J, es necesario configurar el registro de nivel de CXF en el log4j.xml archivo como esto (> = INFO):
<logger name="org.apache.cxf" >
<level value="INFO" />
</logger>
Y la cxf.xml archivo debe contiene esto:
<cxf:bus>
<cxf:features>
<cxf:logging/>
</cxf:features>
</cxf:bus>
Ambos archivos deben estar en el CLASSPATH.
Para mostrar el mensaje de jabón agregar esto a su código:
Client client = ClientProxy.getClient(service);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
Hay un par mayormente formas usadas para hacer el registro de CXF. Esta es la forma en la configuración de log4j ... que uno de arriba es la manera jaxws archivo de configuración –
La solicitud XML jabón puede ser conectado fácilmente por un encargo En interceptor. Por ejemplo, tenemos un interceptor llamado "wsLoggingInInterceptor", tanto en el archivo de contexto que será como el siguiente:
<bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="logOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<bean id="wsLoggingInInterceptor" class="org.jinouts.webservice.logging.WSLoggingInInterceptor"/>
<cxf:bus>
<cxf:inInterceptors>
<ref bean="loggingInInterceptor"/>
<ref bean="wsLoggingInInterceptor"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="logOutInterceptor"/>
</cxf:outInterceptors>
</cxf:bus>
En la clase podemos obtener la solicitud XML de la siguiente manera:
public class WSLoggingInInterceptor extends AbstractSoapInterceptor
{
public WSLoggingInInterceptor()
{
super(Phase.RECEIVE);
}
@Override
public void handleMessage (SoapMessage message) throws Fault
{
//get the remote address
HttpServletRequest httpRequest = (HttpServletRequest) message.get (AbstractHTTPDestination.HTTP_REQUEST);
System.out.println ("Request From the address : " + httpRequest.getRemoteAddr ());
try
{
// now get the request xml
InputStream is = message.getContent (InputStream.class);
CachedOutputStream os = new CachedOutputStream ();
IOUtils.copy (is, os);
os.flush ();
message.setContent ( InputStream.class, os.getInputStream ());
is.close ();
System.out.println ("The request is: " + IOUtils.toString (os.getInputStream ()));
os.close ();
}
catch (Exception ex)
{
ex.printStackTrace ();
}
}
}
Look , aquí también he registrado la dirección desde donde viene la solicitud. También puede obtener más información del objeto "HttpServletRequest". usted puede tener más de: http://cxf.apache.org/docs/interceptors.html
Para registro XML respuesta, puede echar un vistazo a this thread
Es mucho más fácil añadir su propio registrador a las propiedades de punto final. En este caso, el interceptor de registro predeterminado buscará su registrador en las propiedades de punto final y, si encuentra uno, lo usará; de lo contrario, creará el valor predeterminado.Aquí está mi ejemplo de uso:
<jaxws:endpoint
xmlns:client="http://service.info.client.diasoft.services.stream.integration.cib.sberbank.ru"
address="/diasoft/clientInfoWS"
serviceName="client:ClientWS"
implementor="#clientServiceImpl">
<jaxws:properties>
<entry key="MessageLogger" value-ref="logger"/>
</jaxws:properties>
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
</jaxws:endpoint>
<bean id="logger" class="org.apache.cxf.common.logging.LogUtils" factory-method="getLogger">
<constructor-arg value="ru.sberbank.cib.integration.stream.services.diasoft.client.info.service.ClientWSImpl"/>
</bean>
Si está utilizando la primavera Con que es de Java-configuración, hay 2 maneras fáciles de activar el registro de jabón-mensajes con Apache CXF:
Directamente en el SpringBus - que es muy útil, si se desea registrar los mensajes de todos sus puntos finales CXF-:
@Bean(name=Bus.DEFAULT_BUS_ID) public SpringBus springBus() { SpringBus springBus = new SpringBus(); LoggingFeature logFeature = new LoggingFeature(); logFeature.setPrettyLogging(true); logFeature.initialize(springBus); springBus.getFeatures().add(logFeature); return springBus; }
activar el registro por separado en la víspera ry expuesto CXF-Punto de llegada
@Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(springBus(), weatherService()); endpoint.publish(SERVICE_NAME_URL_PATH); endpoint.setWsdlLocation("Weather1.0.wsdl"); LoggingFeature logFeature = new LoggingFeature(); logFeature.setPrettyLogging(true); logFeature.initialize(springBus()); endpoint.getFeatures().add(logFeature); return endpoint; }
Recuerde al LoggingFeature.setPrettyLogging (true); Método para ver bastante impresos de jabón Mensajes y LoggingFeature.initialize (springBus()); - sin esto último, la magia no sucede. Para código más limpio, también se puede separar la LoggingFeature como separado Bean y inyectarlo ya sea en su punto final o SpringBus-Bean.
- 1. ¿Qué pasa con mi cliente Apache CXF?
- 2. ¿Qué significa CXF en "Apache CXF"?
- 3. Problemas con mi cliente Apache CXF
- 4. Apache CXF + Spring: Autenticación de certificado simple
- 5. Implementación de Apache Wink y Apache CXF JAX-RS
- 6. Apache CXF - Conjunto de la cabecera HTTP
- 7. Cliente Apache CXF para puntos finales dinámicos
- 8. ¿Cómo obtener respuesta como documento XML con Apache Httpclient api?
- 9. Applet Web service client, con Eclipse Indigo usando Apache CXF,
- 10. Registro de Apache con Heroku + Rails
- 11. Diferencia entre Apache CXF y Axis
- 12. Registro Apache Log4j con zona horaria específica
- 13. Unidad de tiempo utilizada en los métodos Apache CXF
- 14. Apache CXF + Spring: generación de un cliente simple
- 15. Apache conexiones históricas registro
- 16. Cómo enviar datos JSON como cuerpo de solicitud en Apache CXF jax-rs (REST)
- 17. ¿Deshabilitar el registro de Apache HTTP Client?
- 18. Cómo escanear XML con Apache Velocity?
- 19. ¿Cómo puedo incluir apache-cxf como una dependencia en mi Maven pom?
- 20. cxf registro de mensajes entrantes y salientes en el archivo de registro separado
- 21. Apache CXF: ¿se agrega documentación personalizada en el WSDL?
- 22. analizando la salida de registro de git, preferiblemente como xml
- 23. Asignación de tipos de contenido de extensión en Apache CXF JAX-RS
- 24. ¿Es posible generar clases serializables con CXF?
- 25. (Apache) Embellecedor de registro de errores
- 26. Analizando archivos de registro de apache
- 27. WS-Security no funciona con CXF
- 28. Instalación CXF con Eclipse 3.5
- 29. Apache grep archivo de registro grande
- 30. Apache Shiro "con JSF 2.0"! ¿Como va?
¿Esta no sólo volcar el contenido sin formato es decir, no como XML? – irishguy
Se mostrará XML en el registro del servidor. – BPS
Para una función de registro más rica en características, ver https://github.com/greenbird/xml-formatter-components/tree/master/cxf – ThomasRS