package org.atricore.idbus.capabilities.spmlr2.main.binding.logging; import oasis.names.tc.spml._2._0.RequestType; import oasis.names.tc.spml._2._0.ResponseType; import org.apache.camel.Message; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.atricore.idbus.capabilities.spmlr2.main.util.XmlUtils; import org.atricore.idbus.kernel.main.mediation.camel.component.binding.CamelMediationMessage; import org.atricore.idbus.kernel.main.mediation.camel.logging.LogMessageBuilder; /** * @author <a href=mailto:sgonzalez@atricore.org>Sebastian Gonzalez Oyuela</a> */ public class SpmlR2LogMessageBuilder implements LogMessageBuilder { private static final Log logger = LogFactory.getLog(SpmlR2LogMessageBuilder.class); public boolean canHandle(Message message) { if (!(message instanceof CamelMediationMessage)) return false; CamelMediationMessage samlMsg = (CamelMediationMessage) message; if (samlMsg.getMessage() == null) { logger.trace("No message found in mediation message : " + samlMsg.getMessageId()); return false; } Object content = samlMsg.getMessage().getContent(); if (content == null) { logger.trace("No message content found in mediation message : " + samlMsg.getMessageId()); return false; } if (content instanceof RequestType) { return true; } else if (content instanceof ResponseType) { return true; } return false; } public String getType() { return "saml2"; } public String buildLogMessage(Message message) { try { StringBuffer logMsg = new StringBuffer(); CamelMediationMessage samlMsg = (CamelMediationMessage) message; if (samlMsg.getMessage() == null) { logger.warn("No message found in mediation message : " + samlMsg.getMessageId()); return null; } Object content = samlMsg.getMessage().getContent(); if (content instanceof RequestType) { logMsg.append(XmlUtils.marshallSpmlR2Request((RequestType) content, false)); } else if (content instanceof ResponseType) { logMsg.append(XmlUtils.marshallSpmlR2Response((ResponseType) content, false)); } else if (content == null) { logger.warn("No Message content"); } else { // TODO : Support Atricore SSO Messages logger.warn("Unknown Message content " + content); } return logMsg.toString(); } catch (Exception e) { logger.error("Cannot generate mediation log message: " + e.getMessage(), e); return null; } } }