[java-opensaml] branch main updated: OSJ-354: Suffix the PROTOCOL_MESSAGE category with .SAML

Brent Putman putmanb at georgetown.edu
Wed Aug 2 23:28:25 UTC 2023


This is an automated email from the git hooks/post-receive script.

putmanb pushed a commit to branch main
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=97b5d9c87bbbe90fd9c9ae067408beb20f78a52c

The following commit(s) were added to refs/heads/main by this push:
     new 97b5d9c87 OSJ-354: Suffix the PROTOCOL_MESSAGE category with .SAML
97b5d9c87 is described below

commit 97b5d9c87bbbe90fd9c9ae067408beb20f78a52c
Author: Brent Putman <putmanb at georgetown.edu>
AuthorDate: Tue Aug 1 23:17:44 2023 -0400

    OSJ-354: Suffix the PROTOCOL_MESSAGE category with .SAML
---
 .../messaging/decoder/AbstractMessageDecoder.java  |  97 +++++++++++++++++-
 .../BaseHttpClientResponseXMLMessageDecoder.java   |  49 +++------
 .../BaseHttpServletRequestXMLMessageDecoder.java   |  49 +++------
 .../messaging/encoder/AbstractMessageEncoder.java  | 109 +++++++++++++++++++--
 .../BaseHttpClientRequestXMLMessageEncoder.java    |  44 +++------
 .../BaseHttpServletResponseXMLMessageEncoder.java  |  42 +++-----
 .../impl/BaseSAMLHttpServletRequestDecoder.java    |  30 ++++++
 .../impl/BaseSAMLHttpServletResponseEncoder.java   |  30 ++++++
 .../binding/decoding/impl/HTTPArtifactDecoder.java |   4 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |   4 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |   9 ++
 .../impl/HttpClientResponseSOAP11Decoder.java      |   1 +
 .../encoding/impl/BaseSAML1MessageEncoder.java     |   4 +-
 .../binding/encoding/impl/HTTPSOAP11Encoder.java   |   8 ++
 .../impl/HttpClientRequestSOAP11Encoder.java       |   6 ++
 .../binding/decoding/impl/HTTPArtifactDecoder.java |   4 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |   4 +-
 .../decoding/impl/HTTPRedirectDeflateDecoder.java  |   4 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |   6 ++
 .../impl/HttpClientResponseSOAP11Decoder.java      |   1 +
 .../encoding/impl/BaseSAML2MessageEncoder.java     |   4 +-
 .../binding/encoding/impl/HTTPSOAP11Encoder.java   |   3 +-
 .../impl/HttpClientRequestSOAP11Encoder.java       |   6 ++
 .../src/test/resources/logback-test.xml            |   6 +-
 .../http/impl/HttpClientResponseSOAP11Decoder.java |   6 ++
 .../http/impl/HttpClientRequestSOAP11Encoder.java  |   2 +
 .../decoder/http/impl/HTTPSOAP11Decoder.java       |   8 +-
 .../encoder/http/impl/HTTPSOAP11Encoder.java       |   2 +
 .../src/test/resources/logback-test.xml            |   6 +-
 29 files changed, 393 insertions(+), 155 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/AbstractMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/AbstractMessageDecoder.java
index d495a9bc1..5c406e73e 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/AbstractMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/AbstractMessageDecoder.java
@@ -14,27 +14,42 @@
 
 package org.opensaml.messaging.decoder;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
+import org.slf4j.Logger;
 
 import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.component.UnmodifiableComponent;
+import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Abstract message decoder.
  */
 public abstract class AbstractMessageDecoder extends AbstractInitializableComponent
         implements MessageDecoder, UnmodifiableComponent {
+    
+    @Nonnull public static final String BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY = "PROTOCOL_MESSAGE";
+    
+    /** Used to log protocol messages. */
+    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY);
+
+    /** Class logger. */
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractMessageDecoder.class);
 
     /** Message context. */
     @Nullable private MessageContext messageContext;
+    
+    /** The configured logging category for protocol messages. */
+    @Nonnull private String protocolMessageLoggerCategory = BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY;
 
     /** {@inheritDoc} */
     @Nullable public MessageContext getMessageContext() {
         return messageContext;
     }
-
+    
     /**
      * Set the message context.
      * 
@@ -48,6 +63,85 @@ public abstract class AbstractMessageDecoder extends AbstractInitializableCompon
     public void decode() throws MessageDecodingException {
         checkComponentActive();
         doDecode();
+        logDecodedMessage();
+    }
+    
+    /**
+     * Get the protocol message logger.
+     * 
+     * @return The protocol message logger
+     */
+    @Nonnull protected Logger getProtocolMessageLogger() {
+        return protocolMessageLog;
+    }
+    
+    /**
+     * Get the configured logging category for protocol messages.
+     * 
+     * @return the logging category
+     */
+    @Nonnull protected String getProtocolMessageLoggerCategory() {
+        return protocolMessageLoggerCategory;
+    }
+    
+    /**
+     * Set the configured logging category for protocol messages.
+     * 
+     * <p>
+     * If null, {@link AbstractMessageDecoder#BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY} will be used.
+     * </p>
+     * 
+     * @param category the logging category
+     */
+    protected void setProtocolMessageLoggerCategory(@Nullable final String category) {
+       final String trimmed = StringSupport.trimOrNull(category);
+       if (trimmed != null) {
+           protocolMessageLoggerCategory = trimmed;
+       } else {
+           protocolMessageLoggerCategory = BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY;
+       }
+       protocolMessageLog = LoggerFactory.getLogger(protocolMessageLoggerCategory);
+    }
+    
+    /**
+     * Log the decoded message to the protocol message logger.
+     */
+    protected void logDecodedMessage() {
+        if (protocolMessageLog.isDebugEnabled() ){
+            final String serializedMessage = serializeMessageForLogging(getMessageToLog());
+            if (serializedMessage == null) {
+                log.debug("Serialized decoded protocol message was null, nothing to log");
+                return;
+            }
+            
+            protocolMessageLog.debug("\n" + serializedMessage);
+        }
+    }
+    
+    /**
+     * Get the XMLObject which will be logged as the protocol message.
+     * 
+     * @return the XMLObject message considered to be the protocol message for logging purposes
+     */
+    @Nullable protected Object getMessageToLog() {
+        final MessageContext mc = getMessageContext();
+        return mc != null ? mc.getMessage() : null;
+    }
+    
+    /**
+     * Serialize the message for logging purposes.
+     * 
+     * <p>
+     * Default implementation is to return the message object's {@link #toString()},
+     * but subclasses should override if a better message-specific serialization mechanism exists.
+     * </p>
+     * 
+     * @param message the message to serialize
+     * 
+     * @return the serialized message, or null if message can not be serialized
+     */
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        return message != null ? message.toString() : null;
     }
 
     /**
@@ -57,5 +151,6 @@ public abstract class AbstractMessageDecoder extends AbstractInitializableCompon
      * @throws MessageDecodingException thrown if there is a problem decoding the message
      */
     protected abstract void doDecode() throws MessageDecodingException;
+    
 
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/BaseHttpClientResponseXMLMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/BaseHttpClientResponseXMLMessageDecoder.java
index 121c837b9..a908792de 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/BaseHttpClientResponseXMLMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/BaseHttpClientResponseXMLMessageDecoder.java
@@ -32,10 +32,8 @@ import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.io.UnmarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
-import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.slf4j.Logger;
-
 import org.w3c.dom.Element;
 
 /**
@@ -44,9 +42,6 @@ import org.w3c.dom.Element;
  */
 public abstract class BaseHttpClientResponseXMLMessageDecoder extends AbstractHttpClientResponseMessageDecoder {
     
-    /** Used to log protocol messages. */
-    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
-
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(BaseHttpClientResponseXMLMessageDecoder.class);
 
@@ -63,8 +58,6 @@ public abstract class BaseHttpClientResponseXMLMessageDecoder extends AbstractHt
         log.debug("Beginning to decode message from HttpResponse");
         
         super.decode();
-        
-        logDecodedMessage();
 
         log.debug("Successfully decoded message from HttpResponse");
     }
@@ -97,35 +90,21 @@ public abstract class BaseHttpClientResponseXMLMessageDecoder extends AbstractHt
             throw new ComponentInitializationException("Parser pool cannot be null");
         }
     }
-
-    /**
-     * Log the decoded message to the protocol message logger.
-     */
-    protected void logDecodedMessage() {
-        if (protocolMessageLog.isDebugEnabled() ){
-            final Object message = getMessageToLog();
-            if (message == null || !(message instanceof XMLObject)) {
-                log.warn("Decoded message was null or unsupported, nothing to log");
-                return;
-            }
-            
-            try {
-                final Element dom = XMLObjectSupport.marshall((XMLObject) message);
-                protocolMessageLog.debug("\n" + SerializeSupport.prettyPrintXML(dom));
-            } catch (final MarshallingException e) {
-                log.error("Unable to marshall message for logging purposes", e);
-            }
-        }
-    }
     
-    /**
-     * Get the XMLObject which will be logged as the protocol message.
-     * 
-     * @return the XMLObject message considered to be the protocol message for logging purposes
-     */
-    @Nullable protected Object getMessageToLog() {
-        final MessageContext mc = getMessageContext();
-        return mc != null ? mc.getMessage() : null;
+    /** {@inheritDoc} */
+    @Override
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        if (message == null || !XMLObject.class.isInstance(message)) {
+            log.debug("Message was null or unsupported, can not serialize");
+            return null;
+        }
+        try {
+            final Element dom = XMLObjectSupport.marshall(XMLObject.class.cast(message));
+            return SerializeSupport.prettyPrintXML(dom);     
+        } catch (MarshallingException e) {
+            log.error("Unable to marshall message for logging purposes", e);
+            return null;
+        }
     }
 
     /**
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/BaseHttpServletRequestXMLMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/BaseHttpServletRequestXMLMessageDecoder.java
index fc20af3e3..11683367d 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/BaseHttpServletRequestXMLMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/BaseHttpServletRequestXMLMessageDecoder.java
@@ -24,11 +24,9 @@ import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.io.UnmarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
-import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecoder;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.slf4j.Logger;
-
 import org.w3c.dom.Element;
 
 import jakarta.servlet.http.HttpServletRequest;
@@ -45,9 +43,6 @@ import net.shibboleth.shared.xml.XMLParserException;
  */
 public abstract class BaseHttpServletRequestXMLMessageDecoder extends AbstractHttpServletRequestMessageDecoder {
     
-    /** Used to log protocol messages. */
-    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
-
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(BaseHttpServletRequestXMLMessageDecoder.class);
 
@@ -74,8 +69,6 @@ public abstract class BaseHttpServletRequestXMLMessageDecoder extends AbstractHt
         
         super.decode();
         
-        logDecodedMessage();
-
         log.debug("Successfully decoded message from HttpServletRequest.");
     }
     
@@ -107,35 +100,21 @@ public abstract class BaseHttpServletRequestXMLMessageDecoder extends AbstractHt
             throw new ComponentInitializationException("Parser pool cannot be null");
         }
     }
-
-    /**
-     * Log the decoded message to the protocol message logger.
-     */
-    protected void logDecodedMessage() {
-        if (protocolMessageLog.isDebugEnabled() ){
-            final Object message = getMessageToLog();
-            if (!(message instanceof XMLObject)) {
-                log.warn("Decoded message was null or unsupported, nothing to log");
-                return;
-            }
-            
-            try {
-                final Element dom = XMLObjectSupport.marshall((XMLObject) message);
-                protocolMessageLog.debug("\n" + SerializeSupport.prettyPrintXML(dom));
-            } catch (final MarshallingException e) {
-                log.error("Unable to marshall message for logging purposes", e);
-            }
-        }
-    }
     
-    /**
-     * Get the XMLObject which will be logged as the protocol message.
-     * 
-     * @return the XMLObject message considered to be the protocol message for logging purposes
-     */
-    @Nullable protected Object getMessageToLog() {
-        final MessageContext mc = getMessageContext();
-        return mc != null ? mc.getMessage() : null;
+    /** {@inheritDoc} */
+    @Override
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        if (message == null || !XMLObject.class.isInstance(message)) {
+            log.debug("Message was null or unsupported, can not serialize");
+            return null;
+        }
+        try {
+            final Element dom = XMLObjectSupport.marshall(XMLObject.class.cast(message));
+            return SerializeSupport.prettyPrintXML(dom);     
+        } catch (MarshallingException e) {
+            log.error("Unable to marshall message for logging purposes", e);
+            return null;
+        }
     }
 
     /**
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/AbstractMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/AbstractMessageEncoder.java
index 024cc1fb6..ada6cebd6 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/AbstractMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/AbstractMessageEncoder.java
@@ -14,23 +14,39 @@
 
 package org.opensaml.messaging.encoder;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
+import org.opensaml.messaging.decoder.AbstractMessageDecoder;
+import org.slf4j.Logger;
 
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.component.AbstractInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.component.UnmodifiableComponent;
+import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Abstract message encoder.
  */
 public abstract class AbstractMessageEncoder extends AbstractInitializableComponent
         implements MessageEncoder, UnmodifiableComponent {
+    
+    @Nonnull public static final String BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY = "PROTOCOL_MESSAGE";
+    
+    /** Used to log protocol messages. */
+    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY);
+    
+    /** Class logger. */
+    @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractMessageEncoder.class);
 
     /** The message context. */
     @NonnullAfterInit private MessageContext messageContext;
+    
+    /** The configured logging category for protocol messages. */
+    @Nonnull private String protocolMessageLoggerCategory = BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY;
 
     /** {@inheritDoc} */
     public synchronized void setMessageContext(@Nullable final MessageContext context) {
@@ -38,13 +54,7 @@ public abstract class AbstractMessageEncoder extends AbstractInitializableCompon
 
         messageContext = context;
     }
-
-    /** {@inheritDoc} */
-    public void encode() throws MessageEncodingException {
-        checkComponentActive();
-        doEncode();
-    }
-
+    
     /** {@inheritDoc}.
      * 
      * Default implementation is a no-op.
@@ -70,6 +80,91 @@ public abstract class AbstractMessageEncoder extends AbstractInitializableCompon
             throw new ComponentInitializationException("Message context cannot be null");
         }
     }
+    
+    /** {@inheritDoc} */
+    public void encode() throws MessageEncodingException {
+        checkComponentActive();
+        doEncode();
+        logEncodedMessage();
+    }
+    
+    /**
+     * Get the protocol message logger.
+     * 
+     * @return The protocol message logger
+     */
+    @Nonnull protected Logger getProtocolMessageLogger() {
+        return protocolMessageLog;
+    }
+
+    /**
+     * Get the configured logging category for protocol messages.
+     * 
+     * @return the logging category
+     */
+    @Nonnull protected String getProtocolMessageLoggerCategory() {
+        return protocolMessageLoggerCategory;
+    }
+    
+    /**
+     * Set the configured logging category for protocol messages.
+     * 
+     * <p>
+     * If null, {@link AbstractMessageDecoder#BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY} will be used.
+     * </p>
+     * 
+     * @param category the logging category
+     */
+    protected void setProtocolMessageLoggerCategory(@Nullable final String category) {
+       final String trimmed = StringSupport.trimOrNull(category);
+       if (trimmed != null) {
+           protocolMessageLoggerCategory = trimmed;
+       } else {
+           protocolMessageLoggerCategory = BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY;
+       }
+       protocolMessageLog = LoggerFactory.getLogger(protocolMessageLoggerCategory);
+    }
+
+    /**
+     * Log the encoded message to the protocol message logger.
+     */
+    protected void logEncodedMessage() {
+        if (protocolMessageLog.isDebugEnabled() ){
+            final String serializedMessage = serializeMessageForLogging(getMessageToLog());
+            if (serializedMessage == null) {
+                log.debug("Serialized encoded protocol message was null, nothing to log");
+                return;
+            }
+            
+            protocolMessageLog.debug("\n" + serializedMessage);
+        }
+    }
+    
+    /**
+     * Get the XMLObject which will be logged as the protocol message.
+     * 
+     * @return the XMLObject message considered to be the protocol message for logging purposes
+     */
+    @Nullable protected Object getMessageToLog() {
+        final MessageContext mc = getMessageContext();
+        return mc != null ? mc.getMessage() : null;
+    }
+    
+    /**
+     * Serialize the message for logging purposes.
+     * 
+     * <p>
+     * Default implementation is to return the message object's {@link #toString()},
+     * but subclasses should override if a better message-specific serialization mechanism exists.
+     * </p>
+     * 
+     * @param message the message to serialize
+     * 
+     * @return the serialized message, or null if message can not be serialized
+     */
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        return message != null ? message.toString() : null;
+    }
 
     /**
      * Performs the encoding logic. By the time this is called, this encoder has already been initialized and checked to
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/BaseHttpClientRequestXMLMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/BaseHttpClientRequestXMLMessageEncoder.java
index 7011982de..6a566243a 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/BaseHttpClientRequestXMLMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/BaseHttpClientRequestXMLMessageEncoder.java
@@ -53,40 +53,24 @@ public abstract class BaseHttpClientRequestXMLMessageEncoder  extends AbstractHt
         }
 
         super.encode();
-
-        logEncodedMessage();
         
         log.debug("Successfully encoded message.");
     }
-
-    /**
-     * Log the encoded message to the protocol message logger.
-     */
-    protected void logEncodedMessage() {
-        if (protocolMessageLog.isDebugEnabled() ){
-            final Object message = getMessageToLog();
-            if (message == null || !(message instanceof XMLObject)) {
-                log.warn("Encoded message was null or unsupported, nothing to log");
-                return;
-            }
-            
-            try {
-                final Element dom = XMLObjectSupport.marshall((XMLObject) message);
-                protocolMessageLog.debug("\n" + SerializeSupport.prettyPrintXML(dom));
-            } catch (final MarshallingException e) {
-                log.error("Unable to marshall message for logging purposes", e);
-            }
-        }
-    }
     
-    /**
-     * Get the XMLObject which will be logged as the protocol message.
-     * 
-     * @return the XMLObject message considered to be the protocol message for logging purposes
-     */
-    @Nullable protected Object getMessageToLog() {
-        final MessageContext mc = getMessageContext();
-        return mc != null ? mc.getMessage() : null;
+    /** {@inheritDoc} */
+    @Override
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        if (message == null || !XMLObject.class.isInstance(message)) {
+            log.debug("Message was null or unsupported, can not serialize");
+            return null;
+        }
+        try {
+            final Element dom = XMLObjectSupport.marshall(XMLObject.class.cast(message));
+            return SerializeSupport.prettyPrintXML(dom);     
+        } catch (MarshallingException e) {
+            log.error("Unable to marshall message for logging purposes", e);
+            return null;
+        }
     }
 
     /**
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/BaseHttpServletResponseXMLMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/BaseHttpServletResponseXMLMessageEncoder.java
index 69adec509..77a2318b8 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/BaseHttpServletResponseXMLMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/BaseHttpServletResponseXMLMessageEncoder.java
@@ -53,40 +53,24 @@ public abstract class BaseHttpServletResponseXMLMessageEncoder  extends Abstract
         }
 
         super.encode();
-
-        logEncodedMessage();
         
         log.debug("Successfully encoded message.");
     }
 
-    /**
-     * Log the encoded message to the protocol message logger.
-     */
-    protected void logEncodedMessage() {
-        if (protocolMessageLog.isDebugEnabled() ){
-            final Object message = getMessageToLog();
-            if (message == null || !(message instanceof XMLObject)) {
-                log.warn("Encoded message was null or unsupported, nothing to log");
-                return;
-            }
-            
-            try {
-                final Element dom = XMLObjectSupport.marshall((XMLObject) message);
-                protocolMessageLog.debug("\n" + SerializeSupport.prettyPrintXML(dom));
-            } catch (final MarshallingException e) {
-                log.error("Unable to marshall message for logging purposes", e);
-            }
+    /** {@inheritDoc} */
+    @Override
+    @Nullable protected String serializeMessageForLogging(@Nullable final Object message) {
+        if (message == null || !XMLObject.class.isInstance(message)) {
+            log.debug("Message was null or unsupported, can not serialize");
+            return null;
+        }
+        try {
+            final Element dom = XMLObjectSupport.marshall(XMLObject.class.cast(message));
+            return SerializeSupport.prettyPrintXML(dom);     
+        } catch (MarshallingException e) {
+            log.error("Unable to marshall message for logging purposes", e);
+            return null;
         }
-    }
-    
-    /**
-     * Get the XMLObject which will be logged as the protocol message.
-     * 
-     * @return the XMLObject message considered to be the protocol message for logging purposes
-     */
-    @Nullable protected Object getMessageToLog() {
-        final MessageContext mc = getMessageContext();
-        return mc != null ? mc.getMessage() : null;
     }
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletRequestDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletRequestDecoder.java
new file mode 100644
index 000000000..224fce999
--- /dev/null
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletRequestDecoder.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.saml.common.binding.impl;
+
+import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
+
+/**
+ * Abstract base decoder for SAML decoders.
+ */
+public abstract class BaseSAMLHttpServletRequestDecoder extends BaseHttpServletRequestXMLMessageDecoder {
+
+    /** Constructor. */
+    public BaseSAMLHttpServletRequestDecoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
+}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletResponseEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletResponseEncoder.java
new file mode 100644
index 000000000..bf7c4e7a3
--- /dev/null
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/impl/BaseSAMLHttpServletResponseEncoder.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opensaml.saml.common.binding.impl;
+
+import org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder;
+
+/**
+ * Abstract base encoder for SAML encoders.
+ */
+public abstract class BaseSAMLHttpServletResponseEncoder extends BaseHttpServletResponseXMLMessageEncoder {
+
+    /** Constructor. */
+    public BaseSAMLHttpServletResponseEncoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
+}
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
index 0eb52679e..aa5cb9c4e 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -19,10 +19,10 @@ import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
-import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
 import org.opensaml.saml.common.binding.BindingDescriptor;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.slf4j.Logger;
@@ -37,7 +37,7 @@ import net.shibboleth.shared.primitive.StringSupport;
  * 
  * <strong>NOTE: This decoder is not yet implemented.</strong>
  */
-public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder 
+public class HTTPArtifactDecoder extends BaseSAMLHttpServletRequestDecoder
         implements SAMLMessageDecoder {
 
     /** Class logger. */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
index 38ed2effa..37fe25f0a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoder.java
@@ -21,11 +21,11 @@ import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
-import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.BindingDescriptor;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.opensaml.saml.saml1.core.ResponseAbstractType;
@@ -40,7 +40,7 @@ import net.shibboleth.shared.primitive.LoggerFactory;
 /**
  * SAML 1.X HTTP POST message decoder.
  */
-public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
+public class HTTPPostDecoder extends BaseSAMLHttpServletRequestDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostDecoder.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
index ce7ce4a43..c4c709dfb 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11Decoder.java
@@ -44,6 +44,15 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
     /** Optional {@link BindingDescriptor} to inject into {@link SAMLBindingContext} created. */
     @Nullable private BindingDescriptor bindingDescriptor;
 
+    /**
+     * Constructor.
+     *
+     */
+    public HTTPSOAP11Decoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
     /** {@inheritDoc} */
     @Nonnull @NotEmpty public String getBindingURI() {
         return SAMLConstants.SAML1_SOAP11_BINDING_URI;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
index e09cb5c92..7f0d8fb93 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
@@ -48,6 +48,7 @@ public class HttpClientResponseSOAP11Decoder
      */
     public HttpClientResponseSOAP11Decoder() {
         setBodyHandler(new SAMLSOAPDecoderBodyHandler());
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/BaseSAML1MessageEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/BaseSAML1MessageEncoder.java
index d1877509e..d1a21a79f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/BaseSAML1MessageEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/BaseSAML1MessageEncoder.java
@@ -20,15 +20,15 @@ import javax.annotation.Nonnull;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
-import org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder;
 import org.opensaml.saml.common.binding.BindingException;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletResponseEncoder;
 
 /**
  * Base class for SAML 1 message encoders.
  */
-public abstract class BaseSAML1MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder 
+public abstract class BaseSAML1MessageEncoder extends BaseSAMLHttpServletResponseEncoder
         implements SAMLMessageEncoder {
 
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11Encoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11Encoder.java
index 7a518e440..83755c97d 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11Encoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11Encoder.java
@@ -26,6 +26,14 @@ import org.opensaml.saml.common.xml.SAMLConstants;
 public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.impl.HTTPSOAP11Encoder
         implements SAMLMessageEncoder {
     
+    
+    
+    /** Constructor. */
+    public HTTPSOAP11Encoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
     /** {@inheritDoc} */
     @Override
     @Nullable protected String getSOAPAction() {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
index 3c45d7500..e4cd88006 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
@@ -27,6 +27,12 @@ public class HttpClientRequestSOAP11Encoder
         extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder
         implements SAMLMessageEncoder {
     
+    /** Constructor. */
+    public HttpClientRequestSOAP11Encoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
     /** {@inheritDoc} */
     @Override
     @Nullable protected String getSOAPAction() {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
index ca970ed80..3bacf4702 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPArtifactDecoder.java
@@ -25,13 +25,13 @@ import org.opensaml.messaging.MessageException;
 import org.opensaml.messaging.context.InOutOperationContext;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
-import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.BindingDescriptor;
 import org.opensaml.saml.common.binding.EndpointResolver;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.artifact.SAMLSourceLocationArtifact;
 import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder;
 import org.opensaml.saml.common.binding.impl.DefaultEndpointResolver;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.messaging.soap.SAMLSOAPClientContextBuilder;
@@ -78,7 +78,7 @@ import net.shibboleth.shared.security.IdentifierGenerationStrategy.ProviderType;
 /** 
  * SAML 2 Artifact Binding decoder, support both HTTP GET and POST.
  */
-public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
+public class HTTPArtifactDecoder extends BaseSAMLHttpServletRequestDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPArtifactDecoder.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
index 64041defc..f74d0668a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoder.java
@@ -23,11 +23,11 @@ import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
-import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.BindingDescriptor;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.slf4j.Logger;
@@ -41,7 +41,7 @@ import net.shibboleth.shared.codec.DecodingException;
 import net.shibboleth.shared.primitive.LoggerFactory;
 
 /** Message decoder implementing the SAML 2.0 HTTP POST binding. */
-public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
+public class HTTPPostDecoder extends BaseSAMLHttpServletRequestDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostDecoder.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
index ae569d549..f41847b54 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoder.java
@@ -25,11 +25,11 @@ import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
-import org.opensaml.messaging.decoder.servlet.BaseHttpServletRequestXMLMessageDecoder;
 import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.BindingDescriptor;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletRequestDecoder;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
 import org.slf4j.Logger;
@@ -47,7 +47,7 @@ import net.shibboleth.shared.primitive.StringSupport;
  * 
  * This decoder only supports DEFLATE compression.
  */
-public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
+public class HTTPRedirectDeflateDecoder extends BaseSAMLHttpServletRequestDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPRedirectDeflateDecoder.class);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
index 3724d883b..1bee20cd5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11Decoder.java
@@ -44,6 +44,12 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
     /** Optional {@link BindingDescriptor} to inject into {@link SAMLBindingContext} created. */
     @Nullable private BindingDescriptor bindingDescriptor;
     
+    /** Constructor. */
+    public HTTPSOAP11Decoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
     /** {@inheritDoc} */
     @Nonnull @NotEmpty public String getBindingURI() {
         return SAMLConstants.SAML2_SOAP11_BINDING_URI;
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
index 7d2619682..7931d33fa 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HttpClientResponseSOAP11Decoder.java
@@ -48,6 +48,7 @@ public class HttpClientResponseSOAP11Decoder
      */
     public HttpClientResponseSOAP11Decoder() {
         setBodyHandler(new SAMLSOAPDecoderBodyHandler());
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/BaseSAML2MessageEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/BaseSAML2MessageEncoder.java
index d7ee9b452..04534a30c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/BaseSAML2MessageEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/BaseSAML2MessageEncoder.java
@@ -20,15 +20,15 @@ import javax.annotation.Nonnull;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
-import org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder;
 import org.opensaml.saml.common.binding.BindingException;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
+import org.opensaml.saml.common.binding.impl.BaseSAMLHttpServletResponseEncoder;
 
 /**
  * Base class for SAML 2 message encoders.
  */
-public abstract class BaseSAML2MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder 
+public abstract class BaseSAML2MessageEncoder extends BaseSAMLHttpServletResponseEncoder
         implements SAMLMessageEncoder {
     
     /**
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11Encoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11Encoder.java
index 272f48d3b..5e83a5fd2 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11Encoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11Encoder.java
@@ -30,7 +30,8 @@ public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.imp
 
     /** Constructor. */
     public HTTPSOAP11Encoder() {
-        
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
index 99f447ee4..7ba79efc7 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HttpClientRequestSOAP11Encoder.java
@@ -29,6 +29,12 @@ public class HttpClientRequestSOAP11Encoder
         extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder
         implements SAMLMessageEncoder {
 
+    /** Constructor. */
+    public HttpClientRequestSOAP11Encoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SAML");
+    }
+
     /** {@inheritDoc} */
     @Nonnull @NotEmpty public String getBindingURI() {
         return SAMLConstants.SAML2_SOAP11_BINDING_URI;
diff --git a/opensaml-saml-impl/src/test/resources/logback-test.xml b/opensaml-saml-impl/src/test/resources/logback-test.xml
index ce1720f5c..4bcd9ca4a 100644
--- a/opensaml-saml-impl/src/test/resources/logback-test.xml
+++ b/opensaml-saml-impl/src/test/resources/logback-test.xml
@@ -3,7 +3,7 @@
 
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>%-5level %logger{0} - %msg%n</pattern>
+            <pattern>%-5level %logger - %msg%n</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>
@@ -83,6 +83,10 @@
         <level value="INFO"/>
     </logger>
 
+    <logger name="PROTOCOL_MESSAGE">
+        <level value="DEBUG"/>
+    </logger>
+
     <root>
         <appender-ref ref="STDOUT"/>
         <level value="WARN"/>
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
index db7babfc5..1b33e7afc 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11Decoder.java
@@ -66,6 +66,12 @@ public class HttpClientResponseSOAP11Decoder extends BaseHttpClientResponseXMLMe
     /** Message handler to use in processing the message body. */
     @NonnullAfterInit private MessageHandler bodyHandler;
     
+    /** Constructor. */
+    public HttpClientResponseSOAP11Decoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SOAP");
+    }
+
     /**
      * Get the configured body handler MessageHandler.
      * 
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
index 907a2d6ee..45d013065 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11Encoder.java
@@ -62,10 +62,12 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
     
     /** Constructor. */
     public HttpClientRequestSOAP11Encoder() {
+        super();
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
         envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.<Envelope>ensureBuilder(
                 Envelope.DEFAULT_ELEMENT_NAME);
         bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.<Body>ensureBuilder(Body.DEFAULT_ELEMENT_NAME);
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SOAP");
     }
     
     /** {@inheritDoc}
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
index f042ea376..485dcd1d4 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11Decoder.java
@@ -67,7 +67,13 @@ public class HTTPSOAP11Decoder extends BaseHttpServletRequestXMLMessageDecoder {
     
     /** Message handler to use in processing the message body. */
     @NonnullAfterInit private MessageHandler bodyHandler;
-    
+
+    /** Constructor. */
+    public HTTPSOAP11Decoder() {
+        super();
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SOAP");
+    }
+
     /**
      * Get the configured body handler MessageHandler.
      * 
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
index f2c04cfa7..771376d22 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11Encoder.java
@@ -59,10 +59,12 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
     
     /** Constructor. */
     public HTTPSOAP11Encoder() {
+        super();
         final XMLObjectBuilderFactory builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
         envBuilder = (SOAPObjectBuilder<Envelope>) builderFactory.<Envelope>ensureBuilder(
                 Envelope.DEFAULT_ELEMENT_NAME);
         bodyBuilder = (SOAPObjectBuilder<Body>) builderFactory.<Body>ensureBuilder(Body.DEFAULT_ELEMENT_NAME);
+        setProtocolMessageLoggerCategory(BASE_PROTOCOL_MESSAGE_LOGGER_CATEGORY + ".SOAP");
     }
     
     /** {@inheritDoc} */
diff --git a/opensaml-soap-impl/src/test/resources/logback-test.xml b/opensaml-soap-impl/src/test/resources/logback-test.xml
index d03dd068e..76ba0219f 100644
--- a/opensaml-soap-impl/src/test/resources/logback-test.xml
+++ b/opensaml-soap-impl/src/test/resources/logback-test.xml
@@ -3,7 +3,7 @@
 
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>%-5level %logger{0} - %msg%n</pattern>
+            <pattern>%-5level %logger - %msg%n</pattern>
             <charset>UTF-8</charset>
         </encoder>
     </appender>
@@ -12,6 +12,10 @@
         <level value="WARN"/>
     </logger>
     
+    <logger name="PROTOCOL_MESSAGE">
+        <level value="DEBUG"/>
+    </logger>
+    
     <root>
         <appender-ref ref="STDOUT"/>
         <level value="WARN"/>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list