Mostrar los mensajes de Entrada/Salida en el Sistema de Log

Prerequisitos

		<dependency>
			<groupId>es.um.atica.fundeweb</groupId>
			<artifactId>fundeweb-jaxws</artifactId>
		</dependency>

Modo de Empleo

Para poder mostrar los mensajes de Entrada/Salida de un servicio WEB SOAP, vamos a utilizar un SOAPHandler. En nuestro servidor (clase que implementa el servicio web) o cliente de servicio web tenemos que añadir

@HandlerChain(file = "es/um/atica/jaxws/handlers/log-handler.xml")

debajo de las anotaciones @WebService (para el servicio web) y @WebServiceClient para el cliente del servicio. Un ejemplo:

package ticarum.cursosoa.calculadora.servicio;
 
import javax.jws.HandlerChain;
import javax.jws.WebService;
 
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;
 
@WebService(serviceName = "CalculadoraSEIService",
                      portName = "CalculadoraSEIPort",
                      targetNamespace = "urn:ticarum:cursosoa:calculadora:servicio",
                      wsdlLocation = "WEB-INF/wsdl/calculadora.wsdl",
                      endpointInterface = "ticarum.cursosoa.calculadora.servicio.CalculadoraSEI")
@HandlerChain(file = "es/um/atica/jaxws/handlers/log-handler.xml")
public class CalculadoraSEIImpl implements CalculadoraSEI {
 
    private static final Log LOG = Logging.getLog(CalculadoraSEIImpl.class);
 
    ...
 
}

Ahora nos apareceran los mensajes de entrada/salido en el sistema de log de la aplicación. Además se incluye un número de secuencia en estos para poder relacionar la pareja de mensajes. Recordad que en los servicios web OneWay, no hay mensaje de respuesta. Ejmplo de mensajes:

24 jul 2018 14:06:50,541 DEBUG (SoapLogRequestHandler.java:170)- [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] - Usuario: ANONIMO-1532434010307 - Glasfish Metro Soap Inbound Message - 1
/*---[ HTTP request - 1 ]-----------------------------------*/

Accept: application/soap+xml, application/dime, multipart/related, text/*
Cache-Control: no-cache
Connection: close
Content-Length: 365
Content-Type: text/xml; charset=utf-8
Host: localhost:8001
Pragma: no-cache
SOAPAction: ""
User-Agent: IBM Web Services Explorer

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="urn:ticarum:cursosoa:calculadora:servicio" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header/>
    <soapenv:Body>
        <q0:SumaRequest>
            <a>1</a>
            <b>1</b>
        </q0:SumaRequest>
    </soapenv:Body>
</soapenv:Envelope>

/*-----------------------------------------------------------------------*/

24 jul 2018 14:06:50,551  INFO (CalculadoraSEIImpl.java:35)- [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] - Usuario: ANONIMO-1532434010307 - Ejecutando la operacion suma
24 jul 2018 14:06:50,551 DEBUG (CalculadoraSEIImpl.java:37)- [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] - Usuario: ANONIMO-1532434010307 - Parametros de entrada.
	 Parametro parameters: ticarum.cursosoa.calculadora.servicio.SumaRequest@4c3cdb79
24 jul 2018 14:06:50,571 DEBUG (SoapLogRequestHandler.java:170)- [[ACTIVE] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)'] - Usuario: ANONIMO-1532434010307 - Glasfish Metro Soap Outbound Message - 1
/*---[ HTTP response - 1 ]-----------------------------------*/

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>
    <S:Body>
        <ns2:SumaResponse xmlns:ns2="urn:ticarum:cursosoa:calculadora:servicio">
            <return>2.0</return>
        </ns2:SumaResponse>
    </S:Body>
</S:Envelope>

/*-----------------------------------------------------------------------*/

El tamaño maximo de mensaje que se imprime es de 4096 bytes (4KB). Cuando un mensaje tiene un tamaño mayor, se trunca el mensaje por ese byte.

Si se quiere que el tamaño del mensaje sea mayor, tenemos que editar el fichero web.xml añadiendo:

	<context-param>
		<param-name>es.um.atica.jaxws.handlers.SoapLogRequestHandler.dumpThreshold</param-name>
		<param-value>1048576</param-value>
	</context-param>

en el ejemplo aumnetamos el limite a 1048576 bytes (1MB).

Por defecto cuando se añade este SoapHandler, solo se vera el log en los entornos local y desarrollo.

Para que se vean los mensajes en el fichero de los en los entornos de en pre-producción y producción, tenemos que añadir en el fichero log4j.xml lo siguiente:

	<logger name="es.um.atica.jaxws.handlers.SoapLogRequestHandler">
		<level value="DEBUG"/>
	</logger>

JUAN MIGUEL BERNAL GONZALEZ 24/07/2018 13:23