Search code examples
javaweb-serviceswsdljax-wswss4j

Writing SOAP request/responses to a log file


I have a web service Client class that establishes a connection with the destination server using the wsdl url. This class uses JaxWsProxyFactoryBean and the WSS4JOutInterceptor to establish a secure connection. I would like to see the SOAP request generated by my code and response generated from the server.

I have tried including the following options when I run my jar from the command line

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

I am using log4j for logging and all the messages get written to a custom file. How can I dump the SOAP request/responses to this same file using command line options?

Do I have to make any code changes to the Client class to achieve this?

Thanks for the help.


Solution

  • I had to add the following lines to the class that creates a SOAP request:

    LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
    loggingInInterceptor.setPrettyLogging(true);
    LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
    loggingOutInterceptor.setPrettyLogging(true);
    factory.getInInterceptors().add(loggingInInterceptor);
    factory.getOutInterceptors().add(loggingOutInterceptor);
    

    I also had to update my cxf client to the latest version from Apache i.e. 2.7.12. This printed out the SOAP headers to the console.