This page describes a HTTP logging facility created to aid in Axis development.

See also FrontPage/Axis/DynamicSSLConfig for more information about the SSL setup.
See also FrontPage/Axis/Logging/In_Memory_Logging for more information about logging SOAP messages.

The Problem

Axis comes with a LogHandler which can be used to dump SOAP requests/responses to a log file. Normally, this works very well, but has the following shortcomings:

The first point can be solved by employing a HTTP Tunnel Monitor, which sits between the client and server and displays the messages sent/received as they go past.

However, the use of a Tunnel Monitor is not possible when employing SSL, especially when also using client authentication based on certificates. In this case the connection has to be established directly between client and server. The tunnel monitor cannot be used, because it would create a "break" in the SSL authentication, and authentication would fail.

For this reason we had a need for Logging at the HTTP level from inside Axis.

The Solution

To solve this we implemented an extension to the java Socket class. This so-called "LoggingSocket" is inserted into Axis by a special Axis Engine Configuration class (SSL!ClientAxisConfig) in conjunction with an implementation of SecureSocketFactory.

Simply configure the SSL!ClientAxisConfig to use logging, and supply a base directory within which the log files will be created.


To use the logging facility, add the classes downloaded from this page to your web service client application.

The following is a sample of using the HTTP logging:

   1 // create config
   2 boolean logging = true; // activate logging
   3 SSLClientAxisEngineConfig axisConfig = new SSLClientAxisEngineConfig();
   4 axisConfig.setKeystore("/path/to/clientkey.p12");
   5 axisConfig.setKeystoreType("PKCS12");
   6 axisConfig.setKeystorePassword("changeit");
   7 axisConfig.setTruststore("/path/to/truststore.jks");
   8 axisConfig.setTruststoreType("JKS");
   9 axisConfig.setTruststorePassword("changeit");
  10 if (logging)
  11     axisConfig.setDebugBaseDir("/path/to/logs");
  12 axisConfig.initialize(logging);
  13 // initialize service
  14 URL soapURL = new URL("");
  15 MyWebServiceServiceLocator locator = new MyServiceLocator(axisConfig);
  16 MyWebServicePort port = locator.getMyWebServicePort(soapURL);
  17 MyWebServiceBindingStub stub = (MyWebServiceBindingStub) port;
  18 // make a call to the webservice (assume no params for this operation)
  19 MyResultType result = stub.myoperation1();

Note: In the example above it is assumed that you have created the client stubs for the web service "MyWebService" using the Axis WSD!L2Java tool.

After the call to myoperation() the log directory specified should contain 2 files, one with "outgoing" in the filename (the request), and one with "incoming" in the filename, the response.


Comments, Feedback, Support

This code is supplied back to the apache foundation, without any support or warranty. Use at your own risk. The author and his employer assume no responsibility for damages resulting in the use of this code or these instructions.

Feel free to use the code in any way you want but do not expect support.

Should you have questions about the code, please feel free to contact me (the Author) at: runger --AT--

FrontPage/Axis/Logging/Logging_with_SSL (last edited 2009-09-20 22:48:38 by localhost)