protected boolean createPerfLogContextForWSRequest(
      MessageContext context,
      SOAPMessage message,
      PerfLogContextTrackingData perfLogContextTrackingData) {

    logger.debug("handleRequest - createPerfLogContextForWSRequest");

    PerfLogContextHelper.startPerfLogTxnMonitor(perfLogContextTrackingData);

    // This context is deleted when handling the response in handleMessage() or
    // in handleFault() method
    // Note: there may be a chance that the context may not get deleted
    // However that is ok, because if a new context is created on the same
    // thread and if it finds a zombie context, it will be deleted next time around
    //

    PerfLogContextHelper.pushInfoContext(
        PerfLogContextConstants.CALLING_JVM_HOST_ID,
        perfLogContextTrackingData.getCallingJvmHostId());
    PerfLogContextHelper.pushInfoContext(
        PerfLogContextConstants.CALLING_JVM_CLONE_ID,
        perfLogContextTrackingData.getCallingJvmCloneId());
    String tmpValueStr;
    PerfLogContextHelper.pushInfoContext(
        ContextHandlerConstants.PROPERTY_NAME_JAXRPC_INBOUND_URL,
        (tmpValueStr =
            (String)
                context.getProperty(ContextHandlerConstants.PROPERTY_NAME_JAXRPC_INBOUND_URL)));
    PerfLogContextHelper.addToTxnList(tmpValueStr);
    PerfLogContextHelper.pushInfoContext(
        ContextHandlerConstants.PROPERTY_NAME_JAXRPC_SOAP_ACTION,
        (tmpValueStr =
            (String)
                context.getProperty(ContextHandlerConstants.PROPERTY_NAME_JAXRPC_SOAP_ACTION)));
    PerfLogContextHelper.addToTxnList(tmpValueStr);
    PerfLogContextHelper.setUserId(perfLogContextTrackingData.getUserId());
    PerfLogContextHelper.setRequestSessionId(
        perfLogContextTrackingData.getSessionId()); // calling JVM session id if set
    addMessagePropertiesToPerfLogContext(context);

    // add any current filter specific info here.. e.g. from the message
    // data.

    return true;
  }
 @Override
 public boolean handleFault(MessageContext msgContext) {
   String faultMessage = null;
   try {
     faultMessage = getSOAPMessageString(msgContext);
     if (logger.getDebugEnabled()) logger.debug("handleFault: " + faultMessage);
     msgContext.setProperty(ContextHandlerConstants.PROPERTY_NAME_FAULT, new Boolean(true));
     return super.handleFault(msgContext);
   } finally {
     PerfLogContext perfLogContext = PerfLogContextHelper.getCurrentThreadPerfLogContextObject();
     long elapsedTime = getElapsedTime(msgContext);
     PerfLogContextHelper.compensateForOutboundJvmCallExceptionIfAny();
     if (LoggerProperties.getInstance().isPerfLogWSEnabled()
         && (elapsedTime >= LoggerProperties.getInstance().getPerfLogWSThreshold()))
       logPerfMetrics(
           msgContext,
           elapsedTime,
           perfLogContext,
           new Exception("JaxRpcLogContextServerHandler:handleFault"),
           faultMessage);
     PerfLogContextHelper.endPerfLogTxnMonitor();
   }
 }
  @Override
  public boolean handleResponse(MessageContext msgContext) {

    boolean retVal;
    try {
      logger.debug("JaxRpcLogContextServerHandler:handleResponse");
      if (LoggerProperties.getInstance().isPerfLogWSCacheSOAPMessage())
        addSOAPMessageStringToPerfLogContextRequestData(
            "JaxRpcServerSOAPResponse", getSOAPMessageString(msgContext));

      retVal = super.handleResponse(msgContext);

    } finally {
      PerfLogContext perfLogContext = PerfLogContextHelper.getCurrentThreadPerfLogContextObject();
      long elapsedTime = getElapsedTime(msgContext);
      PerfLogContextHelper.compensateForOutboundJvmCallExceptionIfAny();
      if (LoggerProperties.getInstance().isPerfLogWSEnabled()
          && (elapsedTime >= LoggerProperties.getInstance().getPerfLogWSThreshold()))
        logPerfMetrics(msgContext, elapsedTime, perfLogContext, null, null);
      PerfLogContextHelper.endPerfLogTxnMonitor();
    }

    return retVal;
  }