java - services - jax-ws maven
Rastreo de solicitudes/respuestas XML con JAX-WS cuando se produce un error (7)
Quiero registrar solicitudes de envío de jabón sin formato si hay algún error, estoy usando JAX-WS. Cualquier ayuda será apreciada.
¿Existe una forma fácil (también conocida como: no usar un proxy) para obtener acceso al XML de solicitud / respuesta sin procesar para un servicio web publicado con la implementación de referencia JAX-WS (la que se incluye en JDK 1.5 y superior) solo cuando se produce una excepción en respuesta? Quiero registrar la solicitud de SOAP sin formato para poder probarlo a través de cualquier cliente de servicio web en una etapa posterior
Además de la respuesta de Torsten
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump = true
Asegúrese de configurar esto antes de crear una instancia del objeto WebServiceClient (el que extiende el Servicio)
Creo que lo que necesita es un controlador, consulte: http://jax-ws.java.net/articles/handlers_introduction.html
Con el manejador puede interceptar la llamada del servicio web y tener acceso a todos los mensajes SOAP.
Esto funcionó para mí:
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
Lo primero que puede intentar es usar una o las dos de las siguientes propiedades del sistema:
Cliente:
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
Servidor:
com.sun.xml.ws.transport.http.HttpAdapter.dump=true
Si está trabajando con Jboss 6.1 y desea imprimir los registros de la solicitud de clases generadas por JAX-WS al servicio web SOAP, abra el archivo /home/oracle/jboss-eap-6.1/bin/standalone.sh
nota : vaya donde has instalado jboss
Encontraras algo asi
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n"
Cámbiala a la que se muestra abajo.
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n"
También asegúrese de habilitar la depuración
DEBUG_MODE=true
Solo pensé en mencionar esto:
¿La pregunta de cuándo usar el nombre de la propiedad con el internal
y cuándo no?
Si lees la Guía de Metro te dirá que uses:
en cliente:
com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
en el servidor:
com.sun.xml.ws.transport.http.HttpAdapter.dump=true
Sin embargo: me parece que cuando la biblioteca JAX-WS RI se incluyó como estándar con el JDK (esto fue con Java 6), entonces Sun tuvo que cambiar el nombre del nombre de la propiedad para incluir ''interno''. Por lo tanto, si está utilizando JAX-WS RI, ya que viene incluido con el JDK, debe asegurarse de agregar lo internal
al nombre de la propiedad. De lo contrario, no funcionará. En otras palabras necesitas usar:
en cliente:
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true
en el servidor:
com.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true
Por otro lado, si está utilizando una versión independiente de JAX-WS RI (o de Metro en su conjunto), supongo que debería usar el nombre de la propiedad sin el internal
.
Me alegraré si alguien tiene conocimiento interno sobre esto y puedo decir si esto es cierto o no.
Utilizar
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true
y
com.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true
en su lugar (tenga en cuenta el "interno" en el nombre del paquete), esto fue el truco para mí.
Saludos, Torsten