/ Published in: Java
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
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 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{ } 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()); 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); .getAttribute("javax.servlet.request.X509Certificate"); if (x509Certificates != null && x509Certificates.length > 0) { log.debug("Total count of X509Certificate: "+x509Certificates.length); 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"); } };