发生错误时使用JAX-WS跟踪XML请求/响应

如果有任何错误,我想记录原始肥皂邮件请求,我正在使用JAX-WS。 任何帮助将不胜感激。

只有在响应中发生exception时,是否有一种简单的方法(也就是说:不使用代理)来访问使用JAX-WS参考实现(JDK 1.5中包含的那个)更好地发布的Web服务的原始请求/响应XML? 我想记录原始的SOAP reuest,以便我可以在以后的任何webservice客户端测试它

使用

com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true

com.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true

相反(注意包名称中的“内部”),这对我来说很有用。

干杯,托斯滕

我想我会提到这个:

什么时候使用属性名称与internal的时间,何时不?

如果您阅读Metro指南,它会告诉您使用:

在客户端:

 com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true 

在服务器上:

 com.sun.xml.ws.transport.http.HttpAdapter.dump=true 

但是:在我看来,当JAX-WS RI库作为标准包含在JDK中时(这是Java 6),Sun必须重命名属性名称以包含“internal”。 因此,如果您使用JAX-WS RI,因为它与JDK捆绑在一起,那么您必须确保将internal添加到属性名称。 否则它将无法工作。 换句话说,你需要使用:

在客户端:

 com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true 

在服务器上:

 com.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true 

另一方面,如果您使用的是独立版本的JAX-WS RI(或整个Metro),那么我猜你应该使用没有 internal属性的属性名称。

如果有人对此有内在的了解并且可以说这是否属实,我会很高兴。

除了托尔斯滕的回答

com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump =真

确保在实例化WebServiceClient对象(扩展Service的对象)之前设置此项

您可能想要尝试的第一件事是使用以下系统属性中的一个或两个:

客户:

 com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true 

服务器:

 com.sun.xml.ws.transport.http.HttpAdapter.dump=true 

我认为你需要的是一个处理程序,请参阅: http : //jax-ws.java.net/articles/handlers_introduction.html
使用处理程序,您可以拦截Web服务调用,并可以访问所有SOAP消息。

这对我有用:

 -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true 

如果您使用Jboss 6.1并且想要将JAX-WS生成的类请求的日志打印到SOAP Web服务,请打开文件/home/oracle/jboss-eap-6.1/bin/standalone.sh 注意 :请转到你安装了jboss的地方

你会发现这样的东西

 JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n" 

将其更改为如下所示

 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" 

还要确保启用调试

 DEBUG_MODE=true