WS Apache logoWSIF site

the WSIF site
Home
Developer's Guide
Providers
Samples
 
   

WSIF Trace


print-friendly
version

Quick summary

To switch WSIF trace on,in your log4j.properties specify the following settings to trace to wsif.log....

log4j.rootCategory=INFO, CONSOLE, LOGFILE

log4j.logger.org.apache.wsif.*=DEBUG
log4j.logger.com.ibm.wsif.*=DEBUG
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=wsif.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.Threshold=DEBUG

For those who want to know more

WSIF uses Apache commons-logging for its messages and trace. See http://jakarta.apache.org/commons/logging.html for more information. Commons-logging is an API which wraps various log implementations. You can configure commons-logging to use other log implementations, or even your own. So commons-logging.jar must be on the classpath, and log4j is the default log implementation, although commons-logging.jar contains other log implementations. You can configure commons-logging.properties to use a different log implementation. If using log4j, you configure log4j.properties to redirect trace and switch it on. The log4j.properties settings above are only a subset of all possibilities.

Interpreting trace

Here is a sample trace output...

7951 [main] DEBUG org.apache.wsif.*  - ENTRY WSIFServiceFactory.newInstance()
8122 [main] DEBUG org.apache.wsif.*  - EXIT  WSIFServiceFactory.newInstance(org.apache.wsif.base.WSIFServiceFactoryImpl@7df10a36)
8132 [main] DEBUG org.apache.wsif.*  - ENTRY WSIFServiceFactoryImpl.getService<7df10a36>(C:\wsad-5\eclipse\workspace\ws-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl, <null>, <null>, http://wsifservice.addressbook/, AddressBook)

8252 [main] DEBUG org.apache.wsif.*  - ENTRY   PrivateCompositeExtensionRegistry.<init><43000a37>()
8893 [main] DEBUG org.apache.wsif.*  - ENTRY    JavaBindingSerializer.registerSerializer<576c0a36>(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)
8913 [main] DEBUG org.apache.wsif.*  - EXIT     JavaBindingSerializer.registerSerializer()
8943 [main] DEBUG org.apache.wsif.*  - ENTRY    FormatBindingSerializer.<init><40b48a36>()

8943 [main] DEBUG org.apache.wsif.*  - EXIT     FormatBindingSerializer.<init>()
9223 [main] DEBUG org.apache.wsif.*  - ENTRY    FormatBindingSerializer.registerSerializer<40b48a36>(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)
9243 [main] DEBUG org.apache.wsif.*  - EXIT     FormatBindingSerializer.registerSerializer()
9293 [main] DEBUG org.apache.wsif.*  - ENTRY    EJBBindingSerializer.registerSerializer<55a24a36>(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)

9323 [main] DEBUG org.apache.wsif.*  - EXIT     EJBBindingSerializer.registerSerializer()
9333 [main] DEBUG org.apache.wsif.*  - EXIT    PrivateCompositeExtensionRegistry.<init>()
9353 [main] DEBUG org.apache.wsif.*  - ENTRY   WSIFDynamicTypeMap.<init><32128a36>()
9353 [main] DEBUG org.apache.wsif.*  - EXIT    WSIFDynamicTypeMap.<init>()

9363 [main] DEBUG org.apache.wsif.*  - ENTRY  WSIFServiceImpl.<init><31e38a36>(C:\wsad-5\eclipse\workspace\ws-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl, <null>, <null>, http://wsifservice.addressbook/, AddressBook)
9363 [main] DEBUG org.apache.wsif.*  - ENTRY   WSIFUtils.readWSDL(<null>, C:\wsad-5\eclipse\workspace\ws-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl)
9373 [main] DEBUG org.apache.wsif.*  - ENTRY     WSIFPluggableProviders.getProvider(/)

9384 [main] DEBUG org.apache.wsif.*  - ENTRY      WSIFPluggableProviders.getSupportingProviders(/, true)
9384 [main] DEBUG org.apache.wsif.*  - ENTRY       WSIFPluggableProviders.getAllDynamicWSIFProviders()
9414 [main] DEBUG org.apache.wsif.*  - ENTRY           WSIFPluggableProviders.readMETAINFClassNames(file:/C:/wsad-5/eclipse/workspace/ws-wsif/bin/META-INF/services/org.apache.wsif.spi.WSIFProvider)
9424 [main] DEBUG org.apache.wsif.*  - EVENT            WSIFPluggableProviders.readMETAINFClassNames Reading provider class names from URL: file:/C:/wsad-5/eclipse/workspace/ws-wsif/bin/META-INF/services/org.apache.wsif.spi.WSIFProvider
9434 [main] DEBUG org.apache.wsif.*  - EVENT            WSIFPluggableProviders.readMETAINFClassNames Found provider class name: org.apache.wsif.providers.ejb.WSIFDynamicProvider_EJB
9444 [main] DEBUG org.apache.wsif.*  - EVENT            WSIFPluggableProviders.readMETAINFClassNames Found provider class name: org.apache.wsif.providers.java.WSIFDynamicProvider_Java

The columns before the ENTRY/EXIT are configurable in log4j.properties. In the sample above, the [main] shows that all these trace statements were made from the main thread. In a multithreaded application, the trace statements from all threads are interleaved. After the ENTRY/EXIT is the WSIF classname.methodname indented according to stack depth. The hex number in angle brackets (<>) after the method name is the java object id, so it is possible to tell which object this method was run against. Methods which do not have an object id are static methods. After the object id are the parameters passed or returned from that method. Null parameters are represented as <null>. Some WSDL objects are represented as their fully qualified name and their object id. For instance definition({http://mynamespace}MyDefinition,1128e5e0). Some parameters may get traced over multiple lines.

Occasionally a method will be indented by two (or more) spaces than the method that called it, according to the trace. This is demonstrated in the sample trace above, by readMETAINFClassNames being indented by 5 more spaces than getAllDynamicProviders. This is because getAllDynamicProviders calls other private methods which aren't traced, which in turn call readMETAINFClassNames. So the indentation is a true reflection of the WSIF stack depth, but not all private methods get traced.

ENTRY trace statement represents a call to a method. An EXIT statement represents the return from a method. An EVENT statement represents other interesting information which may prove useful when diagnosing problems. An EXCEPTION trace statement represents a java exception at the moment that it is caught by WSIF. An ignored exception also represents a java exception at the moment that it caught by WSIF. The difference between an EXCEPTION and an ignored exception is that an EXCEPTION represents an unexpected problem (in the application, the WSDL, in WSIF or elsewhere), whereas an ignored exception represents an exception that was expected to be thrown and caught routinely as part of WSIF mainline code and does not represent a problem in itself. EXCEPTIONs are accompanied by their stack trace.

WSIF trace statements can be made from classes that are not part of WSIF. Such trace statements have their classname prefixed with their fully qualified package name. Commons-logging supports package-level tracing. That enables trace to be switched on or off for individual packages. This is not supported by WSIF. The only exception to this is tracing of WSIF logging itself. Tracing org.apache.wsif.logging.* enables trace to trace itself. This should be used with caution since traces produced this way are huge and difficult to use to diagnose problems that aren't in trace itself. A trace statement that contains "**** Exception in WSIF trace statement *******" represents a trace statement that itself has a bug in it. Such bad trace statements should not affect the normal operation of WSIF, whether or not trace is on.