Revision: 20895
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 30, 2009 09:34 by sergheiistrati
Initial Code
package org.apache.axis.handlers;
import java.security.cert.X509Certificate;
import javax.servlet.http.HttpServletRequest;
import org.apache.axis.AxisFault;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
/**
* A simple Handler which logs the client certificate, request and response messages on INFO level
*
* To use this, deploy it in response flows (global, service, or transport).
* If is deployed in both response and request flows the elapsed time will be logged in milliseconds.
*
* Example for service use: <br/>
* <handler name="myHandler" type="java:org.apache.axis.handlers.MyHandler" /> <br/>
* <service name="..." provider="java:RPC"> <br/>
* <parameter name="..." value="..." /> <br/>
* <br/>
* .... <br/>
* <br/>
* <requestFlow> <br/>
* <handler type="myHandler" /> <br/>
* </requestFlow> <br/>
* <responseFlow> <br/>
* <handler type="myHandler" /> <br/>
* </responseFlow> <br/>
* </service> <br/>
*
*
*/
public class MyHandler extends BasicHandler {
private static final String SEPARATOR = System.getProperty("line.separator");
private static final long serialVersionUID = -1511939658630576004L;
protected static Log log = LogFactory.getLog(MyHandler.class.getName());
long start = -1;
@Override
public void invoke(MessageContext msgContext) throws AxisFault {
log.debug("Enter: MyHandler::invoke");
if (msgContext.getPastPivot()) {
logMessages(msgContext);
}else{
start = System.currentTimeMillis();
}
log.debug("Exit: MyHandler::invoke");
}
private void logMessages(MessageContext msgContext) throws AxisFault {
log.debug("Enter: MyHandler::logMessages");
try {
Message inMsg = msgContext.getRequestMessage();
Message outMsg = msgContext.getResponseMessage();
StringBuilder str = new StringBuilder();
str.append("--- START ---").append(SEPARATOR);
logCertificate(msgContext, str);
if(start != -1){
str.append("Elapsed Time ms: " + (System.currentTimeMillis() - start)).append(SEPARATOR).append(SEPARATOR);
}
str.append("Transport URL: " + msgContext.getProperty("transport.url")).append(SEPARATOR).append(SEPARATOR);
str.append("Request Message: " + inMsg.getSOAPPartAsString()).append(SEPARATOR).append(SEPARATOR);
str.append("Response Message: " + outMsg.getSOAPPartAsString()).append(SEPARATOR);
str.append("--- END ---").append(SEPARATOR);
log.info(str.toString());
} catch (Exception e) {
log.error(e);
throw AxisFault.makeFault(e);
}
log.debug("Exit: MyHandler::logMessages");
}
private void logCertificate(MessageContext messageContext, StringBuilder str) {
log.debug("Enter: MyHandler::logCertificate");
HttpServletRequest httpServletRequest = (HttpServletRequest) messageContext
.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
X509Certificate[] x509Certificates = (X509Certificate[]) httpServletRequest
.getAttribute("javax.servlet.request.X509Certificate");
if (x509Certificates != null && x509Certificates.length > 0) {
log.debug("Total count of X509Certificate: "+x509Certificates.length);
X509Certificate cert = x509Certificates[0];
str.append("Certificate: " + cert.getSubjectX500Principal().getName()).append(SEPARATOR).append(SEPARATOR);
}
log.debug("Exit: MyHandler::logCertificate");
}
@Override
public void onFault(MessageContext msgContext) {
log.debug("Enter: MyHandler::onFault");
try {
logMessages(msgContext);
} catch (AxisFault e) {
log.error("AxisFault exception", e);
}
log.debug("Exit: MyHandler::onFault");
}
};
Initial URL
Initial Description
Initial Title
Axis log handler
Initial Tags
Initial Language
Java