[java-opensaml] branch master updated: OSJ-280 - Remove generics from Message/Profile APIs

Scott Cantor cantor.2 at osu.edu
Wed Jul 31 12:44:01 EDT 2019


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

scantor pushed a commit to branch master
in repository java-opensaml.

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

The following commit(s) were added to refs/heads/master by this push:
       new  51ed390   OSJ-280 - Remove generics from Message/Profile APIs
51ed390 is described below

commit 51ed3908c487be3003f000c647f472d8c7c69a53
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Jul 31 12:43:56 2019 -0400

    OSJ-280 - Remove generics from Message/Profile APIs
    
    https://issues.shibboleth.net/jira/browse/OSJ-280
---
 .../messaging/context/InOutOperationContext.java   |  20 ++--
 .../opensaml/messaging/context/MessageContext.java |  10 +-
 .../opensaml/messaging/context/ScratchContext.java |   6 +-
 .../messaging/context/navigate/MessageLookup.java  |   2 +-
 .../messaging/decoder/AbstractMessageDecoder.java  |  12 +-
 .../opensaml/messaging/decoder/MessageDecoder.java |   6 +-
 .../AbstractHttpClientResponseMessageDecoder.java  |   7 +-
 .../BaseHttpClientResponseXMLMessageDecoder.java   |  15 +--
 .../HttpClientResponseMessageDecoder.java          |   4 +-
 .../AbstractHttpServletRequestMessageDecoder.java  |   8 +-
 .../BaseHttpServletRequestXMLMessageDecoder.java   |  21 ++--
 .../servlet/HttpServletRequestMessageDecoder.java  |   4 +-
 .../messaging/encoder/AbstractMessageEncoder.java  |  14 +--
 .../opensaml/messaging/encoder/MessageEncoder.java |   6 +-
 .../AbstractHttpClientRequestMessageEncoder.java   |  11 +-
 .../BaseHttpClientRequestXMLMessageEncoder.java    |  24 ++--
 .../HttpClientRequestMessageEncoder.java           |   4 +-
 .../AbstractHttpServletResponseMessageEncoder.java |   8 +-
 .../BaseHttpServletResponseXMLMessageEncoder.java  |  24 ++--
 .../servlet/HttpServletResponseMessageEncoder.java |   6 +-
 .../messaging/error/MessageErrorHandler.java       |   8 +-
 .../error/PipelineMessageErrorHandler.java         |  14 +--
 .../messaging/error/TypedMessageErrorHandler.java  |   4 +-
 .../AbstractHttpServletMessageErrorHandler.java    |   5 +-
 .../servlet/HttpServletMessageErrorHandler.java    |   4 +-
 .../messaging/handler/AbstractMessageHandler.java  |  15 +--
 .../opensaml/messaging/handler/MessageHandler.java |   6 +-
 .../messaging/handler/MessageHandlerChain.java     |   6 +-
 .../messaging/pipeline/BasicMessagePipeline.java   |  41 ++++---
 .../messaging/pipeline/MessagePipeline.java        |  15 +--
 .../pipeline/StaticPipelineNameStrategy.java       |   4 +-
 .../httpclient/BasicHttpClientMessagePipeline.java |  21 ++--
 .../httpclient/HttpClientMessagePipeline.java      |  10 +-
 .../HttpClientMessagePipelineFactory.java          |   9 +-
 .../servlet/BasicHttpServletMessagePipeline.java   |  21 ++--
 .../servlet/HttpServletMessagePipeline.java        |  10 +-
 .../servlet/HttpServletMessagePipelineFactory.java |   9 +-
 .../context/InOutOperationContextText.java         |  12 +-
 .../MockHttpServletRequestLookupStrategy.java      |   2 +-
 .../RecursiveTypedParentContextLookupTest.java     |   4 +-
 .../handler/AbstractMessageHandlerTest.java        |   4 +-
 .../impl/AbstractMessageChannelSecurity.java       |   6 +-
 .../handler/impl/BasicMessageHandlerChain.java     |  18 ++-
 .../impl/MessageHandlerErrorStrategyAdapter.java   |  10 +-
 .../handler/impl/SchemaValidateXMLMessage.java     |  28 +++--
 .../handler/impl/SchemaValidateXMLMessageTest.java |   2 +-
 .../action/AbstractConditionalProfileAction.java   |  10 +-
 .../profile/action/AbstractProfileAction.java      |  23 ++--
 .../org/opensaml/profile/action/ActionSupport.java |   6 +-
 .../org/opensaml/profile/action/ProfileAction.java |   8 +-
 .../org/opensaml/profile/context/EventContext.java |  10 +-
 .../profile/context/ProfileRequestContext.java     |   6 +-
 .../profile/action/ActionTestingSupport.java       |   2 +-
 .../logic/MessageContextPredicateAdapterTest.java  |   6 +-
 .../org/opensaml/profile/action/impl/LogEvent.java |   7 +-
 .../PopulateClientTLSValidationParameters.java     |   2 +-
 .../action/impl/PopulateDecryptionParameters.java  |   2 +-
 .../PopulateSignatureValidationParameters.java     |   2 +-
 .../profile/action/impl/DecodeMessageTest.java     |   4 +-
 .../profile/action/impl/EncodeMessageTest.java     |   8 +-
 .../saml/common/assertion/ValidationContext.java   |   2 +-
 .../saml/common/binding/SAMLBindingSupport.java    |  37 ++++---
 .../binding/decoding/SAMLMessageDecoder.java       |   3 +-
 .../binding/encoding/SAMLMessageEncoder.java       |   3 +-
 .../messaging/SAMLMessageSecuritySupport.java      |   7 +-
 .../messaging/logic/ProxiedRequesterPredicate.java |   4 +-
 .../logic/SignatureCapableBindingPredicate.java    |   5 +-
 .../soap/SAMLSOAPClientContextBuilder.java         |  21 ++--
 .../opensaml/saml/criterion/BindingCriterion.java  |   2 +-
 .../opensaml/saml/criterion/EndpointCriterion.java |   2 +-
 .../binding/artifact/SAML1ArtifactBuilder.java     |   3 +-
 .../artifact/SAML1ArtifactBuilderFactory.java      |   6 +-
 .../artifact/SAML1ArtifactType0001Builder.java     |   8 +-
 .../artifact/SAML1ArtifactType0002Builder.java     |   7 +-
 .../binding/artifact/SAML2ArtifactBuilder.java     |   3 +-
 .../artifact/SAML2ArtifactBuilderFactory.java      |   6 +-
 .../artifact/SAML2ArtifactType0004Builder.java     |   9 +-
 .../opensaml/saml/saml2/encryption/Encrypter.java  |  18 ++-
 .../impl/ReceivedEndpointSecurityHandler.java      |   3 +-
 .../binding/decoding/impl/HTTPArtifactDecoder.java |   7 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |   6 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |  13 ++-
 .../impl/HttpClientResponseSOAP11Decoder.java      |  13 ++-
 .../encoding/impl/BaseSAML1MessageEncoder.java     |   7 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |  22 ++--
 .../binding/encoding/impl/HTTPPostEncoder.java     |  13 ++-
 .../binding/encoding/impl/HTTPSOAP11Encoder.java   |   3 +-
 .../impl/HttpClientRequestSOAP11Encoder.java       |   3 +-
 .../saml/saml1/profile/impl/AddResponseShell.java  |   8 +-
 .../binding/decoding/impl/HTTPArtifactDecoder.java |  11 +-
 .../binding/decoding/impl/HTTPPostDecoder.java     |   6 +-
 .../decoding/impl/HTTPPostSimpleSignDecoder.java   |   3 +-
 .../decoding/impl/HTTPRedirectDeflateDecoder.java  |   7 +-
 .../binding/decoding/impl/HTTPSOAP11Decoder.java   |  13 ++-
 .../impl/HttpClientResponseSOAP11Decoder.java      |  13 ++-
 .../encoding/impl/BaseSAML2MessageEncoder.java     |   5 +-
 .../binding/encoding/impl/HTTPArtifactEncoder.java |  22 ++--
 .../binding/encoding/impl/HTTPPostEncoder.java     |  13 +--
 .../encoding/impl/HTTPPostSimpleSignEncoder.java   |   7 +-
 .../encoding/impl/HTTPRedirectDeflateEncoder.java  |  16 +--
 .../binding/encoding/impl/HTTPSOAP11Encoder.java   |   3 +-
 .../impl/HttpClientRequestSOAP11Encoder.java       |   3 +-
 .../SAML2AuthnRequestsSignedSecurityHandler.java   |  15 ++-
 .../profile/impl/AbstractResponseShellAction.java  |   6 +-
 .../impl/AddChannelBindingsHeaderHandlerTest.java  |   5 +-
 .../impl/CheckMessageVersionHandlerTest.java       |  17 ++-
 ...SAMLAddAttributeConsumingServiceHandleTest.java |  24 ++--
 .../impl/SAMLMetadataLookupHandlerTest.java        |   5 +-
 .../impl/SAMLOutboundDestinationHandlerTest.java   |   7 +-
 .../impl/SAMLProtocolAndRoleHandlerTest.java       |   9 +-
 .../impl/EndpointURLSchemeSecurityHandlerTest.java |   8 +-
 .../impl/InResponseToSecurityHandlerTest.java      |   2 +-
 .../impl/MessageLifetimeSecurityHandlerTest.java   |   5 +-
 .../impl/MessageReplaySecurityHandlerTest.java     |   5 +-
 .../impl/ReceivedEndpointSecurityHandlerTest.java  |   7 +-
 .../SAMLMDClientCertAuthSecurityHandlerTest.java   |   5 +-
 ...LOutboundProtocolMessageSigningHandlerTest.java |   5 +-
 ...ocolMessageXMLSignatureSecurityHandlerTest.java |   5 +-
 .../context/SAMLMessageInfoContextTest.java        |  28 ++---
 .../binding/decoding/impl/HTTPPostDecoderTest.java |   2 +-
 .../decoding/impl/HTTPSOAP11DecoderTest.java       |   3 +-
 .../binding/encoding/impl/HTTPPostEncoderTest.java |   3 +-
 .../encoding/impl/HTTPSOAP11EncoderTest.java       |   3 +-
 .../SAML1ArtifactRequestIssuerHandlerTest.java     |   5 +-
 .../impl/AddNameIdentifierToSubjectsTest.java      |  22 ++--
 .../saml1/profile/impl/AddResponseShellTest.java   |   4 +-
 .../profile/impl/AddStatusToResponseTest.java      |   8 +-
 .../impl/AddSubjectConfirmationToSubjectsTest.java |  18 +--
 .../impl/CopyNameIdentifierFromRequestTest.java    |  11 +-
 .../saml1/profile/impl/ResolveArtifactsTest.java   |  15 ++-
 .../impl/HTTPRedirectDeflateDecoderTest.java       |   4 +-
 .../decoding/impl/HTTPSOAP11DecoderTest.java       |   3 +-
 .../binding/encoding/impl/HTTPPostEncoderTest.java |   5 +-
 .../impl/HTTPPostSimpleSignEncoderTest.java        |   7 +-
 .../impl/HTTPRedirectDeflateEncoderTest.java       |  13 +--
 .../encoding/impl/HTTPSOAP11EncoderTest.java       |   3 +-
 .../impl/AddConsentToResponseHandlerTest.java      |   6 +-
 .../impl/AddECPResponseHeaderHandlerTest.java      |   7 +-
 .../impl/ExtractConsentFromRequestHandlerTest.java |   6 +-
 .../impl/ExtractProxiedRequestersHandlerTest.java  |   7 +-
 .../ExtractChannelBindingsHeadersHandlerTest.java  |   9 +-
 ...AML2AuthnRequestsSignedSecurityHandlerTest.java |   5 +-
 ...SAML2HTTPPostSimpleSignSecurityHandlerTest.java |   6 +-
 ...edirectDeflateSignatureSecurityHandlerTest.java |   6 +-
 .../profile/impl/AddStatusResponseShellTest.java   |  16 +--
 .../profile/impl/AddStatusToResponseTest.java      |   8 +-
 .../impl/AddSubjectConfirmationToSubjectsTest.java |  12 +-
 .../profile/impl/CopyNameIDFromRequestTest.java    |  11 +-
 .../saml2/profile/impl/EncryptAssertionsTest.java  |   2 +-
 .../saml2/profile/impl/EncryptAttributesTest.java  |   2 +-
 .../saml2/profile/impl/EncryptNameIDsTest.java     |   2 +-
 .../saml2/profile/impl/PopulateECPContextTest.java |   3 +-
 .../saml2/profile/impl/ResolveArtifactTest.java    |  11 +-
 .../saml2/profile/impl/TestSelfEncryption.java     |   2 +-
 ...AML20AssertionValidationContextBuilderTest.java |   4 +-
 ...itySAML20AssertionTokenSecurityHandlerTest.java |   6 +-
 .../messaging/HttpClientSecurityContext.java       |   9 +-
 ...ateHttpClientSecurityParametersHandlerTest.java |   2 +-
 .../http/AbstractPipelineHttpSOAPClient.java       |  18 +--
 .../client/http/PipelineFactoryHttpSOAPClient.java |  28 ++---
 .../java/org/opensaml/soap/common/SOAPHandler.java |   4 +-
 .../AbstractHeaderGeneratingMessageHandler.java    |  12 +-
 .../soap/messaging/SOAPMessagingSupport.java       |  14 +--
 .../java/org/opensaml/soap/util/SOAPSupport.java   | 122 ---------------------
 .../http/impl/HttpClientResponseSOAP11Decoder.java |  13 +--
 .../http/impl/HttpClientRequestSOAP11Encoder.java  |  15 +--
 .../decoder/http/impl/EnvelopeBodyHandler.java     |   8 +-
 .../decoder/http/impl/HTTPSOAP11Decoder.java       |  13 +--
 .../http/impl/SimplePayloadBodyHandler.java        |  12 +-
 .../encoder/http/impl/HTTPSOAP11Encoder.java       |  16 +--
 .../SOAP11FaultContextDecoratingErrorHandler.java  |   8 +-
 .../soap/soap11/profile/impl/AddSOAPFault.java     |   2 +-
 .../opensaml/soap/SOAPMessagingBaseTestCase.java   |  10 +-
 .../impl/HttpClientResponseSOAP11DecoderTest.java  |  13 +--
 .../impl/HttpClientRequestSOAP11EncoderTest.java   |   7 +-
 .../decoder/http/impl/HTTPSOAP11DecoderTest.java   |  13 +--
 .../encoder/http/impl/HTTPSOAP11EncoderTest.java   |  28 ++---
 .../soap/soap11/profile/impl/AddSOAPFaultTest.java |   2 +-
 .../impl/client/LoadClientStorageServices.java     |  12 +-
 .../impl/client/LogLocalStorageSaveResults.java    |  12 +-
 .../client/PopulateClientStorageLoadContext.java   |  12 +-
 .../client/PopulateClientStorageSaveContext.java   |  12 +-
 .../SaveCookieBackedClientStorageServices.java     |  13 +--
 ...teSignatureValidationParametersHandlerTest.java |   2 +-
 184 files changed, 759 insertions(+), 1053 deletions(-)

diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/InOutOperationContext.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/InOutOperationContext.java
index 83fad75..209bec0 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/InOutOperationContext.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/InOutOperationContext.java
@@ -23,17 +23,14 @@ import javax.annotation.Nullable;
 * An operation context which represents concretely a message exchange pattern involving an 
 * inbound message and an outbound message. This is the typical request-response
 * pattern seen in messaging environments, and might be either server-side or client-side.
-* 
-* @param <InboundMessageType> the inbound message type
-* @param <OutboundMessageType> the outbound message type
 */
-public class InOutOperationContext<InboundMessageType, OutboundMessageType> extends BaseContext {
+public class InOutOperationContext extends BaseContext {
 
     /** The inbound message context. */
-    @Nullable private MessageContext<InboundMessageType> inboundContext;
+    @Nullable private MessageContext inboundContext;
 
     /** The outbound message context. */
-    @Nullable private MessageContext<OutboundMessageType> outboundContext;
+    @Nullable private MessageContext outboundContext;
 
     /** Constructor. Sets ID to a generated UUID and creation time to now. */
     protected InOutOperationContext() {
@@ -45,8 +42,7 @@ public class InOutOperationContext<InboundMessageType, OutboundMessageType> exte
      * @param inbound the inbound message context
      * @param outbound the outbound message context
      */
-    public InOutOperationContext(@Nullable final MessageContext<InboundMessageType> inbound,
-            @Nullable final MessageContext<OutboundMessageType> outbound) {
+    public InOutOperationContext(@Nullable final MessageContext inbound, @Nullable final MessageContext outbound) {
 
         setInboundMessageContext(inbound);
         setOutboundMessageContext(outbound);
@@ -58,7 +54,7 @@ public class InOutOperationContext<InboundMessageType, OutboundMessageType> exte
      * 
      * @return the inbound message context
      */
-    @Nullable public MessageContext<InboundMessageType> getInboundMessageContext() {
+    @Nullable public MessageContext getInboundMessageContext() {
         return inboundContext;
     }
     
@@ -67,7 +63,7 @@ public class InOutOperationContext<InboundMessageType, OutboundMessageType> exte
      * 
      * @param context inbound message context, may be null
      */
-    public void setInboundMessageContext(@Nullable final MessageContext<InboundMessageType> context) {
+    public void setInboundMessageContext(@Nullable final MessageContext context) {
         // Unlink the old context from this parent
         if (inboundContext != null) {
             inboundContext.setParent(null);
@@ -86,7 +82,7 @@ public class InOutOperationContext<InboundMessageType, OutboundMessageType> exte
      * 
      * @return the outbound message context
      */
-    @Nullable public MessageContext<OutboundMessageType> getOutboundMessageContext() {
+    @Nullable public MessageContext getOutboundMessageContext() {
         return outboundContext;
     }
     
@@ -95,7 +91,7 @@ public class InOutOperationContext<InboundMessageType, OutboundMessageType> exte
      * 
      * @param context outbound message context, may be null
      */
-    public void setOutboundMessageContext(@Nullable final MessageContext<OutboundMessageType> context) {
+    public void setOutboundMessageContext(@Nullable final MessageContext context) {
         // Unlink the old context from this parent
         if (outboundContext != null) {
             outboundContext.setParent(null);
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
index be79a4e..e2b4f0d 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/MessageContext.java
@@ -29,20 +29,18 @@ import javax.annotation.Nullable;
  * also be more functional or operational in nature, for example providing "views" onto the message 
  * and/or message context data.
  * </p>
- *
- * @param <MessageType> the message type of the message context 
  */
-public final class MessageContext<MessageType> extends BaseContext {
+public final class MessageContext extends BaseContext {
 
     /** The message represented. */
-    @Nullable private MessageType msg;
+    @Nullable private Object msg;
 
     /**
      * Get the message represented by the message context.
      * 
      * @return the message
      */
-    @Nullable public MessageType getMessage() {
+    @Nullable public Object getMessage() {
         return msg;
     }
 
@@ -51,7 +49,7 @@ public final class MessageContext<MessageType> extends BaseContext {
      * 
      * @param message the message
      */
-    public void setMessage(@Nullable final MessageType message) {
+    public void setMessage(@Nullable final Object message) {
         msg = message;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/ScratchContext.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/ScratchContext.java
index b4edcc6..592d1f3 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/ScratchContext.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/ScratchContext.java
@@ -30,11 +30,11 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Live;
 public final class ScratchContext extends BaseContext {
 
     /** Map of scratch data. */
-    @Nonnull private Map map;
+    @Nonnull private Map<?,?> map;
 
     /** Constructor. */
     public ScratchContext() {
-        map = new HashMap();
+        map = new HashMap<>();
     }
     
     /**
@@ -42,7 +42,7 @@ public final class ScratchContext extends BaseContext {
      * 
      * @return the map
      */
-    @Nonnull @Live public Map getMap() {
+    @Nonnull @Live public Map<?,?> getMap() {
         return map;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
index 842397a..d51ed4c 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/context/navigate/MessageLookup.java
@@ -47,7 +47,7 @@ public class MessageLookup<T> implements ContextDataLookupFunction<MessageContex
     /** {@inheritDoc} */
     @Nullable public T apply(@Nullable final MessageContext input) {
         if (input != null && messageType.isInstance(input.getMessage())) {
-            return (T) input.getMessage();
+            return messageType.cast(input.getMessage());
         }
         return null;
     }
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 325eb51..0bf5622 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
@@ -25,18 +25,16 @@ import org.opensaml.messaging.context.MessageContext;
 
 /**
  * Abstract message decoder.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractMessageDecoder<MessageType> extends AbstractInitializableComponent implements
-        MessageDecoder<MessageType>, UnmodifiableComponent {
+public abstract class AbstractMessageDecoder extends AbstractInitializableComponent
+        implements MessageDecoder, UnmodifiableComponent {
 
     /** Message context. */
-    private MessageContext<MessageType> messageContext;
+    private MessageContext messageContext;
 
     /** {@inheritDoc} */
     @Override
-    public MessageContext<MessageType> getMessageContext() {
+    public MessageContext getMessageContext() {
         return messageContext;
     }
 
@@ -45,7 +43,7 @@ public abstract class AbstractMessageDecoder<MessageType> extends AbstractInitia
      * 
      * @param context the message context
      */
-    protected void setMessageContext(final MessageContext<MessageType> context) {
+    protected void setMessageContext(final MessageContext context) {
         messageContext = context;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/MessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/MessageDecoder.java
index 68a900b..c29f444 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/MessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/MessageDecoder.java
@@ -30,10 +30,8 @@ import org.opensaml.messaging.context.MessageContext;
  * <p>
  * The data on which the decoder operates is supplied in an implementation-specific manner.
  * </p>
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface MessageDecoder<MessageType> extends InitializableComponent, DestructableComponent {
+public interface MessageDecoder extends InitializableComponent, DestructableComponent {
 
     /**
      * Decode message data from the source and store it so that it may be retrieved via {@link #getMessageContext()}.
@@ -47,5 +45,5 @@ public interface MessageDecoder<MessageType> extends InitializableComponent, Des
      * 
      * @return the decoded message context
      */
-    MessageContext<MessageType> getMessageContext();
+    MessageContext getMessageContext();
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/AbstractHttpClientResponseMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/AbstractHttpClientResponseMessageDecoder.java
index 6500e15..44cd675 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/AbstractHttpClientResponseMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/AbstractHttpClientResponseMessageDecoder.java
@@ -28,11 +28,9 @@ import org.opensaml.messaging.decoder.MessageDecodingException;
 
 /**
  * Abstract implementation of {@link HttpClientResponseMessageDecoder}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractHttpClientResponseMessageDecoder<MessageType> extends AbstractMessageDecoder<MessageType>
-        implements HttpClientResponseMessageDecoder<MessageType> {
+public abstract class AbstractHttpClientResponseMessageDecoder extends AbstractMessageDecoder
+        implements HttpClientResponseMessageDecoder {
 
     /** The HTTP client response. */
     private HttpResponse response;
@@ -70,4 +68,5 @@ public abstract class AbstractHttpClientResponseMessageDecoder<MessageType> exte
             throw new ComponentInitializationException("HTTP client response cannot be null");
         }
     }
+
 }
\ 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 ca639ec..d321ad1 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
@@ -40,11 +40,8 @@ import org.w3c.dom.Element;
 
 /**
  * Base class for message decoders which decode XML messages from an {@link HttpResponse}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class BaseHttpClientResponseXMLMessageDecoder<MessageType extends XMLObject>
-    extends AbstractHttpClientResponseMessageDecoder<MessageType> {
+public abstract class BaseHttpClientResponseXMLMessageDecoder extends AbstractHttpClientResponseMessageDecoder {
     
     /** Used to log protocol messages. */
     private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
@@ -111,14 +108,14 @@ public abstract class BaseHttpClientResponseXMLMessageDecoder<MessageType extend
      */
     protected void logDecodedMessage() {
         if (protocolMessageLog.isDebugEnabled() ){
-            final XMLObject message = getMessageToLog();
-            if (message == null) {
-                log.warn("Decoded message was null, nothing to log");
+            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(message);
+                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);
@@ -131,7 +128,7 @@ public abstract class BaseHttpClientResponseXMLMessageDecoder<MessageType extend
      * 
      * @return the XMLObject message considered to be the protocol message for logging purposes
      */
-    protected XMLObject getMessageToLog() {
+    protected Object getMessageToLog() {
         return getMessageContext().getMessage();
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/HttpClientResponseMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/HttpClientResponseMessageDecoder.java
index 53256c7..0899adb 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/HttpClientResponseMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/httpclient/HttpClientResponseMessageDecoder.java
@@ -25,10 +25,8 @@ import org.opensaml.messaging.decoder.MessageDecoder;
 
 /**
  * A specialization of {@link MessageDecoder} that operates on a source message data type of {@link HttpResponse}.
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface HttpClientResponseMessageDecoder<MessageType> extends MessageDecoder<MessageType> {
+public interface HttpClientResponseMessageDecoder extends MessageDecoder {
     
     /**
      * Get the HTTP client response on which to operate.
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
index a875d33..320b41f 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/AbstractHttpServletRequestMessageDecoder.java
@@ -28,14 +28,12 @@ import org.opensaml.messaging.decoder.MessageDecodingException;
 
 /**
  * Abstract implementation of {@link HttpServletRequestMessageDecoder}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractHttpServletRequestMessageDecoder<MessageType> extends AbstractMessageDecoder<MessageType>
-        implements HttpServletRequestMessageDecoder<MessageType> {
+public abstract class AbstractHttpServletRequestMessageDecoder extends AbstractMessageDecoder
+        implements HttpServletRequestMessageDecoder {
 
     /** The HTTP servlet request. */
-    private HttpServletRequest request;
+    @Nullable private HttpServletRequest request;
 
     /** {@inheritDoc} */
     @Nullable public HttpServletRequest getHttpServletRequest() {
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 5b6c017..395a07a 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
@@ -41,20 +41,17 @@ import org.w3c.dom.Element;
 
 /**
  * Base class for message decoders which decode XML messages from an {@link javax.servlet.http.HttpServletRequest}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class BaseHttpServletRequestXMLMessageDecoder<MessageType extends XMLObject>
-    extends AbstractHttpServletRequestMessageDecoder<MessageType> {
+public abstract class BaseHttpServletRequestXMLMessageDecoder extends AbstractHttpServletRequestMessageDecoder {
     
     /** Used to log protocol messages. */
-    private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
+    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(BaseHttpServletRequestXMLMessageDecoder.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(BaseHttpServletRequestXMLMessageDecoder.class);
 
     /** Parser pool used to deserialize the message. */
-    private ParserPool parserPool;
+    @Nonnull private ParserPool parserPool;
 
     /** Constructor. */
     public BaseHttpServletRequestXMLMessageDecoder() {
@@ -116,14 +113,14 @@ public abstract class BaseHttpServletRequestXMLMessageDecoder<MessageType extend
      */
     protected void logDecodedMessage() {
         if (protocolMessageLog.isDebugEnabled() ){
-            final XMLObject message = getMessageToLog();
-            if (message == null) {
-                log.warn("Decoded message was null, nothing to log");
+            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(message);
+                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);
@@ -136,7 +133,7 @@ public abstract class BaseHttpServletRequestXMLMessageDecoder<MessageType extend
      * 
      * @return the XMLObject message considered to be the protocol message for logging purposes
      */
-    protected XMLObject getMessageToLog() {
+    protected Object getMessageToLog() {
         return getMessageContext().getMessage();
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/HttpServletRequestMessageDecoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/HttpServletRequestMessageDecoder.java
index 8294709..924fac0 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/HttpServletRequestMessageDecoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/decoder/servlet/HttpServletRequestMessageDecoder.java
@@ -25,10 +25,8 @@ import org.opensaml.messaging.decoder.MessageDecoder;
 
 /**
  * A specialization of {@link MessageDecoder} that operates on a source message data type of {@link HttpServletRequest}.
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface HttpServletRequestMessageDecoder<MessageType> extends MessageDecoder<MessageType> {
+public interface HttpServletRequestMessageDecoder extends MessageDecoder {
     
     /**
      * Get the HTTP servlet request on which to operate.
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 40554cb..523d4f3 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
@@ -22,22 +22,22 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.component.UnmodifiableComponent;
 
+import javax.annotation.Nullable;
+
 import org.opensaml.messaging.context.MessageContext;
 
 /**
  * Abstract message encoder.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractMessageEncoder<MessageType> extends AbstractInitializableComponent implements
-        MessageEncoder<MessageType>, UnmodifiableComponent {
+public abstract class AbstractMessageEncoder extends AbstractInitializableComponent
+        implements MessageEncoder, UnmodifiableComponent {
 
     /** The message context. */
-    private MessageContext<MessageType> messageContext;
+    @Nullable private MessageContext messageContext;
 
     /** {@inheritDoc} */
     @Override
-    public synchronized void setMessageContext(final MessageContext<MessageType> context) {
+    public synchronized void setMessageContext(@Nullable final MessageContext context) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
@@ -67,7 +67,7 @@ public abstract class AbstractMessageEncoder<MessageType> extends AbstractInitia
      * 
      * @return the message context.
      */
-    protected MessageContext<MessageType> getMessageContext() {
+    @Nullable protected MessageContext getMessageContext() {
         return messageContext;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/MessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/MessageEncoder.java
index 5c470e7..36b8a95 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/MessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/MessageEncoder.java
@@ -30,10 +30,8 @@ import org.opensaml.messaging.context.MessageContext;
  * <p>
  * The sink data or structure on which the encoder operates is supplied in an implementation-specific manner.
  * </p>
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface MessageEncoder<MessageType> extends InitializableComponent, DestructableComponent {
+public interface MessageEncoder extends InitializableComponent, DestructableComponent {
 
     /**
      * This method should prepare the message context by creating and populating any binding-specific data structures
@@ -71,5 +69,5 @@ public interface MessageEncoder<MessageType> extends InitializableComponent, Des
      * 
      * @param messageContext the message context
      */
-    void setMessageContext(MessageContext<MessageType> messageContext);
+    void setMessageContext(MessageContext messageContext);
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/AbstractHttpClientRequestMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/AbstractHttpClientRequestMessageEncoder.java
index f7b0d91..44574ed 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/AbstractHttpClientRequestMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/AbstractHttpClientRequestMessageEncoder.java
@@ -28,14 +28,12 @@ import org.opensaml.messaging.encoder.servlet.HttpServletResponseMessageEncoder;
 
 /**
  * Abstract implementation of {@link HttpServletResponseMessageEncoder}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractHttpClientRequestMessageEncoder<MessageType> extends
-        AbstractMessageEncoder<MessageType> implements HttpClientRequestMessageEncoder<MessageType> {
+public abstract class AbstractHttpClientRequestMessageEncoder extends AbstractMessageEncoder
+        implements HttpClientRequestMessageEncoder {
 
     /** The HTTP client request. */
-    private HttpRequest request;
+    @Nullable private HttpRequest request;
 
     /** {@inheritDoc} */
     @Nullable public HttpRequest getHttpRequest() {
@@ -65,4 +63,5 @@ public abstract class AbstractHttpClientRequestMessageEncoder<MessageType> exten
             throw new ComponentInitializationException("HTTP client request cannot be null");
         }
     }
-}
+
+}
\ No newline at end of file
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 3f54eda..b3d169b 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
@@ -19,6 +19,9 @@ package org.opensaml.messaging.encoder.httpclient;
 
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
@@ -29,17 +32,14 @@ import org.w3c.dom.Element;
 
 /**
  * Base class for message encoders which encode XML messages to HttpRequest.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class BaseHttpClientRequestXMLMessageEncoder<MessageType extends XMLObject> 
-    extends AbstractHttpClientRequestMessageEncoder<MessageType> {
+public abstract class BaseHttpClientRequestXMLMessageEncoder  extends AbstractHttpClientRequestMessageEncoder {
     
     /** Used to log protocol messages. */
-    private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
+    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(BaseHttpClientRequestXMLMessageEncoder.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(BaseHttpClientRequestXMLMessageEncoder.class);
 
     /** {@inheritDoc} */
     public void encode() throws MessageEncodingException {
@@ -59,14 +59,14 @@ public abstract class BaseHttpClientRequestXMLMessageEncoder<MessageType extends
      */
     protected void logEncodedMessage() {
         if (protocolMessageLog.isDebugEnabled() ){
-            final XMLObject message = getMessageToLog();
-            if (message == null) {
-                log.warn("Encoded message was null, nothing to log");
+            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(message);
+                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);
@@ -79,7 +79,7 @@ public abstract class BaseHttpClientRequestXMLMessageEncoder<MessageType extends
      * 
      * @return the XMLObject message considered to be the protocol message for logging purposes
      */
-    protected XMLObject getMessageToLog() {
+    @Nullable protected Object getMessageToLog() {
         return getMessageContext().getMessage();
     }
 
@@ -92,7 +92,7 @@ public abstract class BaseHttpClientRequestXMLMessageEncoder<MessageType extends
      * 
      * @throws MessageEncodingException thrown if the give message can not be marshalled into its DOM representation
      */
-    protected Element marshallMessage(final XMLObject message) throws MessageEncodingException {
+    @Nonnull protected Element marshallMessage(@Nonnull final XMLObject message) throws MessageEncodingException {
         log.debug("Marshalling message");
         
         try {
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/HttpClientRequestMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/HttpClientRequestMessageEncoder.java
index 4030e39..223a14d 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/HttpClientRequestMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/httpclient/HttpClientRequestMessageEncoder.java
@@ -24,10 +24,8 @@ import org.opensaml.messaging.encoder.MessageEncoder;
 
 /**
  * A specialization of {@link MessageEncoder} that operates on a sink message data type of {@link HttpRequest}.
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface HttpClientRequestMessageEncoder<MessageType> extends MessageEncoder<MessageType> {
+public interface HttpClientRequestMessageEncoder extends MessageEncoder {
     
     /**
      * Get the HTTP client request on which to operate.
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/AbstractHttpServletResponseMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/AbstractHttpServletResponseMessageEncoder.java
index 0005e3f..2ddf372 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/AbstractHttpServletResponseMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/AbstractHttpServletResponseMessageEncoder.java
@@ -27,14 +27,12 @@ import org.opensaml.messaging.encoder.AbstractMessageEncoder;
 
 /**
  * Abstract implementation of {@link HttpServletResponseMessageEncoder}.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class AbstractHttpServletResponseMessageEncoder<MessageType> extends
-        AbstractMessageEncoder<MessageType> implements HttpServletResponseMessageEncoder<MessageType> {
+public abstract class AbstractHttpServletResponseMessageEncoder extends AbstractMessageEncoder
+        implements HttpServletResponseMessageEncoder {
 
     /** The HTTP servlet response. */
-    private HttpServletResponse response;
+    @Nullable private HttpServletResponse response;
 
     /** {@inheritDoc} */
     @Nullable public HttpServletResponse getHttpServletResponse() {
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 a835297..60e0dbb 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
@@ -19,6 +19,9 @@ package org.opensaml.messaging.encoder.servlet;
 
 import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.util.XMLObjectSupport;
@@ -29,17 +32,14 @@ import org.w3c.dom.Element;
 
 /**
  * Base class for message encoders which encode XML messages to HttpServletResponse.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public abstract class BaseHttpServletResponseXMLMessageEncoder<MessageType extends XMLObject> 
-    extends AbstractHttpServletResponseMessageEncoder<MessageType> {
+public abstract class BaseHttpServletResponseXMLMessageEncoder  extends AbstractHttpServletResponseMessageEncoder {
     
     /** Used to log protocol messages. */
-    private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
+    @Nonnull private Logger protocolMessageLog = LoggerFactory.getLogger("PROTOCOL_MESSAGE");
 
     /** Class logger. */
-    private final Logger log = LoggerFactory.getLogger(BaseHttpServletResponseXMLMessageEncoder.class);
+    @Nonnull private final Logger log = LoggerFactory.getLogger(BaseHttpServletResponseXMLMessageEncoder.class);
 
     /** {@inheritDoc} */
     public void encode() throws MessageEncodingException {
@@ -59,14 +59,14 @@ public abstract class BaseHttpServletResponseXMLMessageEncoder<MessageType exten
      */
     protected void logEncodedMessage() {
         if (protocolMessageLog.isDebugEnabled() ){
-            final XMLObject message = getMessageToLog();
-            if (message == null) {
-                log.warn("Encoded message was null, nothing to log");
+            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(message);
+                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);
@@ -79,7 +79,7 @@ public abstract class BaseHttpServletResponseXMLMessageEncoder<MessageType exten
      * 
      * @return the XMLObject message considered to be the protocol message for logging purposes
      */
-    protected XMLObject getMessageToLog() {
+    @Nullable protected Object getMessageToLog() {
         return getMessageContext().getMessage();
     }
 
@@ -92,7 +92,7 @@ public abstract class BaseHttpServletResponseXMLMessageEncoder<MessageType exten
      * 
      * @throws MessageEncodingException thrown if the give message can not be marshalled into its DOM representation
      */
-    protected Element marshallMessage(final XMLObject message) throws MessageEncodingException {
+    protected Element marshallMessage(@Nonnull final XMLObject message) throws MessageEncodingException {
         log.debug("Marshalling message");
         
         try {
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/HttpServletResponseMessageEncoder.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/HttpServletResponseMessageEncoder.java
index 2e9de6b..61d3bad 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/HttpServletResponseMessageEncoder.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/encoder/servlet/HttpServletResponseMessageEncoder.java
@@ -24,10 +24,8 @@ import org.opensaml.messaging.encoder.MessageEncoder;
 
 /**
  * A specialization of {@link MessageEncoder} that operates on a sink message data type of {@link HttpServletResponse}.
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public interface HttpServletResponseMessageEncoder<MessageType> extends MessageEncoder<MessageType> {
+public interface HttpServletResponseMessageEncoder extends MessageEncoder {
     
     /**
      * Get the HTTP servlet response on which to operate.
@@ -43,4 +41,4 @@ public interface HttpServletResponseMessageEncoder<MessageType> extends MessageE
      */
     void setHttpServletResponse(@Nullable final HttpServletResponse response);
     
-}
+}
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/MessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/MessageErrorHandler.java
index d214576..33259ab 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/MessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/MessageErrorHandler.java
@@ -21,10 +21,8 @@ import org.opensaml.messaging.context.MessageContext;
 
 /**
  * Component that handles message processing-related errors.
- * 
- * @param <MessageType> the type of message being handled
  */
-public interface MessageErrorHandler<MessageType> {
+public interface MessageErrorHandler {
     
     /**
      * Handle a particular thrown error.
@@ -33,6 +31,6 @@ public interface MessageErrorHandler<MessageType> {
      * @param messageContext the message context being processed, if available
      * @return true if error was successfully handled, false otherwise
      */
-    boolean handleError(Throwable t, MessageContext<MessageType> messageContext);
+    boolean handleError(Throwable t, MessageContext messageContext);
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/PipelineMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/PipelineMessageErrorHandler.java
index 23900e3..41b7650 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/PipelineMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/PipelineMessageErrorHandler.java
@@ -24,37 +24,35 @@ import org.opensaml.messaging.handler.MessageHandler;
 /**
  * A specialization of error handler where the error is handled via use of a specified message handler
  * and message encoder.
- * 
- * @param <MessageType> the type of message being handled
  */
-public interface PipelineMessageErrorHandler<MessageType> extends MessageErrorHandler<MessageType> {
+public interface PipelineMessageErrorHandler extends MessageErrorHandler {
     
     /**
      * Get the handler to invoke on the outbound error message.
      * 
      * @return the outbound error handler
      */
-    MessageHandler<MessageType> getHandler();
+    MessageHandler getHandler();
     
     /**
      * Set the handler to invoke on the outbound error message.
      * 
      * @param handler the outbound error handler
      */
-    void setHandler(MessageHandler<MessageType> handler);
+    void setHandler(MessageHandler handler);
 
     /**
      * Get the message encoder used to encode the outbound error message.
      * 
      * @return the outbound error message encoder
      */
-    MessageEncoder<MessageType> getMessageEncoder();
+    MessageEncoder getMessageEncoder();
     
     /**
      * Set the message encoder used to encode the outbound error message.
      * 
      * @param messageEncoder the outbound error message encoder
      */
-    void setMessageEncoder(MessageEncoder<MessageType> messageEncoder);
+    void setMessageEncoder(MessageEncoder messageEncoder);
     
-}
+}
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/TypedMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/TypedMessageErrorHandler.java
index bf6dddc..3a954ab 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/TypedMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/TypedMessageErrorHandler.java
@@ -20,10 +20,8 @@ package org.opensaml.messaging.error;
 /**
  * A specialization of error handler that explicitly indicates that it is capable of handling 
  * one or more types of throwable errors.
- * 
- * @param <MessageType> the type of message being handled
  */
-public interface TypedMessageErrorHandler<MessageType> extends MessageErrorHandler<MessageType> {
+public interface TypedMessageErrorHandler extends MessageErrorHandler {
     
     /**
      * Indicates whether the message error handle is capable of handling the specified error.
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
index 60cf2db..d9356ce 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/AbstractHttpServletMessageErrorHandler.java
@@ -24,11 +24,8 @@ import javax.servlet.http.HttpServletResponse;
 
 /**
  * Abstract implementation of {@link HttpServletMessageErrorHandler}.
- * 
- * @param <MessageType> the type of messge being handled
  */
-public abstract class AbstractHttpServletMessageErrorHandler<MessageType> 
-        implements HttpServletMessageErrorHandler<MessageType> {
+public abstract class AbstractHttpServletMessageErrorHandler implements HttpServletMessageErrorHandler {
     
     /** The HTTP servlet request. */
     private HttpServletRequest request;
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
index 2a74426..194ed3b 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/error/servlet/HttpServletMessageErrorHandler.java
@@ -26,10 +26,8 @@ import org.opensaml.messaging.error.MessageErrorHandler;
 
 /**
  * A specialization of message error handler for HTTP servlet container environments.
- * 
- * @param <MessageType> the type of message being handled
  */
-public interface HttpServletMessageErrorHandler<MessageType> extends MessageErrorHandler<MessageType> {
+public interface HttpServletMessageErrorHandler extends MessageErrorHandler {
     
     /**
      * Get the HTTP servlet request.
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
index 2f11aba..50089f6 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/AbstractMessageHandler.java
@@ -35,12 +35,9 @@ import com.google.common.base.Predicates;
 
 /**
  * A base abstract implementation of {@link MessageHandler}.
- * 
- * @param <MessageType> the type of message being handled
  */
 @Prototype
-public abstract class AbstractMessageHandler<MessageType> extends AbstractInitializableComponent implements
-        MessageHandler<MessageType> {
+public abstract class AbstractMessageHandler extends AbstractInitializableComponent implements MessageHandler {
     
     /** Logger. */
     private Logger log = LoggerFactory.getLogger(AbstractMessageHandler.class);
@@ -82,7 +79,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
     }
 
     /** {@inheritDoc} */
-    @Override public void invoke(@Nonnull final MessageContext<MessageType> messageContext)
+    @Override public void invoke(@Nonnull final MessageContext messageContext)
             throws MessageHandlerException {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
 
@@ -143,7 +140,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
      * 
      * @throws MessageHandlerException if there is a problem executing the handler pre-routine
      */
-    protected boolean doPreInvoke(@Nonnull final MessageContext<MessageType> messageContext)
+    protected boolean doPreInvoke(@Nonnull final MessageContext messageContext)
             throws MessageHandlerException {
         if (activationCondition.test(messageContext)) {
             log.debug("{} Activation condition for handler returned true", getLogPrefix());
@@ -160,7 +157,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
      * @param messageContext the message context on which to invoke the handler
      * @throws MessageHandlerException if there is an error invoking the handler on the message context
      */
-    protected abstract void doInvoke(@Nonnull final MessageContext<MessageType> messageContext)
+    protected abstract void doInvoke(@Nonnull final MessageContext messageContext)
             throws MessageHandlerException;
 
     /**
@@ -173,7 +170,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
      * 
      * @param messageContext the message context on which the handler was invoked
      */
-    protected void doPostInvoke(@Nonnull final MessageContext<MessageType> messageContext) {
+    protected void doPostInvoke(@Nonnull final MessageContext messageContext) {
     }
 
     /**
@@ -197,7 +194,7 @@ public abstract class AbstractMessageHandler<MessageType> extends AbstractInitia
      * @param messageContext the message context on which the handler was invoked
      * @param e an exception raised by the {@link #doInvoke} method
      */
-    protected void doPostInvoke(@Nonnull final MessageContext<MessageType> messageContext, @Nonnull final Exception e) {
+    protected void doPostInvoke(@Nonnull final MessageContext messageContext, @Nonnull final Exception e) {
         doPostInvoke(messageContext);
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandler.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandler.java
index 0e3adfb..7385364 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandler.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandler.java
@@ -27,10 +27,8 @@ import org.opensaml.messaging.context.MessageContext;
 /**
  *
  *A message handler represents some reusable logic that may be invoked on a message context.
- *
- * @param <MessageType> the type of message being handled
  */
-public interface MessageHandler<MessageType> extends InitializableComponent {
+public interface MessageHandler extends InitializableComponent {
     
     /**
      * Invoke the handler on the specified message context.
@@ -38,6 +36,6 @@ public interface MessageHandler<MessageType> extends InitializableComponent {
      * @param messageContext the message context on which to invoke the handler
      * @throws MessageHandlerException if the there is an error invoking the handler on the message context
      */
-    void invoke(@Nonnull final MessageContext<MessageType> messageContext) throws MessageHandlerException;
+    void invoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException;
     
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandlerChain.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandlerChain.java
index 1c712f1..8934139 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandlerChain.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/handler/MessageHandlerChain.java
@@ -27,16 +27,14 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElemen
  *
  * A specialization of {@link MessageHandler} which represents an ordered list of
  * message handlers which may be invoked in order.
- * 
- * @param <MessageType> the type of message being handled
  */
-public interface MessageHandlerChain<MessageType> extends MessageHandler<MessageType> {
+public interface MessageHandlerChain extends MessageHandler {
     
     /**
      * Get the ordered list of message handlers which comprise the handler chain.
      * 
      * @return the list of members of the handler chain
      */
-    @NonnullAfterInit @NonnullElements List<MessageHandler<MessageType>> getHandlers();
+    @NonnullAfterInit @NonnullElements List<MessageHandler> getHandlers();
     
 }
\ No newline at end of file
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/BasicMessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/BasicMessagePipeline.java
index af69975..a0cd652 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/BasicMessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/BasicMessagePipeline.java
@@ -28,27 +28,24 @@ import org.opensaml.messaging.handler.MessageHandler;
 
 /**
  * Basic implementation of {@link MessagePipeline}.
- *
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public class BasicMessagePipeline<InboundMessageType, OutboundMessageType> 
-        implements MessagePipeline<InboundMessageType, OutboundMessageType> {
+public class BasicMessagePipeline 
+        implements MessagePipeline {
     
     /** Message encoder. */
-    private MessageEncoder<OutboundMessageType> encoder;
+    private MessageEncoder encoder;
     
     /** Message decoder. */
-    private MessageDecoder<InboundMessageType> decoder;
+    private MessageDecoder decoder;
     
     /** Outbound payload message handler. */
-    private MessageHandler<OutboundMessageType> outboundPayloadHandler;
+    private MessageHandler outboundPayloadHandler;
     
     /** Outbound transport message handler. */
-    private MessageHandler<OutboundMessageType> outboundTransportHandler;
+    private MessageHandler outboundTransportHandler;
     
     /** Inbound message handler. */
-    private MessageHandler<InboundMessageType> inboundHandler;
+    private MessageHandler inboundHandler;
     
     /**
      * Constructor.
@@ -56,14 +53,14 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * @param newEncoder the message encoder instance
      * @param newDecoder the message decoder instance
      */
-    public BasicMessagePipeline(@Nonnull final MessageEncoder<OutboundMessageType> newEncoder, 
-            @Nonnull final MessageDecoder<InboundMessageType> newDecoder) {
+    public BasicMessagePipeline(@Nonnull final MessageEncoder newEncoder, 
+            @Nonnull final MessageDecoder newDecoder) {
         setEncoder(newEncoder);
         setDecoder(newDecoder);
     }
 
     /** {@inheritDoc} */
-    public MessageEncoder<OutboundMessageType> getEncoder() {
+    public MessageEncoder getEncoder() {
         return encoder;
     }
     
@@ -72,12 +69,12 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * 
      * @param newEncoder the new message encoder
      */
-    protected void setEncoder(@Nonnull final MessageEncoder<OutboundMessageType> newEncoder) {
+    protected void setEncoder(@Nonnull final MessageEncoder newEncoder) {
        encoder = Constraint.isNotNull(newEncoder, "MessageEncoder can not be null") ;
     }
 
     /** {@inheritDoc} */
-    public MessageDecoder<InboundMessageType> getDecoder() {
+    public MessageDecoder getDecoder() {
         return decoder;
     }
     
@@ -86,13 +83,13 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * 
      * @param newDecoder the new message decoder
      */
-    protected void setDecoder(@Nonnull final MessageDecoder<InboundMessageType> newDecoder) {
+    protected void setDecoder(@Nonnull final MessageDecoder newDecoder) {
        decoder = Constraint.isNotNull(newDecoder, "MessageDecoder can not be null");
     }
 
 
     /** {@inheritDoc} */
-    public MessageHandler<OutboundMessageType> getOutboundPayloadMessageHandler() {
+    public MessageHandler getOutboundPayloadMessageHandler() {
         return outboundPayloadHandler;
     }
 
@@ -101,12 +98,12 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * 
      * @param handler the new handler
      */
-    public void setOutboundPayloadHandler(@Nullable final MessageHandler<OutboundMessageType> handler) {
+    public void setOutboundPayloadHandler(@Nullable final MessageHandler handler) {
         outboundPayloadHandler = handler;
     }
 
     /** {@inheritDoc} */
-    public MessageHandler<OutboundMessageType> getOutboundTransportMessageHandler() {
+    public MessageHandler getOutboundTransportMessageHandler() {
         return outboundTransportHandler;
     }
 
@@ -115,12 +112,12 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * 
      * @param handler the new handler
      */
-    public void setOutboundTransportHandler(final MessageHandler<OutboundMessageType> handler) {
+    public void setOutboundTransportHandler(final MessageHandler handler) {
         outboundTransportHandler = handler;
     }
 
     /** {@inheritDoc} */
-    public MessageHandler<InboundMessageType> getInboundMessageHandler() {
+    public MessageHandler getInboundMessageHandler() {
         return inboundHandler;
     }
     
@@ -129,7 +126,7 @@ public class BasicMessagePipeline<InboundMessageType, OutboundMessageType>
      * 
      * @param handler the new handler
      */
-    public void setInboundHandler(final MessageHandler<InboundMessageType> handler) {
+    public void setInboundHandler(final MessageHandler handler) {
         inboundHandler = handler;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/MessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/MessagePipeline.java
index 01211ba..e1c8edd 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/MessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/MessagePipeline.java
@@ -26,25 +26,22 @@ import org.opensaml.messaging.handler.MessageHandler;
 
 /**
  * Interface representing the basic components of a message processing pipeline.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public interface MessagePipeline<InboundMessageType, OutboundMessageType> {
+public interface MessagePipeline {
     
     /**
      * Get the message encoder instance.
      * 
      * @return the message encoder
      */
-    @Nonnull public MessageEncoder<OutboundMessageType> getEncoder();
+    @Nonnull public MessageEncoder getEncoder();
     
     /**
      * Get the message decoder instance.
      * 
      * @return the message decoder
      */
-    @Nonnull public MessageDecoder<InboundMessageType> getDecoder();
+    @Nonnull public MessageDecoder getDecoder();
     
     /**
      * Get the (optional) outbound payload message handler instance.  
@@ -55,7 +52,7 @@ public interface MessagePipeline<InboundMessageType, OutboundMessageType> {
      * 
      * @return the outbound message handler, may be null
      */
-    @Nullable public MessageHandler<OutboundMessageType> getOutboundPayloadMessageHandler();
+    @Nullable public MessageHandler getOutboundPayloadMessageHandler();
     
     /**
      * Get the (optional) outbound transport message handler instance.  
@@ -67,13 +64,13 @@ public interface MessagePipeline<InboundMessageType, OutboundMessageType> {
      * 
      * @return the outbound message handler, may be null
      */
-    @Nullable public MessageHandler<OutboundMessageType> getOutboundTransportMessageHandler();
+    @Nullable public MessageHandler getOutboundTransportMessageHandler();
     
     /**
      * Get the (optional) inbound message handler instance.  
      * 
      * @return the inbound message handler, may be null
      */
-    public MessageHandler<InboundMessageType> getInboundMessageHandler();
+    public MessageHandler getInboundMessageHandler();
 
 }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
index 47884ff..6045e43 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/StaticPipelineNameStrategy.java
@@ -28,7 +28,7 @@ import org.opensaml.messaging.context.InOutOperationContext;
 /**
  * Static strategy function for resolving a pipeline name.
  */
-public class StaticPipelineNameStrategy implements Function<InOutOperationContext<?,?>, String> {
+public class StaticPipelineNameStrategy implements Function<InOutOperationContext, String> {
     
     /** The static pipeline name. */
     private String pipelineName;
@@ -43,7 +43,7 @@ public class StaticPipelineNameStrategy implements Function<InOutOperationContex
     }
     
     /** {@inheritDoc} */
-    @Nullable public String apply(@Nullable final InOutOperationContext<?, ?> input) {
+    @Nullable public String apply(@Nullable final InOutOperationContext input) {
         return pipelineName;
     }
 
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/BasicHttpClientMessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/BasicHttpClientMessagePipeline.java
index a39b559..3914f3d 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/BasicHttpClientMessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/BasicHttpClientMessagePipeline.java
@@ -27,13 +27,8 @@ import org.opensaml.messaging.pipeline.BasicMessagePipeline;
 
 /**
  * Basic implementation of {@link HttpClientMessagePipeline}.
- *
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public class BasicHttpClientMessagePipeline<InboundMessageType, OutboundMessageType> 
-        extends BasicMessagePipeline<InboundMessageType, OutboundMessageType>
-        implements HttpClientMessagePipeline<InboundMessageType, OutboundMessageType>{
+public class BasicHttpClientMessagePipeline extends BasicMessagePipeline implements HttpClientMessagePipeline{
     
     /**
      * Constructor.
@@ -41,18 +36,18 @@ public class BasicHttpClientMessagePipeline<InboundMessageType, OutboundMessageT
      * @param newEncoder the message encoder instance
      * @param newDecoder the message decoder instance
      */
-    public BasicHttpClientMessagePipeline(@Nonnull final MessageEncoder<OutboundMessageType> newEncoder, 
-            @Nonnull final MessageDecoder<InboundMessageType> newDecoder) {
+    public BasicHttpClientMessagePipeline(@Nonnull final MessageEncoder newEncoder, 
+            @Nonnull final MessageDecoder newDecoder) {
         super(newEncoder, newDecoder);
     }
 
     /** {@inheritDoc} */
-    public HttpClientRequestMessageEncoder<OutboundMessageType> getEncoder() {
-        return (HttpClientRequestMessageEncoder<OutboundMessageType>) super.getEncoder();
+    public HttpClientRequestMessageEncoder getEncoder() {
+        return (HttpClientRequestMessageEncoder) super.getEncoder();
     }
 
     /** {@inheritDoc} */
-    protected void setEncoder(final MessageEncoder<OutboundMessageType> encoder) {
+    protected void setEncoder(final MessageEncoder encoder) {
         if (!(encoder instanceof HttpClientRequestMessageEncoder)) {
             throw new IllegalArgumentException("HttpClientRequestMessageEncoder is required");
         }
@@ -60,12 +55,12 @@ public class BasicHttpClientMessagePipeline<InboundMessageType, OutboundMessageT
     }
 
     /** {@inheritDoc} */
-    public HttpClientResponseMessageDecoder<InboundMessageType> getDecoder() {
+    public HttpClientResponseMessageDecoder getDecoder() {
         return (HttpClientResponseMessageDecoder) super.getDecoder();
     }
 
     /** {@inheritDoc} */
-    protected void setDecoder(final MessageDecoder<InboundMessageType> decoder) {
+    protected void setDecoder(final MessageDecoder decoder) {
         if (!(decoder instanceof HttpClientResponseMessageDecoder)) {
             throw new IllegalArgumentException("HttpClientResponseMessageDecoder is required");
         }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipeline.java
index b0fd738..df5da95 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipeline.java
@@ -23,25 +23,21 @@ import org.opensaml.messaging.pipeline.MessagePipeline;
 
 /**
  * Specialization of {@link MessagePipeline} which narrows the type of allowed encoders and decoders.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public interface HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> 
-        extends MessagePipeline<InboundMessageType, OutboundMessageType> {
+public interface HttpClientMessagePipeline extends MessagePipeline {
     
     /**
      * {@inheritDoc} 
      * 
      * <p>Narrows the super-interface return type to {@link HttpClientRequestMessageEncoder}.</p>
      */
-    public HttpClientRequestMessageEncoder<OutboundMessageType> getEncoder();
+    public HttpClientRequestMessageEncoder getEncoder();
     
     /**
      * {@inheritDoc} 
      * 
      * <p>Narrows the super-interface return type to {@link HttpClientResponseMessageDecoder}.</p>
      */
-    public HttpClientResponseMessageDecoder<InboundMessageType> getDecoder();
+    public HttpClientResponseMessageDecoder getDecoder();
 
 }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipelineFactory.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipelineFactory.java
index fb2c9ef..304eb8a 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipelineFactory.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/httpclient/HttpClientMessagePipelineFactory.java
@@ -23,18 +23,15 @@ import javax.annotation.Nullable;
 
 /**
  * Factory for instances of {@link HttpClientMessagePipeline}.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public interface HttpClientMessagePipelineFactory<InboundMessageType, OutboundMessageType> {
+public interface HttpClientMessagePipelineFactory {
     
     /**
      * Return a new instance of {@link HttpClientMessagePipeline}.
      * 
      * @return a new pipeline instance
      */
-    @Nonnull HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> newInstance();
+    @Nonnull HttpClientMessagePipeline newInstance();
     
     /**
      * Return a new instance of {@link HttpClientMessagePipeline}.
@@ -43,7 +40,7 @@ public interface HttpClientMessagePipelineFactory<InboundMessageType, OutboundMe
      * 
      * @return a new pipeline instance
      */
-    @Nonnull HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> newInstance(
+    @Nonnull HttpClientMessagePipeline newInstance(
             @Nullable final String pipelineName);
 
 }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/BasicHttpServletMessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/BasicHttpServletMessagePipeline.java
index a9efb94..fdf027d 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/BasicHttpServletMessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/BasicHttpServletMessagePipeline.java
@@ -27,13 +27,8 @@ import org.opensaml.messaging.pipeline.BasicMessagePipeline;
 
 /**
  * Basic implementation of {@link HttpServletMessagePipeline}.
- *
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public class BasicHttpServletMessagePipeline<InboundMessageType, OutboundMessageType> 
-        extends BasicMessagePipeline<InboundMessageType, OutboundMessageType>
-        implements HttpServletMessagePipeline<InboundMessageType, OutboundMessageType>{
+public class BasicHttpServletMessagePipeline extends BasicMessagePipeline implements HttpServletMessagePipeline{
     
     /**
      * Constructor.
@@ -41,18 +36,18 @@ public class BasicHttpServletMessagePipeline<InboundMessageType, OutboundMessage
      * @param newEncoder the message encoder instance
      * @param newDecoder the message decoder instance
      */
-    public BasicHttpServletMessagePipeline(@Nonnull final MessageEncoder<OutboundMessageType> newEncoder, 
-            @Nonnull final MessageDecoder<InboundMessageType> newDecoder) {
+    public BasicHttpServletMessagePipeline(@Nonnull final MessageEncoder newEncoder, 
+            @Nonnull final MessageDecoder newDecoder) {
         super(newEncoder, newDecoder);
     }
 
     /** {@inheritDoc} */
-    public HttpServletResponseMessageEncoder<OutboundMessageType> getEncoder() {
-        return (HttpServletResponseMessageEncoder<OutboundMessageType>) super.getEncoder();
+    public HttpServletResponseMessageEncoder getEncoder() {
+        return (HttpServletResponseMessageEncoder) super.getEncoder();
     }
 
     /** {@inheritDoc} */
-    protected void setEncoder(final MessageEncoder<OutboundMessageType> encoder) {
+    protected void setEncoder(final MessageEncoder encoder) {
         if (!(encoder instanceof HttpServletResponseMessageEncoder)) {
             throw new IllegalArgumentException("HttpServletResponseMessageEncoder is required");
         }
@@ -60,12 +55,12 @@ public class BasicHttpServletMessagePipeline<InboundMessageType, OutboundMessage
     }
 
     /** {@inheritDoc} */
-    public HttpServletRequestMessageDecoder<InboundMessageType> getDecoder() {
+    public HttpServletRequestMessageDecoder getDecoder() {
         return (HttpServletRequestMessageDecoder) super.getDecoder();
     }
 
     /** {@inheritDoc} */
-    protected void setDecoder(final MessageDecoder<InboundMessageType> decoder) {
+    protected void setDecoder(final MessageDecoder decoder) {
         if (!(decoder instanceof HttpServletRequestMessageDecoder)) {
             throw new IllegalArgumentException("HttpServletRequestMessageDecoder is required");
         }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipeline.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipeline.java
index c29c625..163059c 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipeline.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipeline.java
@@ -23,25 +23,21 @@ import org.opensaml.messaging.pipeline.MessagePipeline;
 
 /**
  * Specialization of {@link MessagePipeline} which narrows the type of allowed encoders and decoders.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public interface HttpServletMessagePipeline<InboundMessageType, OutboundMessageType> 
-        extends MessagePipeline<InboundMessageType, OutboundMessageType> {
+public interface HttpServletMessagePipeline extends MessagePipeline {
     
     /**
      * {@inheritDoc} 
      * 
      * <p>Narrows the super-interface return type to {@link HttpServletResponseMessageEncoder}.</p>
      */
-    public HttpServletResponseMessageEncoder<OutboundMessageType> getEncoder();
+    public HttpServletResponseMessageEncoder getEncoder();
     
     /**
      * {@inheritDoc} 
      * 
      * <p>Narrows the super-interface return type to {@link HttpServletRequestMessageDecoder}.</p>
      */
-    public HttpServletRequestMessageDecoder<InboundMessageType> getDecoder();
+    public HttpServletRequestMessageDecoder getDecoder();
 
 }
diff --git a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipelineFactory.java b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipelineFactory.java
index 496b0d3..64bf50a 100644
--- a/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipelineFactory.java
+++ b/opensaml-messaging-api/src/main/java/org/opensaml/messaging/pipeline/servlet/HttpServletMessagePipelineFactory.java
@@ -23,18 +23,15 @@ import javax.annotation.Nullable;
 
 /**
  * Factory for instances of {@link HttpServletMessagePipeline}.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
-public interface HttpServletMessagePipelineFactory<InboundMessageType, OutboundMessageType> {
+public interface HttpServletMessagePipelineFactory {
     
     /**
      * Return a new instance of {@link HttpServletMessagePipelineFactory}.
      * 
      * @return a new pipeline instance
      */
-    @Nonnull HttpServletMessagePipeline<InboundMessageType, OutboundMessageType> newInstance();
+    @Nonnull HttpServletMessagePipeline newInstance();
 
     /**
      * Return a new instance of {@link HttpServletMessagePipelineFactory}.
@@ -43,7 +40,7 @@ public interface HttpServletMessagePipelineFactory<InboundMessageType, OutboundM
      * 
      * @return a new pipeline instance
      */
-    @Nonnull HttpServletMessagePipeline<InboundMessageType, OutboundMessageType> newInstance(
+    @Nonnull HttpServletMessagePipeline newInstance(
             @Nullable final String pipelineName);
 
 }
diff --git a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/InOutOperationContextText.java b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/InOutOperationContextText.java
index ad03989..d6188fe 100644
--- a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/InOutOperationContextText.java
+++ b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/InOutOperationContextText.java
@@ -27,10 +27,10 @@ public class InOutOperationContextText {
     
     @Test
     public void testInboundContextParentLinkage() {
-        MessageContext mc1 = new MessageContext<>();
-        MessageContext mc2 = new MessageContext<>();
+        MessageContext mc1 = new MessageContext();
+        MessageContext mc2 = new MessageContext();
         
-       InOutOperationContext opContext = new InOutOperationContext<>(mc1, null);
+       InOutOperationContext opContext = new InOutOperationContext(mc1, null);
        
        Assert.assertSame(opContext.getInboundMessageContext(), mc1);
        Assert.assertSame(mc1.getParent(), opContext);
@@ -49,10 +49,10 @@ public class InOutOperationContextText {
     
     @Test
     public void testOutboundContextParentLinkage() {
-        MessageContext mc1 = new MessageContext<>();
-        MessageContext mc2 = new MessageContext<>();
+        MessageContext mc1 = new MessageContext();
+        MessageContext mc2 = new MessageContext();
         
-       InOutOperationContext opContext = new InOutOperationContext<>(null, mc1);
+       InOutOperationContext opContext = new InOutOperationContext(null, mc1);
        
        Assert.assertSame(opContext.getOutboundMessageContext(), mc1);
        Assert.assertSame(mc1.getParent(), opContext);
diff --git a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/MockHttpServletRequestLookupStrategy.java b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/MockHttpServletRequestLookupStrategy.java
index 46ff1cf..69a6346 100644
--- a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/MockHttpServletRequestLookupStrategy.java
+++ b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/MockHttpServletRequestLookupStrategy.java
@@ -28,7 +28,7 @@ import org.opensaml.messaging.context.MessageContext;
  *  A lookup strategy that returns an instance of {@link HttpServletRequest} supplied at construction time.
  */
 public class MockHttpServletRequestLookupStrategy 
-        implements ContextDataLookupFunction<MessageContext<?>, HttpServletRequest> {
+        implements ContextDataLookupFunction<MessageContext, HttpServletRequest> {
     
     /** The servlet request. */
     private HttpServletRequest servletRequest;
diff --git a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookupTest.java b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookupTest.java
index f7c8122..84bd3ff 100644
--- a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookupTest.java
+++ b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/context/navigate/RecursiveTypedParentContextLookupTest.java
@@ -35,8 +35,8 @@ public class RecursiveTypedParentContextLookupTest {
         MockContext1 mc1 = new MockContext1();
         MockContext2 mc2 = new MockContext2();
         MockContext3 mc3 = new MockContext3();
-        MessageContext in = new MessageContext<>();
-        InOutOperationContext opContext = new InOutOperationContext<>(null, null);
+        MessageContext in = new MessageContext();
+        InOutOperationContext opContext = new InOutOperationContext(null, null);
         
         opContext.setInboundMessageContext(in);
         opContext.getInboundMessageContext().addSubcontext(mc1);
diff --git a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
index 1b4c598..8910d78 100644
--- a/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
+++ b/opensaml-messaging-api/src/test/java/org/opensaml/messaging/handler/AbstractMessageHandlerTest.java
@@ -115,7 +115,7 @@ public class AbstractMessageHandlerTest {
         handler.setActivationCondition(Predicates.alwaysTrue());
         handler.initialize();
         
-        MessageContext messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         handler.invoke(messageContext);
         
         Assert.assertTrue(messageContext.containsSubcontext(MockContext.class));
@@ -128,7 +128,7 @@ public class AbstractMessageHandlerTest {
         handler.setActivationCondition(Predicates.alwaysFalse());
         handler.initialize();
         
-        MessageContext messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         handler.invoke(messageContext);
         
         Assert.assertFalse(messageContext.containsSubcontext(MockContext.class));
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
index b0c3925..5bfbbe6 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/AbstractMessageChannelSecurity.java
@@ -34,10 +34,8 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * Abstract base class for message handlers which populate a
  * {@link org.opensaml.messaging.context.MessageChannelSecurityContext} on a {@link BaseContext},
  * where the latter is located using a lookup strategy.
- * 
- * @param <MessageType> the type of message being carried
  */
-public abstract class AbstractMessageChannelSecurity<MessageType> extends AbstractMessageHandler<MessageType> {
+public abstract class AbstractMessageChannelSecurity extends AbstractMessageHandler {
     
     /**
      * Strategy used to look up the parent {@link BaseContext} on which the
@@ -51,7 +49,7 @@ public abstract class AbstractMessageChannelSecurity<MessageType> extends Abstra
     /** Constructor. */
     public AbstractMessageChannelSecurity() {
         //TODO this just returns the input MC - need better default?
-        parentContextLookupStrategy = new Function<MessageContext, BaseContext>() {
+        parentContextLookupStrategy = new Function<>() {
             @Nullable public BaseContext apply(@Nullable final MessageContext input) {
                 return input;
             }
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
index 42b8fb2..47f3b78 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/BasicMessageHandlerChain.java
@@ -38,14 +38,12 @@ import com.google.common.collect.Collections2;
 
 /**
  * A basic implementation of {@link MessageHandlerChain}.
- * 
- * @param <MessageType> the type of message being handled
  */
-public class BasicMessageHandlerChain<MessageType> extends AbstractMessageHandler<MessageType> 
-    implements MessageHandlerChain<MessageType> {
+public class BasicMessageHandlerChain extends AbstractMessageHandler 
+    implements MessageHandlerChain {
 
     /** The list of members of the handler chain. */
-    @NonnullAfterInit @NonnullElements private List<MessageHandler<MessageType>> members;
+    @NonnullAfterInit @NonnullElements private List<MessageHandler> members;
     
     /** 
      * {@inheritDoc}
@@ -56,7 +54,7 @@ public class BasicMessageHandlerChain<MessageType> extends AbstractMessageHandle
      * </p>
      * 
      * */
-    @NonnullAfterInit @NonnullElements public List<MessageHandler<MessageType>> getHandlers() {
+    @NonnullAfterInit @NonnullElements public List<MessageHandler> getHandlers() {
         return members;
     }
     
@@ -70,18 +68,18 @@ public class BasicMessageHandlerChain<MessageType> extends AbstractMessageHandle
      * 
      * @param handlers the list of message handler members
      */
-    public void setHandlers(@Nullable @NonnullElements final List<MessageHandler<MessageType>> handlers) {
+    public void setHandlers(@Nullable @NonnullElements final List<MessageHandler> handlers) {
         if (handlers != null) {
-            final ArrayList<MessageHandler<MessageType>> newMembers = new ArrayList<>();
+            final ArrayList<MessageHandler> newMembers = new ArrayList<>();
             newMembers.addAll(Collections2.filter(handlers, Predicates.notNull()));
             members = newMembers;
         } else {
-            members = Collections.EMPTY_LIST;
+            members = Collections.emptyList();
         }
     }
 
     /** {@inheritDoc} */
-    public void doInvoke(@Nonnull final MessageContext<MessageType> msgContext) throws MessageHandlerException {
+    public void doInvoke(@Nonnull final MessageContext msgContext) throws MessageHandlerException {
         if (members != null) {
             for (final MessageHandler handler: members) {
                 handler.invoke(msgContext);
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
index b796a26..42a8128 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/MessageHandlerErrorStrategyAdapter.java
@@ -59,16 +59,14 @@ import com.google.common.collect.Collections2;
  * Whether the thrown {@link Throwable} is rethrown by this handler is determined by the flags 
  * {@link #setRethrowIfHandled(boolean)} and {@link #setRethrowIfNotHandled(boolean)}.
  * </p>
- * 
- * @param <MessageType> the type of message handled by the handler
  */
-public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMessageHandler<MessageType> {
+public class MessageHandlerErrorStrategyAdapter extends AbstractMessageHandler {
     
     /** Logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(MessageHandlerErrorStrategyAdapter.class);
     
     /** The wrapped message handler. */
-    @Nonnull private MessageHandler<MessageType> wrappedHandler;
+    @Nonnull private MessageHandler wrappedHandler;
     
     /** The list of typed error handlers. */
     @Nonnull @NonnullElements private List<TypedMessageErrorHandler> errorHandlers;
@@ -86,7 +84,7 @@ public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMes
      * @param messageHandler the wrapped message handler
      * @param typedErrorHandlers the list of typed error handlers to apply
      */
-    public MessageHandlerErrorStrategyAdapter(@Nonnull final MessageHandler<MessageType> messageHandler, 
+    public MessageHandlerErrorStrategyAdapter(@Nonnull final MessageHandler messageHandler, 
             @Nonnull @NonnullElements final List<TypedMessageErrorHandler> typedErrorHandlers) {
         wrappedHandler = Constraint.isNotNull(messageHandler, "Wrapped MessageHandler cannot be null");
         errorHandlers = new ArrayList<>(Collections2.filter(
@@ -123,7 +121,7 @@ public class MessageHandlerErrorStrategyAdapter<MessageType> extends AbstractMes
 
 
     /** {@inheritDoc} */
-    protected void doInvoke(final MessageContext<MessageType> messageContext) throws MessageHandlerException {
+    protected void doInvoke(final MessageContext messageContext) throws MessageHandlerException {
         try {
             wrappedHandler.invoke(messageContext);
         } catch (final Throwable t) {
diff --git a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
index 79e9dda..209530d 100644
--- a/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
+++ b/opensaml-messaging-impl/src/main/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessage.java
@@ -20,6 +20,7 @@ package org.opensaml.messaging.handler.impl;
 import java.io.IOException;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.validation.Schema;
 import javax.xml.validation.Validator;
@@ -37,17 +38,18 @@ import org.xml.sax.SAXException;
 /**
  * A handler that schema validates an XML-based message.
  * 
- * @param <MessageType> type of message on which to operate
- * 
  * @pre <pre>MessageContext.getMessage().getDOM() != null</pre>
  */
-public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends AbstractMessageHandler<MessageType> {
+public class SchemaValidateXMLMessage extends AbstractMessageHandler {
 
     /** Class logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(SchemaValidateXMLMessage.class);
 
     /** Schema used to validate incoming messages. */
     @Nonnull private final Schema validationSchema;
+    
+    /** The message to validate. */
+    @Nullable private XMLObject message;
 
     /**
      * Constructor.
@@ -68,7 +70,7 @@ public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends Abs
     }
 
     /** {@inheritDoc} */
-    protected boolean doPreInvoke(@Nonnull final MessageContext<MessageType> messageContext)
+    protected boolean doPreInvoke(@Nonnull final MessageContext messageContext)
             throws MessageHandlerException {
         
         if (!super.doPreInvoke(messageContext)) {
@@ -76,12 +78,16 @@ public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends Abs
         }
         
         if (messageContext.getMessage() == null) {
-            
             log.debug("{} Message context did not contain a message, unable to proceed", getLogPrefix());
             throw new MessageHandlerException("Message context did not contain a message, unable to proceed.");
+        } else if (!(messageContext.getMessage() instanceof XMLObject)) {
+            log.debug("{} Message context did not contain an XMLObject, unable to proceed", getLogPrefix());
+            throw new MessageHandlerException("Message context did not contain an XMLObject, unable to proceed.");
         }
+        
+        message = (XMLObject) messageContext.getMessage();
 
-        if (messageContext.getMessage().getDOM() == null) {
+        if (message.getDOM() == null) {
             log.debug("{} Message doesn't contain a DOM, unable to proceed", getLogPrefix());
             throw new MessageHandlerException("Message doesn't contain a DOM, unable to proceed.");
         }
@@ -90,23 +96,23 @@ public class SchemaValidateXMLMessage<MessageType extends XMLObject> extends Abs
     }
     
     /** {@inheritDoc} */
-    protected void doInvoke(@Nonnull final MessageContext<MessageType> messageContext)
+    protected void doInvoke(@Nonnull final MessageContext messageContext)
             throws MessageHandlerException {
 
         log.debug("{} Attempting to schema validate incoming message", getLogPrefix());
 
         try {
             final Validator schemaValidator = validationSchema.newValidator();
-            schemaValidator.validate(new DOMSource(messageContext.getMessage().getDOM()));
+            schemaValidator.validate(new DOMSource(message.getDOM()));
         } catch (final SAXException e) {
-            log.debug("{} Message {} is not schema-valid", getLogPrefix(), messageContext.getMessage()
-                    .getElementQName(), e);
+            log.debug("{} Message {} is not schema-valid", getLogPrefix(), message.getElementQName(), e);
             throw new MessageHandlerException("Message is not schema-valid.", e);
         } catch (final IOException e) {
             log.debug("{} Unable to read message", getLogPrefix(), e);
             throw new MessageHandlerException("Unable to read message.", e);
         }
 
-        log.debug("{} Message {} is valid", getLogPrefix(), messageContext.getMessage().getElementQName());
+        log.debug("{} Message {} is valid", getLogPrefix(), message.getElementQName());
     }
+    
 }
\ No newline at end of file
diff --git a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessageTest.java b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessageTest.java
index 192fdd6..ca73c12 100644
--- a/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessageTest.java
+++ b/opensaml-messaging-impl/src/test/java/org/opensaml/messaging/handler/impl/SchemaValidateXMLMessageTest.java
@@ -81,7 +81,7 @@ public class SchemaValidateXMLMessageTest extends XMLObjectBaseTestCase {
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testNullDom() throws Exception {
 
-        final SchemaValidateXMLMessage<SimpleXMLObject> handler = new SchemaValidateXMLMessage(schema);
+        final SchemaValidateXMLMessage handler = new SchemaValidateXMLMessage(schema);
         handler.initialize();
 
         final MessageContext messageContext = new MessageContext();
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
index 574f64f..7a0a12f 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractConditionalProfileAction.java
@@ -35,12 +35,8 @@ import com.google.common.base.Predicates;
  * <p>A condition does not represent a situation in which an error should be raised, but that normal
  * processing should continue and the action simply doesn't apply, so a false condition does not
  * raise a non-proceed event.</p>
- * 
- * @param <InboundMessageType> type of in-bound message
- * @param <OutboundMessageType> type of out-bound message
  */
-public abstract class AbstractConditionalProfileAction<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public abstract class AbstractConditionalProfileAction extends AbstractProfileAction {
     
     /** Condition dictating whether to run or not. */
     @Nonnull private Predicate<ProfileRequestContext> activationCondition;
@@ -72,8 +68,8 @@ public abstract class AbstractConditionalProfileAction<InboundMessageType, Outbo
     
     /** {@inheritDoc} */
     @Override
-    protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+        
         if (activationCondition.test(profileRequestContext)) {
             return super.doPreExecute(profileRequestContext);
         } else {
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
index 24639a0..889fe5a 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/AbstractProfileAction.java
@@ -37,13 +37,9 @@ import org.slf4j.LoggerFactory;
  * Base class for profile actions.
  * 
  * This base class is annotated with {@link Prototype} to indicate that it is stateful.
- * 
- * @param <InboundMessageType> type of in-bound message
- * @param <OutboundMessageType> type of out-bound message
  */
 @Prototype
-public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageType>
-        extends AbstractInitializableComponent implements ProfileAction<InboundMessageType, OutboundMessageType> {
+public abstract class AbstractProfileAction extends AbstractInitializableComponent implements ProfileAction {
 
     /** Cached log prefix. */
     @Nullable private String logPrefix;
@@ -95,13 +91,12 @@ public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageT
     }
 
     /** {@inheritDoc} */
-    @Override public void execute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override public void execute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
         // Clear any existing EventContext that might be hanging around, and if it exists,
         // copy the Event to a PreviousEventContext. Don't clear any existing PreviousEventContext
         // because it may be from an earlier error of interest to other actions.
-        final EventContext<?> previousEvent = profileRequestContext.getSubcontext(EventContext.class);
+        final EventContext previousEvent = profileRequestContext.getSubcontext(EventContext.class);
         if (previousEvent != null) {
             profileRequestContext.getSubcontext(PreviousEventContext.class, true).setEvent(previousEvent.getEvent());
             profileRequestContext.removeSubcontext(EventContext.class);
@@ -152,8 +147,7 @@ public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageT
      * @param profileRequestContext the current IdP profile request context
      * @return true iff execution should proceed
      */
-    protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
         final MetricContext metricCtx = profileRequestContext.getSubcontext(MetricContext.class);
         if (metricCtx != null) {
@@ -168,8 +162,7 @@ public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageT
      * 
      * @param profileRequestContext the current IdP profile request context
      */
-    protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
     }
 
@@ -184,8 +177,7 @@ public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageT
      * 
      * @param profileRequestContext the current IdP profile request context
      */
-    protected void doPostExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    protected void doPostExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
         final MetricContext metricCtx = profileRequestContext.getSubcontext(MetricContext.class);
         if (metricCtx != null) {
@@ -217,8 +209,7 @@ public abstract class AbstractProfileAction<InboundMessageType, OutboundMessageT
      * @param profileRequestContext the current IdP profile request context
      * @param e an exception raised by the {@link #doExecute} method
      */
-    protected void doPostExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext,
+    protected void doPostExecute(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final Exception e) {
         doPostExecute(profileRequestContext);
     }
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
index bb59680..789f63e 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ActionSupport.java
@@ -38,7 +38,7 @@ public final class ActionSupport {
      * 
      * @param profileRequestContext the context to carry the event
      */
-    public static void buildProceedEvent(@Nonnull final ProfileRequestContext<?,?> profileRequestContext) {
+    public static void buildProceedEvent(@Nonnull final ProfileRequestContext profileRequestContext) {
         profileRequestContext.removeSubcontext(EventContext.class);
     }
 
@@ -49,7 +49,7 @@ public final class ActionSupport {
      * @param eventId the ID of the event
      * 
      */
-    public static void buildEvent(@Nonnull final ProfileRequestContext<?,?> profileRequestContext,
+    public static void buildEvent(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull @NotEmpty final String eventId) {
         
         Constraint.isNotNull(profileRequestContext, "Profile request context cannot be null");
@@ -65,7 +65,7 @@ public final class ActionSupport {
      * @param profileRequestContext the context to carry the event
      * @param event the event
      */
-    public static void buildEvent(@Nonnull final ProfileRequestContext<?,?> profileRequestContext,
+    public static void buildEvent(@Nonnull final ProfileRequestContext profileRequestContext,
             @Nonnull final Object event) {
         
         Constraint.isNotNull(profileRequestContext, "Profile request context cannot be null");
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ProfileAction.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ProfileAction.java
index 50a5f91..8abaab3 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ProfileAction.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/action/ProfileAction.java
@@ -32,17 +32,13 @@ import net.shibboleth.utilities.java.support.component.InitializableComponent;
  * to the tree.</p>
  * 
  * <p>Actions may be stateful or stateless, and are therefore not inherently thread-safe.</p>
- * 
- * @param <InboundMessageType> type of in-bound message
- * @param <OutboundMessageType> type of out-bound message
  */
-public interface ProfileAction<InboundMessageType, OutboundMessageType> extends InitializableComponent {
+public interface ProfileAction extends InitializableComponent {
 
     /**
      * Performs this action.
      * 
      * @param profileRequestContext the current IdP profile request context
      */
-    public void execute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext);
+    public void execute(@Nonnull final ProfileRequestContext profileRequestContext);
 }
\ No newline at end of file
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/EventContext.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/EventContext.java
index bad0d35..3e5cbc7 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/EventContext.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/EventContext.java
@@ -30,20 +30,18 @@ import org.opensaml.messaging.context.BaseContext;
  * a sibling or parent component can create or modify an EventContext. The context contains a
  * generic type that represents an event of meaning to a surrounding processing model, such as
  * a workflow.</p>
- *
- * @param <EventType> the event type of the context 
  */
-public class EventContext<EventType> extends BaseContext {
+public class EventContext extends BaseContext {
 
     /** The event represented. */
-    private EventType event;
+    private Object event;
 
     /**
      * Get the event represented by the context.
      * 
      * @return the event
      */
-    @Nullable public EventType getEvent() {
+    @Nullable public Object getEvent() {
         return event;
     }
 
@@ -54,7 +52,7 @@ public class EventContext<EventType> extends BaseContext {
      * 
      * @return this context
      */
-    @Nonnull public EventContext setEvent(@Nullable final EventType newEvent) {
+    @Nonnull public EventContext setEvent(@Nullable final Object newEvent) {
         event = newEvent;
         
         return this;
diff --git a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/ProfileRequestContext.java b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/ProfileRequestContext.java
index 6d0e9c8..d660b5e 100644
--- a/opensaml-profile-api/src/main/java/org/opensaml/profile/context/ProfileRequestContext.java
+++ b/opensaml-profile-api/src/main/java/org/opensaml/profile/context/ProfileRequestContext.java
@@ -28,13 +28,9 @@ import org.opensaml.messaging.context.InOutOperationContext;
 
 /**
  * Context that holds the ongoing state of a profile request.
- * 
- * @param <InboundMessageType> type of in-bound message
- * @param <OutboundMessageType> type of out-bound message
  */
 @ThreadSafe
-public final class ProfileRequestContext<InboundMessageType, OutboundMessageType> extends
-        InOutOperationContext<InboundMessageType, OutboundMessageType> {
+public final class ProfileRequestContext extends InOutOperationContext {
 
     /** ID under which this context is stored, for example, within maps or sessions. */
     public static final String BINDING_KEY = "opensamlProfileRequestContext";
diff --git a/opensaml-profile-api/src/test/java/org/opensaml/profile/action/ActionTestingSupport.java b/opensaml-profile-api/src/test/java/org/opensaml/profile/action/ActionTestingSupport.java
index a88992b..d2c3e8e 100644
--- a/opensaml-profile-api/src/test/java/org/opensaml/profile/action/ActionTestingSupport.java
+++ b/opensaml-profile-api/src/test/java/org/opensaml/profile/action/ActionTestingSupport.java
@@ -58,7 +58,7 @@ public class ActionTestingSupport {
      * @param profileRequestContext the context to check
      */
     public static void assertProceedEvent(@Nonnull final ProfileRequestContext profileRequestContext) {
-        EventContext<String> ctx = profileRequestContext.getSubcontext(EventContext.class);
+        EventContext ctx = profileRequestContext.getSubcontext(EventContext.class);
         Assert.assertTrue(ctx == null || ctx.getEvent().equals(EventIds.PROCEED_EVENT_ID));
     }
     
diff --git a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
index e2cdcc3..88633e3 100644
--- a/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
+++ b/opensaml-profile-api/src/test/java/org/opensaml/profile/logic/MessageContextPredicateAdapterTest.java
@@ -36,8 +36,8 @@ public class MessageContextPredicateAdapterTest {
     
     @Test
     public void testBasic() {
-        MessageContext mc = new MessageContext<>();
-        ProfileRequestContext prc = new ProfileRequestContext<>();
+        MessageContext mc = new MessageContext();
+        ProfileRequestContext prc = new ProfileRequestContext();
         
         MockPredicate wrapped = new MockPredicate();
         MessageContextPredicateAdapter adapter = new MessageContextPredicateAdapter(wrapped);
@@ -53,7 +53,7 @@ public class MessageContextPredicateAdapterTest {
         Assert.assertFalse(adapter.test(null));
         
         // No parent, unresolved PRC doesn't satisfy (default)
-        mc = new MessageContext<>();
+        mc = new MessageContext();
         mc.addSubcontext(new MockContext());
         Assert.assertFalse(adapter.test(mc));
         
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
index d8fce21..2278af5 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/LogEvent.java
@@ -42,12 +42,9 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 /**
  * A profile action that logs an event if one is found in the profile request context.
  * 
- * @param <Input> input message type
- * @param <Output> output message type
- * 
  * @event {@link org.opensaml.profile.action.EventIds#PROCEED_EVENT_ID}
  */
-public class LogEvent<Input,Output> extends AbstractProfileAction<Input,Output> {
+public class LogEvent extends AbstractProfileAction {
     
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(LogEvent.class);
@@ -92,7 +89,7 @@ public class LogEvent<Input,Output> extends AbstractProfileAction<Input,Output>
     
     /** {@inheritDoc} */
     @Override
-    protected void doExecute(@Nonnull final ProfileRequestContext<Input,Output> profileRequestContext) {
+    protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         final EventContext eventCtx = eventContextLookupStrategy.apply(profileRequestContext);
         if (eventCtx == null || eventCtx.getEvent() == null) {
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
index 4a47fd9..2321baf 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateClientTLSValidationParameters.java
@@ -126,7 +126,7 @@ public class PopulateClientTLSValidationParameters extends AbstractProfileAction
         if (resolver == null) {
             throw new ComponentInitializationException("ClientTLSValidationParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<ProfileRequestContext,List<ClientTLSValidationConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<ClientTLSValidationConfiguration> apply(final ProfileRequestContext input) {
                     return Collections.singletonList(
                             ConfigurationService.get(ClientTLSValidationConfiguration.class));
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
index 2f7e2bd..00640ee 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateDecryptionParameters.java
@@ -123,7 +123,7 @@ public class PopulateDecryptionParameters extends AbstractConditionalProfileActi
         if (resolver == null) {
             throw new ComponentInitializationException("DecryptionParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<ProfileRequestContext,List<DecryptionConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<DecryptionConfiguration> apply(final ProfileRequestContext input) {
                     return Collections.singletonList(SecurityConfigurationSupport.getGlobalDecryptionConfiguration());
                 }
diff --git a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
index 2bff499..4612af0 100644
--- a/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
+++ b/opensaml-profile-impl/src/main/java/org/opensaml/profile/action/impl/PopulateSignatureValidationParameters.java
@@ -124,7 +124,7 @@ public class PopulateSignatureValidationParameters
         if (resolver == null) {
             throw new ComponentInitializationException("SignatureValidationParametersResolver cannot be null");
         } else if (configurationLookupStrategy == null) {
-            configurationLookupStrategy = new Function<ProfileRequestContext,List<SignatureValidationConfiguration>>() {
+            configurationLookupStrategy = new Function<>() {
                 public List<SignatureValidationConfiguration> apply(final ProfileRequestContext input) {
                     return Collections.singletonList(
                             SecurityConfigurationSupport.getGlobalSignatureValidationConfiguration());
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
index d78cdb4..c1eb5dd 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/DecodeMessageTest.java
@@ -87,7 +87,7 @@ public class DecodeMessageTest {
      * Mock implementation of {@link MessageDecoder } which either returns a  
      * {@link MessageContext} with a mock message or throws a {@link MessageDecodingException}.
      */
-    class MockMessageDecoder extends AbstractMessageDecoder<MockMessage> {
+    class MockMessageDecoder extends AbstractMessageDecoder {
 
         /** Whether a {@link MessageDecodingException} should be thrown by {@link #doDecode()}. */
         private boolean throwException = false;
@@ -118,7 +118,7 @@ public class DecodeMessageTest {
             if (throwException) {
                 throw new MessageDecodingException();
             } else {
-                final MessageContext<MockMessage> messageContext = new MessageContext<>();
+                final MessageContext messageContext = new MessageContext();
                 if (message != null) {
                     messageContext.setMessage(message);
                 } else {
diff --git a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
index 0d04d40..5567839 100644
--- a/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
+++ b/opensaml-profile-impl/src/test/java/org/opensaml/profile/action/impl/EncodeMessageTest.java
@@ -43,7 +43,7 @@ public class EncodeMessageTest {
     
     private MockMessageEncoder encoder;
     
-    private MessageContext<MockMessage> messageContext;
+    private MessageContext messageContext;
     
     private ProfileRequestContext profileCtx;
     
@@ -59,7 +59,7 @@ public class EncodeMessageTest {
         // Encoded mock message, keys sorted alphabetically, per MockMessage#toString
         expectedMessage = "bar=1&baz=2&foo=3";
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(message);
         
         profileCtx = new ProfileRequestContext();
@@ -103,7 +103,7 @@ public class EncodeMessageTest {
      * Mock implementation of {@link MessageEncoder} which either returns a  
      * {@link MessageContext} with a mock message or throws a {@link MessageDecodingException}.
      */
-    private class MockMessageEncoder extends AbstractMessageEncoder<MockMessage> {
+    private class MockMessageEncoder extends AbstractMessageEncoder {
 
         /** Whether a {@link MessageEncodingException} should be thrown by {@link #doEncode()}. */
         private boolean throwException = false;
@@ -135,7 +135,7 @@ public class EncodeMessageTest {
             if (throwException) {
                 throw new MessageEncodingException();
             } else {
-                message = getMessageContext().getMessage().getEncoded();
+                message = ((MockMessage) getMessageContext().getMessage()).getEncoded();
             }
         }
     }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/assertion/ValidationContext.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/assertion/ValidationContext.java
index 165ab88..2861bc5 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/assertion/ValidationContext.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/assertion/ValidationContext.java
@@ -52,7 +52,7 @@ public class ValidationContext {
      */
     public ValidationContext(final Map<String, Object> newStaticParameters) {
         if (newStaticParameters == null) {
-            staticParameters = Collections.unmodifiableMap(Collections.EMPTY_MAP);
+            staticParameters = Collections.unmodifiableMap(Collections.emptyMap());
         } else {
             staticParameters = Collections.unmodifiableMap(newStaticParameters);
         }
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
index 6e91cd5..f474b1f 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/SAMLBindingSupport.java
@@ -26,6 +26,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 
+import org.opensaml.core.xml.XMLObject;
 import org.opensaml.messaging.MessageException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.saml.common.SAMLObject;
@@ -60,7 +61,7 @@ public final class SAMLBindingSupport {
      * @param messageContext the message context on which to operate
      * @return the relay state or null
      */
-    @Nullable @NotEmpty public static String getRelayState(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable @NotEmpty public static String getRelayState(@Nonnull final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
         if (bindingContext == null) { 
             return null;
@@ -75,7 +76,7 @@ public final class SAMLBindingSupport {
      * @param messageContext the message context on which to operate
      * @param relayState the relay state to set
      */
-    public static void setRelayState(@Nonnull final MessageContext<SAMLObject> messageContext, 
+    public static void setRelayState(@Nonnull final MessageContext messageContext, 
             @Nullable final String relayState) {
         messageContext.getSubcontext(SAMLBindingContext.class, true).setRelayState(relayState);
     }
@@ -110,14 +111,14 @@ public final class SAMLBindingSupport {
      * 
      * @throws BindingException throw if no relying party endpoint is available
      */
-    @Nonnull public static URI getEndpointURL(@Nonnull final MessageContext<SAMLObject> messageContext) 
+    @Nonnull public static URI getEndpointURL(@Nonnull final MessageContext messageContext) 
             throws BindingException {
-        final SAMLPeerEntityContext peerContext = messageContext.getSubcontext(SAMLPeerEntityContext.class, false);
+        final SAMLPeerEntityContext peerContext = messageContext.getSubcontext(SAMLPeerEntityContext.class);
         if (peerContext == null) {
             throw new BindingException("Message context contained no PeerEntityContext");
         }
         
-        final SAMLEndpointContext endpointContext = peerContext.getSubcontext(SAMLEndpointContext.class, false);
+        final SAMLEndpointContext endpointContext = peerContext.getSubcontext(SAMLEndpointContext.class);
         if (endpointContext == null) {
             throw new BindingException("PeerEntityContext contained no SAMLEndpointContext");
         }
@@ -127,7 +128,7 @@ public final class SAMLBindingSupport {
             throw new BindingException("Endpoint for relying party was null.");
         }
 
-        final SAMLObject message = messageContext.getMessage();
+        final Object message = messageContext.getMessage();
         if ((message instanceof org.opensaml.saml.saml2.core.StatusResponseType 
                 || message instanceof org.opensaml.saml.saml1.core.Response) 
                 && !Strings.isNullOrEmpty(endpoint.getResponseLocation())) {
@@ -193,13 +194,13 @@ public final class SAMLBindingSupport {
      * @param messageContext current message context
      * @return true if the message is considered to be digitally signed, false otherwise
      */
-    public static boolean isMessageSigned(@Nonnull final MessageContext<SAMLObject> messageContext) {
-        final SAMLObject samlMessage = Constraint.isNotNull(messageContext.getMessage(),
+    public static boolean isMessageSigned(@Nonnull final MessageContext messageContext) {
+        final Object samlMessage = Constraint.isNotNull(messageContext.getMessage(),
                 "SAML message was not present in message context");
         if (samlMessage instanceof SignableSAMLObject && ((SignableSAMLObject)samlMessage).isSigned()) {
             return true;
         } else {
-            final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, false);
+            final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
             if (bindingContext != null) {
                 return bindingContext.hasBindingSignature();
             } else {
@@ -220,7 +221,7 @@ public final class SAMLBindingSupport {
      * @param messageContext current message context
      * @return true if the message is considered to be digitally signed, false otherwise
      */
-    public static boolean isSigningCapableBinding(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    public static boolean isSigningCapableBinding(@Nonnull final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class);
         if (bindingContext != null && bindingContext.getBindingDescriptor() != null) {
             return bindingContext.getBindingDescriptor().isSignatureCapable();
@@ -237,7 +238,7 @@ public final class SAMLBindingSupport {
      * @return true if the intended message destination endpoint is required, false if not
      */
     public static boolean isIntendedDestinationEndpointURIRequired(
-            @Nonnull final MessageContext<SAMLObject> messageContext) {
+            @Nonnull final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, false);
         if (bindingContext == null) {
             return false;
@@ -255,8 +256,8 @@ public final class SAMLBindingSupport {
      *              could be processed by the decoder
      */
     @Nullable public static String getIntendedDestinationEndpointURI(
-            @Nonnull final MessageContext<SAMLObject> messageContext)  throws MessageException {
-        final SAMLObject samlMessage = Constraint.isNotNull(messageContext.getMessage(), 
+            @Nonnull final MessageContext messageContext)  throws MessageException {
+        final Object samlMessage = Constraint.isNotNull(messageContext.getMessage(), 
                 "SAML message was not present in message context");
         String messageDestination = null;
         //SAML 2 Request
@@ -278,9 +279,13 @@ public final class SAMLBindingSupport {
         } else if (samlMessage instanceof org.opensaml.saml.saml1.core.RequestAbstractType) {
             // don't treat as an error, just return null
             return null;
+        } else if (samlMessage instanceof XMLObject) {
+            LOG.error("Unknown XML message type encountered: {}",
+                    ((XMLObject) samlMessage).getElementQName().toString());
+            throw new MessageException("Invalid XML message type encountered");
         } else {
-            LOG.error("Unknown SAML message type encountered: {}", samlMessage.getElementQName().toString());
-            throw new MessageException("Invalid SAML message type encountered");
+            LOG.error("Unknown message type encountered");
+            throw new MessageException("Invalid message type encountered");
         }
         return messageDestination;
         
@@ -296,7 +301,7 @@ public final class SAMLBindingSupport {
      *                              context and converted to a string representation
      */
     @Nonnull public static String getActualReceiverEndpointURI(
-            @Nonnull final MessageContext<SAMLObject> messageContext,  @Nonnull final HttpServletRequest request)
+            @Nonnull final MessageContext messageContext,  @Nonnull final HttpServletRequest request)
                     throws MessageException {
         Constraint.isNotNull(request, "HttpServletRequest cannot be null");
         
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/decoding/SAMLMessageDecoder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/decoding/SAMLMessageDecoder.java
index 96f2c03..97507aa 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/decoding/SAMLMessageDecoder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/decoding/SAMLMessageDecoder.java
@@ -22,12 +22,11 @@ import javax.annotation.Nonnull;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.decoder.MessageDecoder;
-import org.opensaml.saml.common.SAMLObject;
 
 /**
  * SAML extension to the generic message decoders.
  */
-public interface SAMLMessageDecoder extends MessageDecoder<SAMLObject> {
+public interface SAMLMessageDecoder extends MessageDecoder {
 
     /**
      * Gets the SAML binding URI supported by this decoder.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/encoding/SAMLMessageEncoder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/encoding/SAMLMessageEncoder.java
index c8f65f9..8b17542 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/encoding/SAMLMessageEncoder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/binding/encoding/SAMLMessageEncoder.java
@@ -22,12 +22,11 @@ import javax.annotation.Nonnull;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.encoder.MessageEncoder;
-import org.opensaml.saml.common.SAMLObject;
 
 /**
  * SAML extension to the generic message encoder.
  */
-public interface SAMLMessageEncoder extends MessageEncoder<SAMLObject> {
+public interface SAMLMessageEncoder extends MessageEncoder {
 
     /**
      * Gets the SAML binding URI supported by this encoder.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
index 3616acf..fd487dc 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/SAMLMessageSecuritySupport.java
@@ -26,7 +26,6 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.config.SAMLConfigurationSupport;
 import org.opensaml.security.SecurityException;
 import org.opensaml.xmlsec.SignatureSigningParameters;
@@ -55,11 +54,11 @@ public final class SAMLMessageSecuritySupport {
      * @throws SignatureException  if there is a problem with the signature operation
      * 
      */
-    public static void signMessage(@Nonnull final MessageContext<SAMLObject> messageContext) 
+    public static void signMessage(@Nonnull final MessageContext messageContext) 
             throws SecurityException, MarshallingException, SignatureException {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
         
-        final SAMLObject outboundSAML = messageContext.getMessage();
+        final Object outboundSAML = messageContext.getMessage();
         final SignatureSigningParameters parameters = getContextSigningParameters(messageContext);
 
         if (outboundSAML instanceof SignableXMLObject && parameters != null) {
@@ -75,7 +74,7 @@ public final class SAMLMessageSecuritySupport {
      * @return the signing parameters to use, may be null
      */
     @Nullable public static SignatureSigningParameters getContextSigningParameters(
-            @Nonnull final MessageContext<SAMLObject> messageContext) {
+            @Nonnull final MessageContext messageContext) {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
 
         final SecurityParametersContext context = messageContext.getSubcontext(SecurityParametersContext.class);
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
index 35973d7..91824fb 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/ProxiedRequesterPredicate.java
@@ -39,7 +39,7 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
  * 
  * @since 3.4.0
  */
-public class ProxiedRequesterPredicate implements Predicate<MessageContext<?>> {
+public class ProxiedRequesterPredicate implements Predicate<MessageContext> {
 
     /** Set of entityIDs to check for. */
     @Nonnull @NonnullElements private final Set<String> entityIds;
@@ -56,7 +56,7 @@ public class ProxiedRequesterPredicate implements Predicate<MessageContext<?>> {
     }
     
     /** {@inheritDoc} */
-    @Nullable public boolean test(@Nullable final MessageContext<?> input) {
+    @Nullable public boolean test(@Nullable final MessageContext input) {
         
         final ProxiedRequesterContext ctx = input != null ? input.getSubcontext(ProxiedRequesterContext.class) : null;
         if (ctx != null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
index 30ec61c..9b53412 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/logic/SignatureCapableBindingPredicate.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.common.messaging.logic;
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 
 import net.shibboleth.utilities.java.support.logic.Predicate;
@@ -29,10 +28,10 @@ import net.shibboleth.utilities.java.support.logic.Predicate;
  * Predicate that determines whether the binding associated with a message context is
  * signature-capable. 
  */
-public class SignatureCapableBindingPredicate implements Predicate<MessageContext<SAMLObject>> {
+public class SignatureCapableBindingPredicate implements Predicate<MessageContext> {
 
     /** {@inheritDoc} */
-    public boolean test(@Nullable final MessageContext<SAMLObject> input) {
+    public boolean test(@Nullable final MessageContext input) {
         return input != null && SAMLBindingSupport.isSigningCapableBinding(input);
     }
 
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
index 2e279be..292382a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/common/messaging/soap/SAMLSOAPClientContextBuilder.java
@@ -82,7 +82,7 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
     private RoleDescriptor peerRoleDescriptor;
     
     /** TLS CriteriaSet strategy. */
-    private Function<MessageContext<?>, CriteriaSet> tlsCriteriaSetStrategy;
+    private Function<MessageContext,CriteriaSet> tlsCriteriaSetStrategy;
     
     /** SOAP client message pipeline name. */
     private String pipelineName;
@@ -266,7 +266,7 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
      * 
      * @return the TLS CriteriaSet strategy, or null
      */
-    @Nullable public Function<MessageContext<?>, CriteriaSet> getTLSCriteriaSetStrategy() {
+    @Nullable public Function<MessageContext,CriteriaSet> getTLSCriteriaSetStrategy() {
         if (tlsCriteriaSetStrategy != null) {
             return tlsCriteriaSetStrategy;
         } else {
@@ -281,7 +281,7 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
      * @return this builder instance 
      */
     @Nonnull public SAMLSOAPClientContextBuilder<InboundMessageType, OutboundMessageType> 
-            setTLSCriteriaSetStrategy(@Nullable final Function<MessageContext<?>, CriteriaSet> strategy) {
+            setTLSCriteriaSetStrategy(@Nullable final Function<MessageContext,CriteriaSet> strategy) {
         tlsCriteriaSetStrategy = strategy;
         return this;
     }
@@ -335,21 +335,20 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
      * 
      * @throws MessageException if any required data is not supplied and can not be derived from other supplied data
      */
-    public InOutOperationContext<InboundMessageType, OutboundMessageType> build() throws MessageException {
+    public InOutOperationContext build() throws MessageException {
         if (getOutboundMessage() == null) {
             errorMissingData("Outbound message");
         }
-        final MessageContext<OutboundMessageType> outboundContext = new MessageContext<OutboundMessageType>();
+        final MessageContext outboundContext = new MessageContext();
         outboundContext.setMessage(getOutboundMessage());
         
-        final Function<MessageContext<?>, CriteriaSet> tlsStrategy = getTLSCriteriaSetStrategy();
+        final Function<MessageContext,CriteriaSet> tlsStrategy = getTLSCriteriaSetStrategy();
         if (tlsStrategy != null) {
             outboundContext.getSubcontext(HttpClientSecurityContext.class, true)
                 .setTLSCriteriaSetStrategy(tlsStrategy);
         }
         
-        final InOutOperationContext<InboundMessageType, OutboundMessageType> opContext = 
-                new InOutOperationContext<>(null, outboundContext);
+        final InOutOperationContext opContext = new InOutOperationContext(null, outboundContext);
         
         // This is just so it's easy to change.
         final BaseContext parent = opContext;
@@ -406,10 +405,10 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
     }
     
     /** Default TLS CriteriaSet strategy function. */
-    public static class DefaultTLSCriteriaSetStrategy implements Function<MessageContext<?>, CriteriaSet> {
+    public static class DefaultTLSCriteriaSetStrategy implements Function<MessageContext,CriteriaSet> {
 
         /** {@inheritDoc} */
-        @Nullable public CriteriaSet apply(@Nullable final MessageContext<?> messageContext) {
+        @Nullable public CriteriaSet apply(@Nullable final MessageContext messageContext) {
             final CriteriaSet criteria = new CriteriaSet();
             criteria.add(new UsageCriterion(UsageType.SIGNING));
             
@@ -449,4 +448,4 @@ public class SAMLSOAPClientContextBuilder<InboundMessageType extends SAMLObject,
         
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/BindingCriterion.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/BindingCriterion.java
index 1e55c74..e5ef7f2 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/BindingCriterion.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/BindingCriterion.java
@@ -45,7 +45,7 @@ public final class BindingCriterion implements Criterion {
     public BindingCriterion(@Nonnull @NonnullElements final List<String> bindingURIs) {
         Constraint.isNotNull(bindingURIs, "Binding list cannot be null");
         
-        bindings = new ArrayList(bindingURIs.size());
+        bindings = new ArrayList<>(bindingURIs.size());
         for (final String binding : bindingURIs) {
             final String trimmed = StringSupport.trimOrNull(binding);
             if (trimmed != null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/EndpointCriterion.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/EndpointCriterion.java
index c00c531..b3afde6 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/EndpointCriterion.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/criterion/EndpointCriterion.java
@@ -122,7 +122,7 @@ public final class EndpointCriterion<EndpointType extends Endpoint> implements C
         }
 
         if (obj instanceof EndpointCriterion) {
-            final Endpoint endpoint2 = ((EndpointCriterion) obj).getEndpoint();
+            final Endpoint endpoint2 = ((EndpointCriterion<?>) obj).getEndpoint();
             if (!Objects.equals(endpoint.getElementQName(), endpoint2.getElementQName())) {
                 return false;
             } else if (!Objects.equals(endpoint.getBinding(), endpoint2.getBinding())) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilder.java
index 6f01c9e..f510953 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilder.java
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.saml1.core.Assertion;
 
 /**
@@ -43,7 +42,7 @@ public interface SAML1ArtifactBuilder<ArtifactType extends SAML1Artifact> {
      * 
      * @return constructed artifact
      */
-    @Nullable ArtifactType buildArtifact(@Nonnull final MessageContext<SAMLObject> requestContext,
+    @Nullable ArtifactType buildArtifact(@Nonnull final MessageContext requestContext,
             @Nonnull final Assertion assertion);
 
     /**
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilderFactory.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilderFactory.java
index 713288c..c52ff82 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilderFactory.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactBuilderFactory.java
@@ -28,7 +28,7 @@ import net.shibboleth.utilities.java.support.codec.Base64Support;
 public class SAML1ArtifactBuilderFactory {
 
     /** Registered artifact builders. */
-    private Map<String, SAML1ArtifactBuilder> artifactBuilders;
+    private Map<String, SAML1ArtifactBuilder<?>> artifactBuilders;
 
     /** Constructor. */
     public SAML1ArtifactBuilderFactory() {
@@ -42,7 +42,7 @@ public class SAML1ArtifactBuilderFactory {
      * 
      * @return currently registered artifact builders
      */
-    public Map<String, SAML1ArtifactBuilder> getArtifactBuilders() {
+    public Map<String, SAML1ArtifactBuilder<?>> getArtifactBuilders() {
         return artifactBuilders;
     }
 
@@ -53,7 +53,7 @@ public class SAML1ArtifactBuilderFactory {
      * 
      * @return artifact builder for the given type
      */
-    public SAML1ArtifactBuilder getArtifactBuilder(final byte[] type) {
+    public SAML1ArtifactBuilder<?> getArtifactBuilder(final byte[] type) {
         return artifactBuilders.get(new String(type));
     }
     
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
index 987edac..9cdcfe1 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0001Builder.java
@@ -25,7 +25,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
 import org.opensaml.saml.saml1.core.Assertion;
 import org.slf4j.Logger;
@@ -52,7 +51,7 @@ public class SAML1ArtifactType0001Builder implements SAML1ArtifactBuilder<SAML1A
 
     /** {@inheritDoc} */
     @Override
-    @Nullable public SAML1ArtifactType0001 buildArtifact(@Nonnull final MessageContext<SAMLObject> requestContext,
+    @Nullable public SAML1ArtifactType0001 buildArtifact(@Nonnull final MessageContext requestContext,
             @Nonnull final Assertion assertion) {
         final String sourceId = getSourceEntityId(requestContext);
         if (sourceId == null) {
@@ -80,8 +79,7 @@ public class SAML1ArtifactType0001Builder implements SAML1ArtifactBuilder<SAML1A
      * @param requestContext the current message context
      * @return the SAML artifact context, or null
      */
-    @Nullable protected SAMLArtifactContext getArtifactContext(
-            @Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable protected SAMLArtifactContext getArtifactContext(@Nonnull final MessageContext requestContext) {
         return requestContext.getSubcontext(SAMLArtifactContext.class);
     }
 
@@ -92,7 +90,7 @@ public class SAML1ArtifactType0001Builder implements SAML1ArtifactBuilder<SAML1A
      * 
      * @return the local entityId
      */
-    @Nullable protected String getSourceEntityId(@Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable protected String getSourceEntityId(@Nonnull final MessageContext requestContext) {
         final SAMLArtifactContext artifactContext = getArtifactContext(requestContext);
         if (artifactContext != null) {
             if (artifactContext.getSourceEntityId() != null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0002Builder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0002Builder.java
index 1556247..c7ad84d 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0002Builder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml1/binding/artifact/SAML1ArtifactType0002Builder.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
 import org.opensaml.saml.saml1.core.Assertion;
 import org.slf4j.Logger;
@@ -53,7 +52,7 @@ public class SAML1ArtifactType0002Builder implements SAML1ArtifactBuilder<SAML1A
 
     /** {@inheritDoc} */
     @Override
-    @Nullable public SAML1ArtifactType0002 buildArtifact(@Nonnull final MessageContext<SAMLObject> requestContext,
+    @Nullable public SAML1ArtifactType0002 buildArtifact(@Nonnull final MessageContext requestContext,
             @Nonnull final Assertion assertion) {
         try {
             final String sourceLocation = getArsEndpointUrl(requestContext);
@@ -78,7 +77,7 @@ public class SAML1ArtifactType0002Builder implements SAML1ArtifactBuilder<SAML1A
      * @return the SAML artifact context, or null
      */
     @Nullable protected SAMLArtifactContext getArtifactContext(
-            @Nonnull final MessageContext<SAMLObject> requestContext) {
+            @Nonnull final MessageContext requestContext) {
         return requestContext.getSubcontext(SAMLArtifactContext.class);
     }
     
@@ -89,7 +88,7 @@ public class SAML1ArtifactType0002Builder implements SAML1ArtifactBuilder<SAML1A
      * 
      * @return the index of the attribute resolution service
      */
-    @Nullable protected String getArsEndpointUrl(@Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable protected String getArsEndpointUrl(@Nonnull final MessageContext requestContext) {
         final SAMLArtifactContext artifactContext = getArtifactContext(requestContext);
 
         if (artifactContext == null || artifactContext.getSourceArtifactResolutionServiceEndpointURL() == null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilder.java
index 91127d9..d9115dd 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilder.java
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 
 /**
  * Builder of typed SAML 2 artifacts.
@@ -41,7 +40,7 @@ public interface SAML2ArtifactBuilder<ArtifactType extends SAML2Artifact> {
      * 
      * @return constructed artifcate
      */
-    @Nullable ArtifactType buildArtifact(@Nonnull final MessageContext<SAMLObject> requestContext);
+    @Nullable ArtifactType buildArtifact(@Nonnull final MessageContext requestContext);
 
     /**
      * Builds a populated artifact given the artifact's byte-array representation.
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilderFactory.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilderFactory.java
index 54eadf4..3d9cd5b 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilderFactory.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactBuilderFactory.java
@@ -28,7 +28,7 @@ import net.shibboleth.utilities.java.support.collection.LazyMap;
 public class SAML2ArtifactBuilderFactory {
 
     /** Registered artifact builders. */
-    private Map<String, SAML2ArtifactBuilder> artifactBuilders;
+    private Map<String, SAML2ArtifactBuilder<?>> artifactBuilders;
 
     /** Constructor. */
     public SAML2ArtifactBuilderFactory() {
@@ -41,7 +41,7 @@ public class SAML2ArtifactBuilderFactory {
      * 
      * @return currently registered artifact builders
      */
-    public Map<String, SAML2ArtifactBuilder> getArtifactBuilders() {
+    public Map<String, SAML2ArtifactBuilder<?>> getArtifactBuilders() {
         return artifactBuilders;
     }
 
@@ -52,7 +52,7 @@ public class SAML2ArtifactBuilderFactory {
      * 
      * @return artifact builder for the given type
      */
-    public SAML2ArtifactBuilder getArtifactBuilder(final byte[] type) {
+    public SAML2ArtifactBuilder<?> getArtifactBuilder(final byte[] type) {
         return artifactBuilders.get(new String(type));
     }
     
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
index 3339f06..8685a05 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004Builder.java
@@ -27,7 +27,6 @@ import javax.annotation.Nullable;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,7 +47,7 @@ public class SAML2ArtifactType0004Builder implements SAML2ArtifactBuilder<SAML2A
 
     /** {@inheritDoc} */
     @Override
-    @Nullable public SAML2ArtifactType0004 buildArtifact(@Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable public SAML2ArtifactType0004 buildArtifact(@Nonnull final MessageContext requestContext) {
         try {
             final String sourceId = getSourceEntityId(requestContext);
             if (sourceId == null) {
@@ -86,7 +85,7 @@ public class SAML2ArtifactType0004Builder implements SAML2ArtifactBuilder<SAML2A
      * @return the SAML artifact context, or null
      */
     @Nullable protected SAMLArtifactContext getArtifactContext(
-            @Nonnull final MessageContext<SAMLObject> requestContext) {
+            @Nonnull final MessageContext requestContext) {
         return requestContext.getSubcontext(SAMLArtifactContext.class);
     }
     
@@ -97,7 +96,7 @@ public class SAML2ArtifactType0004Builder implements SAML2ArtifactBuilder<SAML2A
      * 
      * @return the index of the attribute resolution service
      */
-    @Nullable protected Integer getArsEndpointIndex(@Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable protected Integer getArsEndpointIndex(@Nonnull final MessageContext requestContext) {
         final SAMLArtifactContext artifactContext = getArtifactContext(requestContext);
 
         if (artifactContext == null || artifactContext.getSourceArtifactResolutionServiceEndpointIndex() == null) {
@@ -115,7 +114,7 @@ public class SAML2ArtifactType0004Builder implements SAML2ArtifactBuilder<SAML2A
      * 
      * @return the local entityId
      */
-    @Nullable protected String getSourceEntityId(@Nonnull final MessageContext<SAMLObject> requestContext) {
+    @Nullable protected String getSourceEntityId(@Nonnull final MessageContext requestContext) {
         final SAMLArtifactContext artifactContext = getArtifactContext(requestContext);
         if (artifactContext != null) {
             if (artifactContext.getSourceEntityId() != null) {
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/encryption/Encrypter.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/encryption/Encrypter.java
index fd0c07e..17df52a 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/encryption/Encrypter.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/encryption/Encrypter.java
@@ -201,16 +201,22 @@ public class Encrypter extends org.opensaml.xmlsec.encryption.support.Encrypter
      */
     private void init() {
         builderFactory = XMLObjectProviderRegistrySupport.getBuilderFactory();
-        keyInfoBuilder = (XMLSignatureBuilder<KeyInfo>) builderFactory.getBuilder(KeyInfo.DEFAULT_ELEMENT_NAME);
+        keyInfoBuilder =
+                (XMLSignatureBuilder<KeyInfo>) builderFactory.<KeyInfo>getBuilderOrThrow(KeyInfo.DEFAULT_ELEMENT_NAME);
         dataReferenceBuilder =
-                (XMLEncryptionBuilder<DataReference>) builderFactory.getBuilder(DataReference.DEFAULT_ELEMENT_NAME);
+                (XMLEncryptionBuilder<DataReference>) builderFactory.<DataReference>getBuilderOrThrow(
+                        DataReference.DEFAULT_ELEMENT_NAME);
         referenceListBuilder =
-                (XMLEncryptionBuilder<ReferenceList>) builderFactory.getBuilder(ReferenceList.DEFAULT_ELEMENT_NAME);
+                (XMLEncryptionBuilder<ReferenceList>) builderFactory.<ReferenceList>getBuilderOrThrow(
+                        ReferenceList.DEFAULT_ELEMENT_NAME);
         retrievalMethodBuilder =
-                (XMLSignatureBuilder<RetrievalMethod>) builderFactory.getBuilder(RetrievalMethod.DEFAULT_ELEMENT_NAME);
-        keyNameBuilder = (XMLSignatureBuilder<KeyName>) builderFactory.getBuilder(KeyName.DEFAULT_ELEMENT_NAME);
+                (XMLSignatureBuilder<RetrievalMethod>) builderFactory.<RetrievalMethod>getBuilderOrThrow(
+                        RetrievalMethod.DEFAULT_ELEMENT_NAME);
+        keyNameBuilder =
+                (XMLSignatureBuilder<KeyName>) builderFactory.<KeyName>getBuilderOrThrow(KeyName.DEFAULT_ELEMENT_NAME);
         carriedKeyNameBuilder =
-                (XMLEncryptionBuilder<CarriedKeyName>) builderFactory.getBuilder(CarriedKeyName.DEFAULT_ELEMENT_NAME);
+                (XMLEncryptionBuilder<CarriedKeyName>) builderFactory.<CarriedKeyName>getBuilderOrThrow(
+                        CarriedKeyName.DEFAULT_ELEMENT_NAME);
 
         idGenerator = new RandomIdentifierGenerationStrategy();
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
index f2d26df..14c84d5 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandler.java
@@ -34,7 +34,6 @@ import org.opensaml.messaging.MessageException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -151,7 +150,7 @@ public class ReceivedEndpointSecurityHandler extends AbstractMessageHandler {
      *              with message requirements, or if there is a problem decoding and processing
      *              the message Destination or receiver endpoint information
      */
-    protected void checkEndpointURI(@Nonnull final MessageContext<SAMLObject> messageContext, 
+    protected void checkEndpointURI(@Nonnull final MessageContext messageContext, 
             @Nonnull final URIComparator comparator) throws MessageHandlerException {
         Constraint.isNotNull(comparator, "URIComparator may not be null");
         log.debug("{} Checking SAML message intended destination endpoint against receiver endpoint", getLogPrefix());
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 2a7276f..08ee098 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
@@ -27,7 +27,6 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
 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;
@@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory;
  * 
  * <strong>NOTE: This decoder is not yet implemented.</strong>
  */
-public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAMLObject> 
+public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder 
         implements SAMLMessageDecoder {
 
     /** Class logger. */
@@ -75,7 +74,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
 
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
         
         decodeTarget(messageContext, request);
@@ -131,7 +130,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 4e78cf0..8d774b4 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
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
 /**
  * SAML 1.X HTTP POST message decoder.
  */
-public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAMLObject> implements SAMLMessageDecoder {
+public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostDecoder.class);
@@ -75,7 +75,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAM
     
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
 
         if (!"POST".equalsIgnoreCase(request.getMethod())) {
@@ -107,7 +107,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAM
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 3c38fc8..0a21bf6 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
@@ -36,7 +36,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 1.1 HTTP SOAP 1.1 binding decoder.
  */
-public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.impl.HTTPSOAP11Decoder<SAMLObject> 
+public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.impl.HTTPSOAP11Decoder 
         implements SAMLMessageDecoder {
     
     /** Class logger. */
@@ -81,8 +81,13 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
         
         populateBindingContext(getMessageContext());
         
-        final SAMLObject samlMessage = getMessageContext().getMessage();
-        log.debug("Decoded SOAP messaged which included SAML message of type {}", samlMessage.getElementQName());
+        final Object samlMessage = getMessageContext().getMessage();
+        if (samlMessage instanceof SAMLObject) {
+            log.debug("Decoded SOAP messaged which included SAML message of type {}",
+                    ((SAMLObject) samlMessage).getElementQName());
+        } else {
+            throw new MessageDecodingException("Decoded message was not a SAMLObject");
+        }
     }
     
     /**
@@ -90,7 +95,7 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 ae593b4..0cb1604 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
@@ -37,7 +37,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
  * SAML 1.1 HTTP SOAP 1.1 binding decoder for HttpClient HttpResponse.
  */
 public class HttpClientResponseSOAP11Decoder 
-        extends org.opensaml.soap.client.soap11.decoder.http.impl.HttpClientResponseSOAP11Decoder<SAMLObject> 
+        extends org.opensaml.soap.client.soap11.decoder.http.impl.HttpClientResponseSOAP11Decoder 
         implements SAMLMessageDecoder {
     
     /** Class logger. */
@@ -82,8 +82,13 @@ public class HttpClientResponseSOAP11Decoder
         
         populateBindingContext(getMessageContext());
         
-        final SAMLObject samlMessage = getMessageContext().getMessage();
-        log.debug("Decoded SOAP message which included SAML message of type {}", samlMessage.getElementQName());
+        final Object samlMessage = getMessageContext().getMessage();
+        if (samlMessage instanceof SAMLObject) {
+            log.debug("Decoded SOAP message which included SAML message of type {}",
+                    ((SAMLObject) samlMessage).getElementQName());
+        } else {
+            throw new MessageDecodingException("Decoded message was not a SAMLObject");
+        }
     }
     
     /**
@@ -91,7 +96,7 @@ public class HttpClientResponseSOAP11Decoder
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 5a25701..3596813 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
@@ -24,7 +24,6 @@ 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.SAMLObject;
 import org.opensaml.saml.common.binding.BindingException;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
@@ -32,7 +31,7 @@ import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 /**
  * Base class for SAML 1 message encoders.
  */
-public abstract class BaseSAML1MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder<SAMLObject> 
+public abstract class BaseSAML1MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder 
         implements SAMLMessageEncoder {
 
     /**
@@ -44,7 +43,7 @@ public abstract class BaseSAML1MessageEncoder extends BaseHttpServletResponseXML
      * 
      * @throws MessageEncodingException throw if no relying party endpoint is available
      */
-    @Nonnull protected URI getEndpointURL(@Nonnull final MessageContext<SAMLObject> messageContext)
+    @Nonnull protected URI getEndpointURL(@Nonnull final MessageContext messageContext)
             throws MessageEncodingException {
         try {
             return SAMLBindingSupport.getEndpointURL(messageContext);
@@ -53,4 +52,4 @@ public abstract class BaseSAML1MessageEncoder extends BaseHttpServletResponseXML
         }
     }
     
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
index fa1fcb3..1e0a9ad 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -36,7 +36,6 @@ import net.shibboleth.utilities.java.support.net.URLBuilder;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.artifact.SAMLArtifactMap;
 import org.opensaml.saml.common.messaging.context.SAMLArtifactContext;
@@ -120,8 +119,14 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
     /** {@inheritDoc} */
     @Override
     protected void doEncode() throws MessageEncodingException {
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
+        final MessageContext messageContext = getMessageContext();
 
+        final Object outboundMessage = messageContext.getMessage();
+        if (!(outboundMessage instanceof Response)) {
+            throw new MessageEncodingException("Outbound message was not a SAML 1 Response");
+        }
+        final Response samlResponse = (Response) outboundMessage;
+        
         final String requester = getInboundMessageIssuer(messageContext);
         final String issuer = getOutboundMessageIssuer(messageContext);
         if (requester == null || issuer == null) {
@@ -156,11 +161,6 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
             storeSAMLArtifactType(messageContext, defaultArtifactType);
         }
 
-        final SAMLObject outboundMessage = messageContext.getMessage();
-        if (!(outboundMessage instanceof Response)) {
-            throw new MessageEncodingException("Outbound message was not a SAML 1 Response");
-        }
-        final Response samlResponse = (Response) outboundMessage;
         for (final Assertion assertion : samlResponse.getAssertions()) {
             final SAML1Artifact artifact = artifactBuilder.buildArtifact(messageContext, assertion);
             if (artifact == null) {
@@ -200,7 +200,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * @param messageContext  the message context
      * @return the outbound message issuer
      */
-    @Nullable private String getOutboundMessageIssuer(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private String getOutboundMessageIssuer(@Nonnull final MessageContext messageContext) {
 
         final SAMLSelfEntityContext selfCtx = messageContext.getSubcontext(SAMLSelfEntityContext.class);
         if (selfCtx == null) {
@@ -216,7 +216,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * @param messageContext the message context
      * @return the requester
      */
-    @Nullable private String getInboundMessageIssuer(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private String getInboundMessageIssuer(@Nonnull final MessageContext messageContext) {
         final SAMLPeerEntityContext peerCtx = messageContext.getSubcontext(SAMLPeerEntityContext.class);
         if (peerCtx == null) {
             return null;
@@ -232,7 +232,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * 
      * @param artifactType the artifact type to store
      */
-    private void storeSAMLArtifactType(@Nonnull final MessageContext<SAMLObject> messageContext,
+    private void storeSAMLArtifactType(@Nonnull final MessageContext messageContext,
             @Nonnull @NotEmpty final byte[] artifactType) {
         messageContext.getSubcontext(SAMLArtifactContext.class, true).setArtifactType(artifactType);
     }
@@ -244,7 +244,7 @@ public class HTTPArtifactEncoder extends BaseSAML1MessageEncoder {
      * 
      * @return the artifact type
      */
-    @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext messageContext) {
         return messageContext.getSubcontext(SAMLArtifactContext.class, true).getArtifactType();
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
index c221b17..ba20312 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoder.java
@@ -32,6 +32,7 @@ import net.shibboleth.utilities.java.support.xml.SerializeSupport;
 
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
+import org.opensaml.core.xml.XMLObject;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
 import org.opensaml.saml.common.SAMLObject;
@@ -132,10 +133,10 @@ public class HTTPPostEncoder extends BaseSAML1MessageEncoder {
 
     /** {@inheritDoc} */
     protected void doEncode() throws MessageEncodingException {
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
+        final MessageContext messageContext = getMessageContext();
 
-        final SAMLObject outboundMessage = messageContext.getMessage();
-        if (outboundMessage == null) {
+        final Object outboundMessage = messageContext.getMessage();
+        if (outboundMessage == null || !(outboundMessage instanceof SAMLObject)) {
             throw new MessageEncodingException("No outbound SAML message contained in message context");
         }
         final String endpointURL = getEndpointURL(messageContext).toString();
@@ -151,13 +152,13 @@ public class HTTPPostEncoder extends BaseSAML1MessageEncoder {
      * 
      * @throws MessageEncodingException thrown if there is a problem encoding the message
      */
-    protected void postEncode(final MessageContext<SAMLObject> messageContext, final String endpointURL) 
+    protected void postEncode(final MessageContext messageContext, final String endpointURL) 
             throws MessageEncodingException {
         log.debug("Invoking velocity template to create POST body");
 
         try {
             final VelocityContext context = new VelocityContext();
-            final SAMLObject message = messageContext.getMessage();
+            final Object message = messageContext.getMessage();
 
             final String encodedEndpointURL = HTMLEncoder.encodeForHTMLAttribute(endpointURL);
             log.debug("Encoding action url of '{}' with encoded value '{}'", endpointURL, encodedEndpointURL);
@@ -165,7 +166,7 @@ public class HTTPPostEncoder extends BaseSAML1MessageEncoder {
             context.put("binding", getBindingURI());
 
             log.debug("Marshalling and Base64 encoding SAML message");
-            final String messageXML = SerializeSupport.nodeToString(marshallMessage(message));
+            final String messageXML = SerializeSupport.nodeToString(marshallMessage((XMLObject) message));
             final String encodedMessage = Base64Support.encode(messageXML.getBytes("UTF-8"), Base64Support.UNCHUNKED);
             context.put("SAMLResponse", encodedMessage);
 
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 d0a176c..67a989c 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
@@ -17,14 +17,13 @@
 
 package org.opensaml.saml.saml1.binding.encoding.impl;
 
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
 /**
  * SAML 1.X HTTP SOAP 1.1 binding message encoder.
  */
-public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.impl.HTTPSOAP11Encoder<SAMLObject>
+public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.impl.HTTPSOAP11Encoder
         implements SAMLMessageEncoder {
     
     /** {@inheritDoc} */
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 7d66320..9400326 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
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml1.binding.encoding.impl;
 
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -25,7 +24,7 @@ import org.opensaml.saml.common.xml.SAMLConstants;
  * SAML 1.X HTTP SOAP 1.1 binding message encoder for HttpClient HttpRequest.
  */
 public class HttpClientRequestSOAP11Encoder 
-        extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder<SAMLObject>
+        extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder
         implements SAMLMessageEncoder {
     
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
index c57e318..3624771 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml1/profile/impl/AddResponseShell.java
@@ -104,7 +104,11 @@ public class AddResponseShell extends AbstractProfileAction {
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
-        final MessageContext<Response> outboundMessageCtx = profileRequestContext.getOutboundMessageContext();
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
+        final MessageContext outboundMessageCtx = profileRequestContext.getOutboundMessageContext();
         if (outboundMessageCtx == null) {
             log.debug("{} No outbound message context", getLogPrefix());
             ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_MSG_CTX);
@@ -124,7 +128,7 @@ public class AddResponseShell extends AbstractProfileAction {
         
         outboundMessageCtx.setMessage(null);
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
 
     /** {@inheritDoc} */
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 98dd03d..9a0bccf 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
@@ -78,8 +78,7 @@ import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifie
 /** 
  * SAML 2 Artifact Binding decoder, support both HTTP GET and POST.
  */
-public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAMLObject> 
-        implements SAMLMessageDecoder {
+public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPArtifactDecoder.class);
@@ -379,7 +378,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
     
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
 
         final String relayState = StringSupport.trim(request.getParameter("RelayState"));
@@ -448,7 +447,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
             final String selfEntityID = resolveSelfEntityID(peerRoleDescriptor);
         
             // TODO can assume/enforce response as ArtifactResponse here?
-            final InOutOperationContext<SAMLObject, ArtifactResolve> opContext = new SAMLSOAPClientContextBuilder()
+            final InOutOperationContext opContext = new SAMLSOAPClientContextBuilder()
                     .setOutboundMessage(buildArtifactResolveRequestMessage(
                             artifact, ars.getLocation(), peerRoleDescriptor, selfEntityID))
                     .setProtocol(SAMLConstants.SAML20P_NS)
@@ -460,7 +459,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
         
             log.trace("Executing ArtifactResolve over SOAP 1.1 binding to endpoint: {}", ars.getLocation());
             soapClient.send(ars.getLocation(), opContext);
-            final SAMLObject response = opContext.getInboundMessageContext().getMessage();
+            final Object response = opContext.getInboundMessageContext().getMessage();
             if (response instanceof ArtifactResponse) {
                 return validateAndExtractResponseMessage((ArtifactResponse) response);
             } else {
@@ -656,7 +655,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 748ae97..e2e1b1b 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
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Strings;
 
 /** Message decoder implementing the SAML 2.0 HTTP POST binding. */
-public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAMLObject> implements SAMLMessageDecoder {
+public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostDecoder.class);
@@ -75,7 +75,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAM
 
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
 
         if (!"POST".equalsIgnoreCase(request.getMethod())) {
@@ -134,7 +134,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAM
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
index 54d11fe..80cd3f8 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostSimpleSignDecoder.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.binding.decoding.impl;
 import javax.annotation.Nonnull;
 
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.xml.SAMLConstants;
@@ -42,7 +41,7 @@ public class HTTPPostSimpleSignDecoder extends HTTPPostDecoder {
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(getBindingDescriptor());
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 4d68159..db3e19d 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
@@ -49,8 +49,7 @@ import com.google.common.base.Strings;
  * 
  * This decoder only supports DEFLATE compression.
  */
-public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessageDecoder<SAMLObject> 
-    implements SAMLMessageDecoder {
+public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPRedirectDeflateDecoder.class);
@@ -83,7 +82,7 @@ public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessage
 
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
         
         if (!"GET".equalsIgnoreCase(request.getMethod())) {
@@ -151,7 +150,7 @@ public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessage
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 f421a9c..b7ed2dd 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
@@ -36,7 +36,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 /**
  * SAML 2.0 SOAP 1.1 over HTTP binding decoder.
  */
-public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.impl.HTTPSOAP11Decoder<SAMLObject> 
+public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.impl.HTTPSOAP11Decoder 
         implements SAMLMessageDecoder {
 
     /** Class logger. */
@@ -81,8 +81,13 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
         
         populateBindingContext(getMessageContext());
         
-        final SAMLObject samlMessage = getMessageContext().getMessage();
-        log.debug("Decoded SOAP messaged which included SAML message of type {}", samlMessage.getElementQName());
+        final Object samlMessage = getMessageContext().getMessage();
+        if (samlMessage instanceof SAMLObject) {
+            log.debug("Decoded SOAP message which included SAML message of type {}",
+                    ((SAMLObject) samlMessage).getElementQName());
+        } else {
+            throw new MessageDecodingException("Decoded SOAP message did not contain SAMLObject");
+        }
     }
     
     /**
@@ -90,7 +95,7 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 07359be..8e72ed6 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
@@ -37,7 +37,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
  * SAML 2.0 SOAP 1.1 over HTTP binding decoder for HttpClient HttpResponse.
  */
 public class HttpClientResponseSOAP11Decoder 
-        extends org.opensaml.soap.client.soap11.decoder.http.impl.HttpClientResponseSOAP11Decoder<SAMLObject> 
+        extends org.opensaml.soap.client.soap11.decoder.http.impl.HttpClientResponseSOAP11Decoder 
         implements SAMLMessageDecoder {
 
     /** Class logger. */
@@ -82,8 +82,13 @@ public class HttpClientResponseSOAP11Decoder
         
         populateBindingContext(getMessageContext());
         
-        final SAMLObject samlMessage = getMessageContext().getMessage();
-        log.debug("Decoded SOAP messaged which included SAML message of type {}", samlMessage.getElementQName());
+        final Object samlMessage = getMessageContext().getMessage();
+        if (samlMessage instanceof SAMLObject) {
+            log.debug("Decoded SOAP message which included SAML message of type {}",
+                    ((SAMLObject) samlMessage).getElementQName());
+        } else {
+            throw new MessageDecodingException("Decoded SOAP message did not contain SAMLObject");
+        }
     }
     
     /**
@@ -91,7 +96,7 @@ public class HttpClientResponseSOAP11Decoder
      * 
      * @param messageContext the current message context
      */
-    protected void populateBindingContext(final MessageContext<SAMLObject> messageContext) {
+    protected void populateBindingContext(final MessageContext messageContext) {
         final SAMLBindingContext bindingContext = messageContext.getSubcontext(SAMLBindingContext.class, true);
         bindingContext.setBindingUri(getBindingURI());
         bindingContext.setBindingDescriptor(bindingDescriptor);
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 dabc2a3..0295cf6 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
@@ -22,7 +22,6 @@ import java.net.URI;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
 import org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.BindingException;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
@@ -30,7 +29,7 @@ import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 /**
  * Base class for SAML 2 message encoders.
  */
-public abstract class BaseSAML2MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder<SAMLObject> 
+public abstract class BaseSAML2MessageEncoder extends BaseHttpServletResponseXMLMessageEncoder 
         implements SAMLMessageEncoder {
     
     /**
@@ -42,7 +41,7 @@ public abstract class BaseSAML2MessageEncoder extends BaseHttpServletResponseXML
      * 
      * @throws MessageEncodingException throw if no relying party endpoint is available
      */
-    protected URI getEndpointURL(final MessageContext<SAMLObject> messageContext) throws MessageEncodingException {
+    protected URI getEndpointURL(final MessageContext messageContext) throws MessageEncodingException {
         try {
             return SAMLBindingSupport.getEndpointURL(messageContext);
         } catch (final BindingException e) {
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
index aa5ea2e..99dde04 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPArtifactEncoder.java
@@ -231,7 +231,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
     protected void postEncode() throws MessageEncodingException {
         log.debug("Performing HTTP POST SAML 2 artifact encoding");
         
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
+        final MessageContext messageContext = getMessageContext();
 
         log.debug("Creating velocity context");
         final VelocityContext context = new VelocityContext();
@@ -270,7 +270,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
     protected void getEncode() throws MessageEncodingException {
         log.debug("Performing HTTP GET SAML 2 artifact encoding");
 
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
+        final MessageContext messageContext = getMessageContext();
         
         final String endpointUrl = getEndpointURL(messageContext).toString();
         
@@ -314,9 +314,15 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * 
      * @throws MessageEncodingException thrown if the artifact can not be created
      */
-    @Nonnull protected SAML2Artifact buildArtifact(@Nonnull final MessageContext<SAMLObject> messageContext) 
+    @Nonnull protected SAML2Artifact buildArtifact(@Nonnull final MessageContext messageContext) 
             throws MessageEncodingException {
 
+        final Object outboundMessage = messageContext.getMessage();
+        if (!(outboundMessage instanceof SAMLObject)) {
+            throw new MessageEncodingException("Outbound message was not a SAMLObject");
+        }
+        final SAMLObject samlObject = (SAMLObject) outboundMessage;
+        
         final String requester = getInboundMessageIssuer(messageContext);
         final String issuer = getOutboundMessageIssuer(messageContext);
         if (requester == null || issuer == null) {
@@ -341,7 +347,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
         }
         final String encodedArtifact = Base64Support.encode(artifact.getArtifactBytes(), Base64Support.UNCHUNKED);
         try {
-            artifactMap.put(encodedArtifact, requester, issuer, messageContext.getMessage());
+            artifactMap.put(encodedArtifact, requester, issuer, samlObject);
         } catch (final IOException e) {
             log.error("Unable to store message mapping for artifact", e);
             throw new MessageEncodingException("Unable to store message mapping for artifact", e);
@@ -356,7 +362,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param messageContext  the message context
      * @return the outbound message issuer
      */
-    @Nullable private String getOutboundMessageIssuer(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private String getOutboundMessageIssuer(@Nonnull final MessageContext messageContext) {
         final SAMLSelfEntityContext selfCtx = messageContext.getSubcontext(SAMLSelfEntityContext.class);
         if (selfCtx == null) {
             return null;
@@ -371,7 +377,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * @param messageContext the message context
      * @return the requester
      */
-    @Nullable private String getInboundMessageIssuer(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private String getInboundMessageIssuer(@Nonnull final MessageContext messageContext) {
         final SAMLPeerEntityContext peerCtx = messageContext.getSubcontext(SAMLPeerEntityContext.class);
         if (peerCtx == null) {
             return null;
@@ -387,7 +393,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * 
      * @param artifactType the artifact type to store
      */
-    private void storeSAMLArtifactType(@Nonnull final MessageContext<SAMLObject> messageContext,
+    private void storeSAMLArtifactType(@Nonnull final MessageContext messageContext,
             @Nonnull @NotEmpty final byte[] artifactType) {
         messageContext.getSubcontext(SAMLArtifactContext.class, true).setArtifactType(artifactType);
     }
@@ -399,7 +405,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
      * 
      * @return the artifact type
      */
-    @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    @Nullable private byte[] getSAMLArtifactType(@Nonnull final MessageContext messageContext) {
         return messageContext.getSubcontext(SAMLArtifactContext.class, true).getArtifactType();
     }
     
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
index a0264ba..d3e2f3b 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoder.java
@@ -134,10 +134,10 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
 
     /** {@inheritDoc} */
     protected void doEncode() throws MessageEncodingException {
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
+        final MessageContext messageContext = getMessageContext();
 
-        final SAMLObject outboundMessage = messageContext.getMessage();
-        if (outboundMessage == null) {
+        final Object outboundMessage = messageContext.getMessage();
+        if (outboundMessage == null || !(outboundMessage instanceof SAMLObject)) {
             throw new MessageEncodingException("No outbound SAML message contained in message context");
         }
         
@@ -154,7 +154,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
      * 
      * @throws MessageEncodingException thrown if there is a problem encoding the message
      */
-    protected void postEncode(final MessageContext<SAMLObject> messageContext, final String endpointURL) 
+    protected void postEncode(final MessageContext messageContext, final String endpointURL) 
             throws MessageEncodingException {
         log.debug("Invoking Velocity template to create POST body");
         try {
@@ -186,15 +186,14 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
      * @throws MessageEncodingException thrown if there is a problem encoding the message
      */
     protected void populateVelocityContext(final VelocityContext velocityContext,
-            final MessageContext<SAMLObject> messageContext,
-            final String endpointURL) throws MessageEncodingException {
+            final MessageContext messageContext, final String endpointURL) throws MessageEncodingException {
 
         final String encodedEndpointURL = HTMLEncoder.encodeForHTMLAttribute(endpointURL);
         log.debug("Encoding action url of '{}' with encoded value '{}'", endpointURL, encodedEndpointURL);
         velocityContext.put("action", encodedEndpointURL);
         velocityContext.put("binding", getBindingURI());
         
-        final SAMLObject outboundMessage = messageContext.getMessage();
+        final SAMLObject outboundMessage = (SAMLObject) messageContext.getMessage();
         
         log.debug("Marshalling and Base64 encoding SAML message");
         final Element domMessage = marshallMessage(outboundMessage);
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
index 7e223c5..722016a 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoder.java
@@ -28,7 +28,6 @@ import org.opensaml.core.xml.io.Marshaller;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.encoder.MessageEncodingException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.messaging.SAMLMessageSecuritySupport;
 import org.opensaml.saml.common.xml.SAMLConstants;
@@ -66,8 +65,7 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
     }
 
     /** {@inheritDoc} */
-    protected void populateVelocityContext(final VelocityContext velocityContext,
-            final MessageContext<SAMLObject> messageContext,
+    protected void populateVelocityContext(final VelocityContext velocityContext, final MessageContext messageContext,
             final String endpointURL) throws MessageEncodingException {
 
         super.populateVelocityContext(velocityContext, messageContext, endpointURL);
@@ -142,8 +140,7 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
      * 
      * @return the form control data string for signature computation
      */
-    protected String buildFormDataToSign(final VelocityContext velocityContext,
-            final MessageContext<SAMLObject> messageContext,
+    protected String buildFormDataToSign(final VelocityContext velocityContext, final MessageContext messageContext,
             final String sigAlgURI) {
         final StringBuilder builder = new StringBuilder();
 
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoder.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoder.java
index b13a606..d51471f 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoder.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoder.java
@@ -84,14 +84,17 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
 
     /** {@inheritDoc} */
     protected void doEncode() throws MessageEncodingException {
-        final MessageContext<SAMLObject> messageContext = getMessageContext();
-        final SAMLObject outboundMessage = messageContext.getMessage();
+        final MessageContext messageContext = getMessageContext();
+        final Object outboundMessage = messageContext.getMessage();
+        if (outboundMessage == null || !(outboundMessage instanceof SAMLObject)) {
+            throw new MessageEncodingException("No outbound SAML message contained in message context");
+        }
 
         final String endpointURL = getEndpointURL(messageContext).toString();
 
-        removeSignature(outboundMessage);
+        removeSignature((SAMLObject) outboundMessage);
 
-        final String encodedMessage = deflateAndBase64Encode(outboundMessage);
+        final String encodedMessage = deflateAndBase64Encode((SAMLObject) outboundMessage);
 
         final String redirectURL = buildRedirectURL(messageContext, endpointURL, encodedMessage);
 
@@ -158,8 +161,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
      * 
      * @throws MessageEncodingException thrown if the SAML message is neither a RequestAbstractType or Response
      */
-    protected String buildRedirectURL(final MessageContext<SAMLObject> messageContext, final String endpoint,
-            final String message)
+    protected String buildRedirectURL(final MessageContext messageContext, final String endpoint, final String message)
             throws MessageEncodingException {
         log.debug("Building URL to redirect client to");
         
@@ -180,7 +182,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
         // to build the string that will potentially be signed later. Add originalParms back in later.
         queryParams.clear();
 
-        final SAMLObject outboundMessage = messageContext.getMessage();
+        final SAMLObject outboundMessage = (SAMLObject) messageContext.getMessage();
 
         if (outboundMessage instanceof RequestAbstractType) {
             queryParams.add(new Pair<>("SAMLRequest", message));
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 fbce5c5..3aaa443 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
@@ -17,14 +17,13 @@
 
 package org.opensaml.saml.saml2.binding.encoding.impl;
 
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
 /**
  * SAML 2.0 SOAP 1.1 over HTTP binding encoder.
  */
-public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.impl.HTTPSOAP11Encoder<SAMLObject>
+public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.impl.HTTPSOAP11Encoder
         implements SAMLMessageEncoder {
 
     /** Constructor. */
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 9186148..60d7e06 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
@@ -17,7 +17,6 @@
 
 package org.opensaml.saml.saml2.binding.encoding.impl;
 
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
 import org.opensaml.saml.common.xml.SAMLConstants;
 
@@ -25,7 +24,7 @@ import org.opensaml.saml.common.xml.SAMLConstants;
  * SAML 2.0 SOAP 1.1 over HTTP binding encoder for HttpClient HttpRequest.
  */
 public class HttpClientRequestSOAP11Encoder 
-        extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder<SAMLObject>
+        extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder
         implements SAMLMessageEncoder {
 
     /** Constructor. */
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
index ed83e68..59fb2d4 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandler.java
@@ -22,7 +22,6 @@ import javax.annotation.Nonnull;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -37,16 +36,16 @@ import com.google.common.base.Strings;
  * Message handler implementation that enforces the AuthnRequestsSigned flag of 
  * SAML 2 metadata element @{link {@link SPSSODescriptor}.
  */
-public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHandler<SAMLObject>{
+public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHandler{
     
     /** Logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(SAML2AuthnRequestsSignedSecurityHandler.class);
 
 // Checkstyle: ReturnCount OFF
     /** {@inheritDoc} */
-    public void doInvoke(@Nonnull final MessageContext<SAMLObject> messageContext) throws MessageHandlerException {
-        final SAMLObject samlMessage = messageContext.getMessage();
-        if (! (samlMessage instanceof AuthnRequest) ) {
+    public void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
+        final Object samlMessage = messageContext.getMessage();
+        if (!(samlMessage instanceof AuthnRequest) ) {
             log.debug("Inbound message is not an instance of AuthnRequest, skipping evaluation...");
             return;
         }
@@ -74,7 +73,7 @@ public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHand
         final SPSSODescriptor spssoRole = (SPSSODescriptor) metadataContext.getRoleDescriptor();
         
         if (spssoRole.isAuthnRequestsSigned() == Boolean.TRUE) {
-            if (! isMessageSigned(messageContext)) {
+            if (!isMessageSigned(messageContext)) {
                 log.error("SPSSODescriptor for entity ID '{}' indicates AuthnRequests must be signed, "
                         + "but inbound message was not signed", messageIssuer);
                 throw new MessageHandlerException("Inbound AuthnRequest was required to be signed but was not");
@@ -92,8 +91,8 @@ public class SAML2AuthnRequestsSignedSecurityHandler extends AbstractMessageHand
      * @param messageContext the message context being evaluated
      * @return true if the inbound message is signed, otherwise false
      */
-    protected boolean isMessageSigned(@Nonnull final MessageContext<SAMLObject> messageContext) {
+    protected boolean isMessageSigned(@Nonnull final MessageContext messageContext) {
         return SAMLBindingSupport.isMessageSigned(messageContext);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
index 1eae74d..2f5455c 100644
--- a/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
+++ b/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/profile/impl/AbstractResponseShellAction.java
@@ -127,6 +127,10 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
+        if (!super.doPreExecute(profileRequestContext)) {
+            return false;
+        }
+        
         final MessageContext outboundMessageCtx = profileRequestContext.getOutboundMessageContext();
         if (outboundMessageCtx == null) {
             log.debug("{} No outbound message context", getLogPrefix());
@@ -151,7 +155,7 @@ public abstract class AbstractResponseShellAction<MessageType extends StatusResp
 
         outboundMessageCtx.setMessage(null);
         
-        return super.doPreExecute(profileRequestContext);
+        return true;
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
index 970c6ba..17d6c3b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/AddChannelBindingsHeaderHandlerTest.java
@@ -29,7 +29,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.messaging.context.ChannelBindingsContext;
 import org.opensaml.saml.ext.saml2cb.ChannelBindings;
-import org.opensaml.saml.saml2.ecp.Response;
 import org.opensaml.soap.messaging.SOAPMessagingSupport;
 import org.opensaml.soap.messaging.context.SOAP11Context;
 import org.opensaml.soap.soap11.Envelope;
@@ -42,12 +41,12 @@ public class AddChannelBindingsHeaderHandlerTest extends OpenSAMLInitBaseTestCas
     
     private ChannelBindingsContext cbc;
     
-    private MessageContext<Response> messageCtx;
+    private MessageContext messageCtx;
     
     private AddChannelBindingsHeaderHandler handler;
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
-        messageCtx = new MessageContext<>();
+        messageCtx = new MessageContext();
         
         final ChannelBindings cb = ((SAMLObjectBuilder<ChannelBindings>)
                 XMLObjectProviderRegistrySupport.getBuilderFactory().<ChannelBindings>getBuilderOrThrow(
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandlerTest.java
index a85ec2a..c3c93b2 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/CheckMessageVersionHandlerTest.java
@@ -22,7 +22,6 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.impl.CheckMessageVersionHandler;
 import org.opensaml.saml.saml1.core.RequestAbstractType;
@@ -36,7 +35,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
 
     @Test(expectedExceptions = MessageHandlerException.class)
     public void testNoMessageThrows() throws ComponentInitializationException, MessageHandlerException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
         handler.initialize();
@@ -46,7 +45,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
 
     @Test
     public void testNoMessageSilent() throws ComponentInitializationException, MessageHandlerException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
         
@@ -58,7 +57,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
     
     @Test(expectedExceptions = MessageHandlerException.class)
     public void testBadMessageThrows() throws ComponentInitializationException, MessageHandlerException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML1ActionTestingSupport.buildAssertion());
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
@@ -70,7 +69,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
 
     @Test
     public void testBadMessageSilent() throws ComponentInitializationException, MessageHandlerException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML1ActionTestingSupport.buildAssertion());
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
@@ -84,7 +83,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler accepts SAML 1.0 and 1.1 messages. */
     @Test
     public void testSaml1Message() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(null));
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
@@ -97,7 +96,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler errors out on SAML 2 messages. */
     @Test(expectedExceptions = MessageHandlerException.class)
     public void testSaml2MessageFail() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(null));
         ((RequestAbstractType) messageCtx.getMessage()).setVersion(SAMLVersion.VERSION_20);
 
@@ -111,7 +110,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler accepts SAML 2.0 messages. */
     @Test
     public void testSaml2Message() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
 
         final CheckMessageVersionHandler handler = new CheckMessageVersionHandler();
@@ -124,7 +123,7 @@ public class CheckMessageVersionHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler errors out on SAML 1 messages. */
     @Test(expectedExceptions = MessageHandlerException.class)
     public void testSaml1MessageFail() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
         ((AttributeQuery) messageCtx.getMessage()).setVersion(SAMLVersion.VERSION_11);
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
index a8b9a74..1ca08c7 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLAddAttributeConsumingServiceHandleTest.java
@@ -23,7 +23,6 @@ import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.ParentContextLookup;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.AttributeConsumingServiceContext;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -45,7 +44,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     private SPSSODescriptor withACS;
     private SPSSODescriptor noACS;
     
-    private SAMLMetadataContext getMetadataContext(MessageContext<SAMLObject> message) {
+    private SAMLMetadataContext getMetadataContext(final MessageContext message) {
         return message.getSubcontext(SAMLPeerEntityContext.class, true).getSubcontext(SAMLMetadataContext.class, true);
     }
     
@@ -63,13 +62,13 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
 
     @Test public void noMetadataDataContext() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         
         handler().invoke(messageContext);
     }
     
     @Test public void noSPSSODesc() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         
         handler().invoke(messageContext);
@@ -77,7 +76,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
     
     @Test public void authnNoIndex() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         metadataContext.setRoleDescriptor(withACS);
         
@@ -92,7 +91,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
 
     @Test public void authnWithIndex() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         metadataContext.setRoleDescriptor(withACS);
         
@@ -109,7 +108,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
 
     @Test public void authnBadIndex() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         metadataContext.setRoleDescriptor(withACS);
         
@@ -126,7 +125,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
 
     @Test public void authnNoACS() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         metadataContext.setRoleDescriptor(noACS);
         
@@ -138,7 +137,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
     }
     
     @Test public void noAuthn() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final SAMLMetadataContext metadataContext = getMetadataContext(messageContext);
         metadataContext.setRoleDescriptor(withACS);
         
@@ -158,7 +157,7 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
         
         navigatedHandler.setMetadataContextLookupStrategy(new ParentContextLookup<MessageContext, SAMLMetadataContext>());
         final SAMLMetadataContext metadataContext = new SAMLMetadataContext();
-        final MessageContext<SAMLObject> messageContext = metadataContext.getSubcontext(MessageContext.class, true);
+        final MessageContext messageContext = metadataContext.getSubcontext(MessageContext.class, true);
         metadataContext.setRoleDescriptor(withACS);
         
         final AuthnRequest request = SAML2ActionTestingSupport.buildAuthnRequest();
@@ -172,5 +171,6 @@ public class SAMLAddAttributeConsumingServiceHandleTest extends XMLObjectBaseTes
         
         Assert.assertFalse(acs.isDefault());
         Assert.assertEquals(acs.getIndex(), 1);
-    }    
-}
+    }
+    
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
index 00b61f1..a04b996 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLMetadataLookupHandlerTest.java
@@ -24,7 +24,6 @@ import java.net.URL;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLPresenterEntityContext;
@@ -55,7 +54,7 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
 
     private PredicateRoleDescriptorResolver roleResolver;
     private SAMLMetadataLookupHandler handler;
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     @BeforeClass
     public void classSetUp() throws ResolverException, URISyntaxException, ComponentInitializationException {
@@ -75,7 +74,7 @@ public class SAMLMetadataLookupHandlerTest extends XMLObjectBaseTestCase {
     @BeforeMethod
     public void setUp() {
         handler = new SAMLMetadataLookupHandler();
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
     }
     
     @Test
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
index fdb3b37..3c63705 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLOutboundDestinationHandlerTest.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.common.binding.impl;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.binding.impl.SAMLOutboundDestinationHandler;
 import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
@@ -38,7 +37,7 @@ import org.testng.annotations.Test;
 public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
     
     private SAMLOutboundDestinationHandler handler;
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     @BeforeMethod
     public void setUp() {
@@ -48,7 +47,7 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         
         handler = new SAMLOutboundDestinationHandler();
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).
             getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
     }
@@ -97,4 +96,4 @@ public class SAMLOutboundDestinationHandlerTest extends XMLObjectBaseTestCase {
         Assert.assertNotNull(samlMessage.getDestination(), "Destination was null");
     }
     
-}
+}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
index ea1986c..49f6e19 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/impl/SAMLProtocolAndRoleHandlerTest.java
@@ -21,7 +21,6 @@ import org.opensaml.messaging.context.InOutOperationContext;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLPresenterEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLProtocolContext;
@@ -39,7 +38,7 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 public class SAMLProtocolAndRoleHandlerTest {
     
     private SAMLProtocolAndRoleHandler handler;
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     @BeforeMethod
     public void setup() {
@@ -83,8 +82,7 @@ public class SAMLProtocolAndRoleHandlerTest {
         handler.setCopyContextLookup(new RecursiveTypedParentContextLookup(InOutOperationContext.class));
         handler.initialize();
         
-        final InOutOperationContext<SAMLObject, SAMLObject> opContext = 
-                new InOutOperationContext<>(messageContext, new MessageContext<SAMLObject>());
+        final InOutOperationContext opContext = new InOutOperationContext(messageContext, new MessageContext());
         opContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(SAMLConstants.SAML20P_NS); 
         opContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
 
@@ -103,8 +101,7 @@ public class SAMLProtocolAndRoleHandlerTest {
         handler.setEntityContextClass(SAMLPresenterEntityContext.class);
         handler.initialize();
         
-        final InOutOperationContext<SAMLObject, SAMLObject> opContext = 
-                new InOutOperationContext<>(messageContext, new MessageContext<SAMLObject>());
+        final InOutOperationContext opContext = new InOutOperationContext(messageContext, new MessageContext());
         opContext.getSubcontext(SAMLProtocolContext.class, true).setProtocol(SAMLConstants.SAML20P_NS); 
         opContext.getSubcontext(SAMLPresenterEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
index becbfc8..20a7a21 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/EndpointURLSchemeSecurityHandlerTest.java
@@ -39,7 +39,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         AssertionConsumerService endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setLocation("http://idp.example.com/sso");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage((SAMLObject) buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
@@ -53,7 +53,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         AssertionConsumerService endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setResponseLocation("http://sp.example.com/acs");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage((SAMLObject) buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
@@ -67,7 +67,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         AssertionConsumerService endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setLocation("badscheme://idp.example.com/sso");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage((SAMLObject) buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
@@ -81,7 +81,7 @@ public class EndpointURLSchemeSecurityHandlerTest extends XMLObjectBaseTestCase
         AssertionConsumerService endpoint = buildXMLObject(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
         endpoint.setResponseLocation("badscheme://sp.example.com/acs");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage((SAMLObject) buildXMLObject(Response.DEFAULT_ELEMENT_NAME));
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(endpoint);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/InResponseToSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/InResponseToSecurityHandlerTest.java
index e98f91a..7a99f27 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/InResponseToSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/InResponseToSecurityHandlerTest.java
@@ -43,7 +43,7 @@ public class InResponseToSecurityHandlerTest extends XMLObjectBaseTestCase {
     public void setup() throws ComponentInitializationException {
         handler = new InResponseToSecurityHandler();
         handler.initialize();
-        opContext = new InOutOperationContext<>(new MessageContext(), new MessageContext());
+        opContext = new InOutOperationContext(new MessageContext(), new MessageContext());
     }
     
     @Test
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandlerTest.java
index 5598a4d..48105c1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageLifetimeSecurityHandlerTest.java
@@ -23,7 +23,6 @@ import java.time.Instant;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.security.impl.MessageLifetimeSecurityHandler;
 import org.opensaml.saml.common.messaging.context.SAMLMessageInfoContext;
 import org.testng.annotations.BeforeMethod;
@@ -34,7 +33,7 @@ import org.testng.annotations.Test;
  */
 public class MessageLifetimeSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private MessageLifetimeSecurityHandler handler;
     
@@ -49,7 +48,7 @@ public class MessageLifetimeSecurityHandlerTest extends XMLObjectBaseTestCase {
         clockSkew = Duration.ofMinutes(5);
         messageLifetime = Duration.ofMinutes(10);
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         
         messageContext.getSubcontext(SAMLMessageInfoContext.class, true).setMessageIssueInstant(now);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandlerTest.java
index 46d67a6..b5555f9 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/MessageReplaySecurityHandlerTest.java
@@ -24,7 +24,6 @@ import java.time.Duration;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.security.impl.MessageReplaySecurityHandler;
 import org.opensaml.saml.common.messaging.context.SAMLMessageInfoContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -39,7 +38,7 @@ import org.testng.annotations.Test;
  */
 public class MessageReplaySecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private MessageReplaySecurityHandler handler;
 
@@ -51,7 +50,7 @@ public class MessageReplaySecurityHandlerTest extends XMLObjectBaseTestCase {
 
     @BeforeMethod
     protected void setUp() throws Exception {
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         
         messageID = "abc123";
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandlerTest.java
index 122985a..c5e6ad4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/ReceivedEndpointSecurityHandlerTest.java
@@ -26,7 +26,6 @@ import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.MessageException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
 import org.opensaml.saml.common.binding.security.impl.ReceivedEndpointSecurityHandler;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
@@ -42,7 +41,7 @@ import org.testng.annotations.Test;
  */
 public class ReceivedEndpointSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAMLBindingContext samlBindingContext;
     
@@ -54,8 +53,8 @@ public class ReceivedEndpointSecurityHandlerTest extends XMLObjectBaseTestCase {
     
     @BeforeMethod
     public void setUp() throws MessageException, ComponentInitializationException {
-        messageContext = new MessageContext<>();
-        messageContext.setMessage((SAMLObject) unmarshallElement("/org/opensaml/saml/saml2/binding/AuthnRequest.xml"));
+        messageContext = new MessageContext();
+        messageContext.setMessage(unmarshallElement("/org/opensaml/saml/saml2/binding/AuthnRequest.xml"));
         
         httpRequest = new MockHttpServletRequest();
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
index 07c8e71..46adb13 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLMDClientCertAuthSecurityHandlerTest.java
@@ -27,7 +27,6 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLPresenterEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLProtocolContext;
@@ -58,7 +57,7 @@ import org.testng.annotations.Test;
  */
 public class SAMLMDClientCertAuthSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAMLMDClientCertAuthSecurityHandler handler;
     
@@ -162,7 +161,7 @@ public class SAMLMDClientCertAuthSecurityHandlerTest extends XMLObjectBaseTestCa
         handler.setHttpServletRequest(request);
         handler.initialize();
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandlerTest.java
index 46b8ece..5ae3daa 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLOutboundProtocolMessageSigningHandlerTest.java
@@ -27,7 +27,6 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.saml2.core.Issuer;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.core.Status;
@@ -47,7 +46,7 @@ import org.testng.annotations.Test;
  */
 public class SAMLOutboundProtocolMessageSigningHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAMLOutboundProtocolMessageSigningHandler handler;
     
@@ -62,7 +61,7 @@ public class SAMLOutboundProtocolMessageSigningHandlerTest extends XMLObjectBase
         signingParameters.setSignatureReferenceDigestMethod(SignatureConstants.ALGO_ID_DIGEST_SHA256);
         signingParameters.setSignatureCanonicalizationAlgorithm(SignatureConstants.ALGO_ID_C14N_EXCL_OMIT_COMMENTS);
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
         
         handler = new SAMLOutboundProtocolMessageSigningHandler();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandlerTest.java
index 0eab342..d61848f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/binding/security/impl/SAMLProtocolMessageXMLSignatureSecurityHandlerTest.java
@@ -25,7 +25,6 @@ import java.util.List;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLTestSupport;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.messaging.context.SAMLProtocolContext;
@@ -52,7 +51,7 @@ import org.testng.annotations.Test;
  */
 public class SAMLProtocolMessageXMLSignatureSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAMLProtocolMessageXMLSignatureSecurityHandler handler;
     
@@ -147,7 +146,7 @@ public class SAMLProtocolMessageXMLSignatureSecurityHandlerTest extends XMLObjec
         handler = new SAMLProtocolMessageXMLSignatureSecurityHandler();
         handler.initialize();
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/messaging/context/SAMLMessageInfoContextTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/messaging/context/SAMLMessageInfoContextTest.java
index 4fc0973..fb2a060 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/messaging/context/SAMLMessageInfoContextTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/common/messaging/context/SAMLMessageInfoContextTest.java
@@ -65,57 +65,57 @@ public class SAMLMessageInfoContextTest extends XMLObjectBaseTestCase {
     
     @Test
     public void testNonSAMLMessage() {
-        MessageContext<Object> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage(new Object());
-        SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        final SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
         Assert.assertNull(infoContext.getMessageId());
         Assert.assertNull(infoContext.getMessageIssueInstant());
     }
     
     @Test
     public void testSAML2Request() {
-        MessageContext<Object> messageContext = new MessageContext<>();
-        AuthnRequest message = buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME);
+        final MessageContext messageContext = new MessageContext();
+        final AuthnRequest message = buildXMLObject(AuthnRequest.DEFAULT_ELEMENT_NAME);
         message.setID(id);
         message.setIssueInstant(issueInstant);
         messageContext.setMessage(message);
-        SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        final SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
         Assert.assertEquals(infoContext.getMessageId(), id);
         Assert.assertEquals(infoContext.getMessageIssueInstant(), issueInstant);
     }
 
     @Test
     public void testSAML2Response() {
-        MessageContext<Object> messageContext = new MessageContext<>();
-        Response message = buildXMLObject(Response.DEFAULT_ELEMENT_NAME);
+        final MessageContext messageContext = new MessageContext();
+        final Response message = buildXMLObject(Response.DEFAULT_ELEMENT_NAME);
         message.setID(id);
         message.setIssueInstant(issueInstant);
         messageContext.setMessage(message);
-        SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        final SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
         Assert.assertEquals(infoContext.getMessageId(), id);
         Assert.assertEquals(infoContext.getMessageIssueInstant(), issueInstant);
     }
     
     @Test
     public void testSAML1Request() {
-        MessageContext<Object> messageContext = new MessageContext<>();
-        Request message = buildXMLObject(Request.DEFAULT_ELEMENT_NAME);
+        final MessageContext messageContext = new MessageContext();
+        final Request message = buildXMLObject(Request.DEFAULT_ELEMENT_NAME);
         message.setID(id);
         message.setIssueInstant(issueInstant);
         messageContext.setMessage(message);
-        SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        final SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
         Assert.assertEquals(infoContext.getMessageId(), id);
         Assert.assertEquals(infoContext.getMessageIssueInstant(), issueInstant);
     }
     
     @Test
     public void testSAML1Response() {
-        MessageContext<Object> messageContext = new MessageContext<>();
-        org.opensaml.saml.saml1.core.Response message = buildXMLObject(org.opensaml.saml.saml1.core.Response.DEFAULT_ELEMENT_NAME);
+        final MessageContext messageContext = new MessageContext();
+        final org.opensaml.saml.saml1.core.Response message = buildXMLObject(org.opensaml.saml.saml1.core.Response.DEFAULT_ELEMENT_NAME);
         message.setID(id);
         message.setIssueInstant(issueInstant);
         messageContext.setMessage(message);
-        SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
+        final SAMLMessageInfoContext infoContext =  messageContext.getSubcontext(SAMLMessageInfoContext.class, true);
         Assert.assertEquals(infoContext.getMessageId(), id);
         Assert.assertEquals(infoContext.getMessageIssueInstant(), issueInstant);
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
index fe26eb8..4fb50ff 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPPostDecoderTest.java
@@ -69,7 +69,7 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
         populateRequestURL(httpRequest, deliveredEndpointURL);
 
         decoder.decode();
-        MessageContext<SAMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
 
         Assert.assertTrue(messageContext.getMessage() instanceof Response);
         Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
index a49c5c7..48fff37 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/decoding/impl/HTTPSOAP11DecoderTest.java
@@ -23,7 +23,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.saml1.binding.decoding.impl.HTTPSOAP11Decoder;
 import org.opensaml.saml.saml1.core.Request;
 import org.opensaml.soap.messaging.context.SOAP11Context;
@@ -65,7 +64,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         httpRequest.setContent(requestContent.getBytes());
         
         decoder.decode();
-        MessageContext<SAMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
 
         Assert.assertNotNull(messageContext.getSubcontext(SOAP11Context.class).getEnvelope());
         Assert.assertTrue(messageContext.getMessage() instanceof Request);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
index b22109b..23030ee 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPPostEncoderTest.java
@@ -32,7 +32,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -83,7 +82,7 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
 
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11EncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11EncoderTest.java
index aaf88a1..ff2778b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11EncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/encoding/impl/HTTPSOAP11EncoderTest.java
@@ -24,7 +24,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -60,7 +59,7 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
 
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(request);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandlerTest.java
index 30d26c3..a6a3e21 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/binding/impl/SAML1ArtifactRequestIssuerHandlerTest.java
@@ -24,7 +24,6 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx
 import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.binding.artifact.impl.BasicSAMLArtifactMap;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.saml1.profile.SAML1ActionTestingSupport;
@@ -37,7 +36,7 @@ public class SAML1ArtifactRequestIssuerHandlerTest extends OpenSAMLInitBaseTestC
 
     private BasicSAMLArtifactMap artifactMap;
     
-    private MessageContext<SAMLObject> mc;
+    private MessageContext mc;
     
     private SAML1ArtifactRequestIssuerHandler handler;
     
@@ -50,7 +49,7 @@ public class SAML1ArtifactRequestIssuerHandlerTest extends OpenSAMLInitBaseTestC
         handler.setArtifactMap(artifactMap);
         handler.initialize();
         
-        mc = new MessageContext<>();
+        mc = new MessageContext();
     }
 
     @Test
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
index 15c5665..fc4ff62 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddNameIdentifierToSubjectsTest.java
@@ -50,7 +50,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
     
     private ChainingSAML1NameIdentifierGenerator generator;
 
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private AddNameIdentifierToSubjects action;
     
@@ -66,7 +66,7 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
 
         final MockSAML1NameIdentifierGenerator mock2 = new MockSAML1NameIdentifierGenerator("bar");
         mock2.setFormat(NameIdentifier.EMAIL);
-        mock2.setActivationCondition(Predicates.<ProfileRequestContext>alwaysFalse());
+        mock2.setActivationCondition(Predicates.alwaysFalse());
         mock2.initialize();
 
         final MockSAML1NameIdentifierGenerator mock3 = new MockSAML1NameIdentifierGenerator("baz");
@@ -93,19 +93,19 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoStatements() throws ComponentInitializationException {
         prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         
         action.setFormatLookupStrategy(new X509FormatLookupStrategy());
         action.initialize();
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().get(0).getStatements().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0).getStatements().isEmpty());
     }
 
     @Test void testArbitraryFormat() throws ComponentInitializationException {
@@ -116,11 +116,11 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNull(subject);
 
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNull(subject);
     }
@@ -134,14 +134,14 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameIdentifier());
         Assert.assertEquals(subject.getNameIdentifier().getValue(), "foo");
         Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.X509_SUBJECT);
 
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameIdentifier());
@@ -158,14 +158,14 @@ public class AddNameIdentifierToSubjectsTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameIdentifier());
         Assert.assertEquals(subject.getNameIdentifier().getValue(), "baz");
         Assert.assertEquals(subject.getNameIdentifier().getFormat(), NameIdentifier.EMAIL);
 
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameIdentifier());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
index ebbb204..106aa2d 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddResponseShellTest.java
@@ -50,8 +50,8 @@ public class AddResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext<Response> outMsgCtx = prc.getOutboundMessageContext();
-        final Response response = outMsgCtx.getMessage();
+        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
+        final Response response = (Response) outMsgCtx.getMessage();
 
         Assert.assertNotNull(response);
         Assert.assertNotNull(response.getID());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
index 5eddfdf..27cd478 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddStatusToResponseTest.java
@@ -37,7 +37,7 @@ import org.testng.annotations.Test;
 /** {@link AddStatusToResponse} unit test. */
 public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private AddStatusToResponse action;
     
@@ -53,7 +53,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
@@ -72,7 +72,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
@@ -93,7 +93,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
index ccfbe87..ada049a 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/AddSubjectConfirmationToSubjectsTest.java
@@ -42,7 +42,7 @@ import org.testng.annotations.Test;
 /** Test for {@link AddSubjectConfirmationToSubjects}. */
 public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private AddSubjectConfirmationToSubjects action;
     
@@ -75,20 +75,20 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoStatements() throws ComponentInitializationException {
         prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         
         action.setMethods(Collections.singleton(ConfirmationMethod.METHOD_BEARER));
         action.initialize();
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().get(0).getStatements().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0).getStatements().isEmpty());
     }
 
     @Test void testSingle() throws ComponentInitializationException {
@@ -100,7 +100,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getSubjectConfirmation());
@@ -108,7 +108,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(0).getConfirmationMethod(),
                 ConfirmationMethod.METHOD_BEARER);
 
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getSubjectConfirmation());
@@ -126,7 +126,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getSubjectConfirmation());
@@ -136,7 +136,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         Assert.assertEquals(subject.getSubjectConfirmation().getConfirmationMethods().get(1).getConfirmationMethod(),
                 ConfirmationMethod.METHOD_SENDER_VOUCHES);
 
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getSubjectConfirmation());
@@ -158,7 +158,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getAuthenticationStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getSubjectConfirmation());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
index 2af57e9..1ed8bf5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/CopyNameIdentifierFromRequestTest.java
@@ -25,7 +25,6 @@ import org.opensaml.profile.action.ActionTestingSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml1.core.Assertion;
-import org.opensaml.saml.saml1.core.Request;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.core.Subject;
 import org.opensaml.saml.saml1.profile.SAML1ActionTestingSupport;
@@ -39,7 +38,7 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
 
     private static final String NAME_QUALIFIER = "https://idp.example.org";
 
-    private ProfileRequestContext<Request,Response> prc;
+    private ProfileRequestContext prc;
     
     private CopyNameIdentifierFromRequest action;
     
@@ -63,13 +62,13 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
 
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoRequest() {
         prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         addStatements();
 
         action.execute(prc);
@@ -79,7 +78,7 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
     @Test
     public void testNoName() {
         prc.getOutboundMessageContext().setMessage(SAML1ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML1ActionTestingSupport.buildAssertion());
         addStatements();
 
         prc.getInboundMessageContext().setMessage(SAML1ActionTestingSupport.buildAttributeQueryRequest(null));
@@ -98,7 +97,7 @@ public class CopyNameIdentifierFromRequestTest extends OpenSAMLInitBaseTestCase
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         subject = assertion.getAttributeStatements().get(0).getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameIdentifier());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
index bc02bb7..475f999 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml1/profile/impl/ResolveArtifactsTest.java
@@ -31,7 +31,6 @@ import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.saml.common.binding.artifact.impl.BasicSAMLArtifactMap;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.profile.SAMLEventIds;
-import org.opensaml.saml.saml1.core.Request;
 import org.opensaml.saml.saml1.core.Response;
 import org.opensaml.saml.saml1.profile.SAML1ActionTestingSupport;
 import org.testng.Assert;
@@ -43,7 +42,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
 
     private BasicSAMLArtifactMap artifactMap;
     
-    private ProfileRequestContext<Request,Response> prc;
+    private ProfileRequestContext prc;
     
     private ResolveArtifacts action;
     
@@ -86,7 +85,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("bar"));
     }
 
@@ -96,7 +95,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -106,7 +105,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -116,7 +115,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -126,7 +125,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertEquals(prc.getOutboundMessageContext().getMessage().getAssertions().size(), 1);
+        Assert.assertEquals(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().size(), 1);
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -137,7 +136,7 @@ public class ResolveArtifactsTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertEquals(prc.getOutboundMessageContext().getMessage().getAssertions().size(), 2);
+        Assert.assertEquals(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().size(), 2);
         Assert.assertNull(artifactMap.get("foo"));
         Assert.assertNull(artifactMap.get("bar"));
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
index c4db8d3..18abaa9 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPRedirectDeflateDecoderTest.java
@@ -91,7 +91,7 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
         httpRequest.setParameter("SAMLRequest", encodeMessage(samlRequest));
 
         decoder.decode();
-        MessageContext<SAMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
 
         Assert.assertTrue(messageContext.getMessage() instanceof RequestAbstractType);
         Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -108,7 +108,7 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
         httpRequest.setParameter("SAMLEncoding", "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE");
 
         decoder.decode();
-        MessageContext<SAMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
 
         Assert.assertTrue(messageContext.getMessage() instanceof RequestAbstractType);
         Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
index 5434f92..fd7d61e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPSOAP11DecoderTest.java
@@ -23,7 +23,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.saml2.binding.decoding.impl.HTTPSOAP11Decoder;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.soap.messaging.context.SOAP11Context;
@@ -66,7 +65,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         httpRequest.setContent(requestContent.getBytes());
 
         decoder.decode();
-        MessageContext<SAMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
 
         Assert.assertNotNull(messageContext.getSubcontext(SOAP11Context.class).getEnvelope());
         Assert.assertTrue(messageContext.getMessage() instanceof Response);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
index 2146121..0d3572b 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostEncoderTest.java
@@ -32,7 +32,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -102,7 +101,7 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
 
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -196,7 +195,7 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
index b385ddf..61a8594 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPPostSimpleSignEncoderTest.java
@@ -33,7 +33,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -112,7 +111,7 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -209,7 +208,7 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -303,7 +302,7 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoderTest.java
index 8e852b2..f621fb9 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPRedirectDeflateEncoderTest.java
@@ -26,7 +26,6 @@ import java.util.zip.InflaterInputStream;
 
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -89,7 +88,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -166,7 +165,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response?foo=bar&abc=123");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -247,7 +246,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response?foo=bar&abc=123&SAMLEncoding=blah&SAMLRequest=blah&SAMLResponse=blah&RelayState=blah&SigAlg=blah&Signature=blah");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -332,7 +331,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -419,7 +418,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
@@ -477,7 +476,7 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
         
         samlEndpoint.setResponseLocation("http://example.org/response?foo=bar&abc=123");
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11EncoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11EncoderTest.java
index f5d461c..5709ab4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11EncoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/encoding/impl/HTTPSOAP11EncoderTest.java
@@ -24,7 +24,6 @@ import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.util.XMLObjectSupport;
 import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.common.SAMLVersion;
 import org.opensaml.saml.common.binding.SAMLBindingSupport;
@@ -77,7 +76,7 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(samlMessage);
         SAMLBindingSupport.setRelayState(messageContext, "relay");
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandlerTest.java
index a3a886a..7225af8 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddConsentToResponseHandlerTest.java
@@ -35,7 +35,7 @@ public class AddConsentToResponseHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler errors on a missing context. */
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testMissingContext() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<StatusResponseType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildResponse());
 
         final AddConsentToResponseHandler handler = new AddConsentToResponseHandler();
@@ -46,7 +46,7 @@ public class AddConsentToResponseHandlerTest extends OpenSAMLInitBaseTestCase {
 
     /** Test that the handler works. */
     @Test public void testSuccess() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<StatusResponseType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildResponse());
         messageCtx.getSubcontext(SAMLConsentContext.class, true).setConsent(StatusResponseType.EXPLICIT_CONSENT);
         
@@ -54,7 +54,7 @@ public class AddConsentToResponseHandlerTest extends OpenSAMLInitBaseTestCase {
         handler.initialize();
         
         handler.invoke(messageCtx);
-        Assert.assertEquals(messageCtx.getMessage().getConsent(), StatusResponseType.EXPLICIT_CONSENT);
+        Assert.assertEquals(((StatusResponseType) messageCtx.getMessage()).getConsent(), StatusResponseType.EXPLICIT_CONSENT);
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddECPResponseHeaderHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddECPResponseHeaderHandlerTest.java
index 22f6102..ee953ed 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddECPResponseHeaderHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/AddECPResponseHeaderHandlerTest.java
@@ -28,7 +28,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.messaging.context.SAMLEndpointContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
-import org.opensaml.saml.saml2.core.StatusResponseType;
 import org.opensaml.saml.saml2.ecp.Response;
 import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
 import org.opensaml.saml.saml2.metadata.Endpoint;
@@ -44,7 +43,7 @@ public class AddECPResponseHeaderHandlerTest extends OpenSAMLInitBaseTestCase {
     
     /** Test that the handler does nothing on a missing Endpoint context. */
     @Test public void testMissingEndpointContext() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<StatusResponseType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildResponse());
 
         final AddECPResponseHeaderHandler handler = new AddECPResponseHeaderHandler();
@@ -61,7 +60,7 @@ public class AddECPResponseHeaderHandlerTest extends OpenSAMLInitBaseTestCase {
     /** Test that the handler errors on a missing SOAP context. */
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testMissingEnvelope() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<StatusResponseType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildResponse());
         
         final Endpoint ep = XMLObjectProviderRegistrySupport.getBuilderFactory().<AssertionConsumerService>getBuilderOrThrow(
@@ -82,7 +81,7 @@ public class AddECPResponseHeaderHandlerTest extends OpenSAMLInitBaseTestCase {
         final Envelope env = XMLObjectProviderRegistrySupport.getBuilderFactory().<Envelope>getBuilderOrThrow(
                 Envelope.DEFAULT_ELEMENT_NAME).buildObject(Envelope.DEFAULT_ELEMENT_NAME);
 
-        final MessageContext<StatusResponseType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildResponse());
         messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandlerTest.java
index 6427ee2..ae5c2b5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractConsentFromRequestHandlerTest.java
@@ -36,7 +36,7 @@ public class ExtractConsentFromRequestHandlerTest extends OpenSAMLInitBaseTestCa
     /** Test that the handler errors on a missing request. */
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testMissingContext() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<RequestAbstractType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
 
         final ExtractConsentFromRequestHandler handler = new ExtractConsentFromRequestHandler();
         handler.initialize();
@@ -46,9 +46,9 @@ public class ExtractConsentFromRequestHandlerTest extends OpenSAMLInitBaseTestCa
 
     /** Test that the handler works. */
     @Test public void testSuccess() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<RequestAbstractType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
-        messageCtx.getMessage().setConsent(StatusResponseType.IMPLICIT_CONSENT);
+        ((RequestAbstractType) messageCtx.getMessage()).setConsent(RequestAbstractType.IMPLICIT_CONSENT);
         
         final ExtractConsentFromRequestHandler handler = new ExtractConsentFromRequestHandler();
         handler.initialize();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
index 9030171..2926edf 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/impl/ExtractProxiedRequestersHandlerTest.java
@@ -28,7 +28,6 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.profile.context.ProxiedRequesterContext;
 import org.opensaml.saml.common.SAMLObjectBuilder;
 import org.opensaml.saml.saml2.core.AuthnRequest;
-import org.opensaml.saml.saml2.core.RequestAbstractType;
 import org.opensaml.saml.saml2.core.RequesterID;
 import org.opensaml.saml.saml2.core.Scoping;
 import org.opensaml.saml.saml2.profile.SAML2ActionTestingSupport;
@@ -56,7 +55,7 @@ public class ExtractProxiedRequestersHandlerTest extends OpenSAMLInitBaseTestCas
     /** Test that the handler errors on a missing request. */
     @Test(expectedExceptions=MessageHandlerException.class)
     public void testMissingRequest() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<RequestAbstractType> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
 
         final ExtractProxiedRequestersHandler handler = new ExtractProxiedRequestersHandler();
         handler.initialize();
@@ -66,7 +65,7 @@ public class ExtractProxiedRequestersHandlerTest extends OpenSAMLInitBaseTestCas
 
     /** Test that the handler works. */
     @Test public void testSuccess() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<AuthnRequest> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final Scoping scoping = scopingBuilder.buildObject();
@@ -76,7 +75,7 @@ public class ExtractProxiedRequestersHandlerTest extends OpenSAMLInitBaseTestCas
         two.setRequesterID("two");
         scoping.getRequesterIDs().addAll(Arrays.asList(one, two));
         
-        messageCtx.getMessage().setScoping(scoping);
+        ((AuthnRequest) messageCtx.getMessage()).setScoping(scoping);
         
         final ExtractProxiedRequestersHandler handler = new ExtractProxiedRequestersHandler();
         handler.initialize();
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
index 791cc01..aff66ce 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/ExtractChannelBindingsHeadersHandlerTest.java
@@ -25,7 +25,6 @@ import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
 import org.opensaml.saml.common.messaging.context.ChannelBindingsContext;
 import org.opensaml.saml.ext.saml2cb.ChannelBindings;
-import org.opensaml.saml.saml2.core.AuthnRequest;
 import org.opensaml.saml.saml2.profile.SAML2ActionTestingSupport;
 import org.opensaml.soap.messaging.SOAPMessagingSupport;
 import org.opensaml.soap.messaging.context.SOAP11Context;
@@ -40,7 +39,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
     
     /** Test that the handler returns nothing on a missing SOAP context. */
     @Test public void testMissingEnvelope() throws MessageHandlerException, ComponentInitializationException {
-        final MessageContext<AuthnRequest> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         
         final ExtractChannelBindingsHeadersHandler handler = new ExtractChannelBindingsHeadersHandler();
@@ -55,7 +54,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
         final Envelope env = XMLObjectProviderRegistrySupport.getBuilderFactory().<Envelope>getBuilderOrThrow(
                 Envelope.DEFAULT_ELEMENT_NAME).buildObject(Envelope.DEFAULT_ELEMENT_NAME);
 
-        final MessageContext<AuthnRequest> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
         
@@ -73,7 +72,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
         final Envelope env = XMLObjectProviderRegistrySupport.getBuilderFactory().<Envelope>getBuilderOrThrow(
                 Envelope.DEFAULT_ELEMENT_NAME).buildObject(Envelope.DEFAULT_ELEMENT_NAME);
 
-        final MessageContext<AuthnRequest> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
         
@@ -108,7 +107,7 @@ public class ExtractChannelBindingsHeadersHandlerTest extends OpenSAMLInitBaseTe
         final Envelope env = XMLObjectProviderRegistrySupport.getBuilderFactory().<Envelope>getBuilderOrThrow(
                 Envelope.DEFAULT_ELEMENT_NAME).buildObject(Envelope.DEFAULT_ELEMENT_NAME);
 
-        final MessageContext<AuthnRequest> messageCtx = new MessageContext<>();
+        final MessageContext messageCtx = new MessageContext();
         messageCtx.setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         messageCtx.getSubcontext(SOAP11Context.class, true).setEnvelope(env);
         
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
index 6da8bd0..fe31ba4 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2AuthnRequestsSignedSecurityHandlerTest.java
@@ -20,7 +20,6 @@ package org.opensaml.saml.saml2.binding.security.impl;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.MessageHandlerException;
-import org.opensaml.saml.common.SAMLObject;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
 import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
@@ -38,7 +37,7 @@ public class SAML2AuthnRequestsSignedSecurityHandlerTest extends XMLObjectBaseTe
     
     private SAML2AuthnRequestsSignedSecurityHandler handler;
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
  
     private final String issuer = "urn:test:issuer";
     
@@ -52,7 +51,7 @@ public class SAML2AuthnRequestsSignedSecurityHandlerTest extends XMLObjectBaseTe
         spssoDescriptor = buildXMLObject(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
         spssoDescriptor.setAuthnRequestsSigned(false);
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
             .getSubcontext(SAMLMetadataContext.class, true).setRoleDescriptor(spssoDescriptor);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
index 036ce25..bbe42c1 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPPostSimpleSignSecurityHandlerTest.java
@@ -77,7 +77,7 @@ import org.w3c.dom.Element;
  */
 public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAML2HTTPPostSimpleSignSecurityHandler handler;
     
@@ -223,7 +223,7 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         handler.setKeyInfoResolver(kiResolver);
         handler.initialize();
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
@@ -351,7 +351,7 @@ public class SAML2HTTPPostSimpleSignSecurityHandlerTest extends XMLObjectBaseTes
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         SAMLBindingSupport.setRelayState(messageContext, expectedRelayValue);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
index 2c972cc..8b9ded3 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/security/impl/SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest.java
@@ -71,7 +71,7 @@ import org.testng.annotations.Test;
  */
 public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObjectBaseTestCase {
     
-    private MessageContext<SAMLObject> messageContext;
+    private MessageContext messageContext;
     
     private SAML2HTTPRedirectDeflateSignatureSecurityHandler handler;
     
@@ -204,7 +204,7 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         handler.setHttpServletRequest(buildServletRequest());
         handler.initialize();
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setEntityId(issuer);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true).setRole(SPSSODescriptor.DEFAULT_ELEMENT_NAME);
@@ -304,7 +304,7 @@ public class SAML2HTTPRedirectDeflateSignatureSecurityHandlerTest extends XMLObj
         samlEndpoint.setLocation("http://example.org");
         samlEndpoint.setResponseLocation("http://example.org/response");
         
-        final MessageContext<SAMLObject> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         messageContext.setMessage(buildInboundSAMLMessage());
         SAMLBindingSupport.setRelayState(messageContext, expectedRelayValue);
         messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
index b30db50..a6cbfaf 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusResponseShellTest.java
@@ -60,8 +60,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext<Response> outMsgCtx = prc.getOutboundMessageContext();
-        final Response response = outMsgCtx.getMessage();
+        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
+        final Response response = (Response) outMsgCtx.getMessage();
 
         Assert.assertNotNull(response);
         Assert.assertNotNull(response.getID());
@@ -87,8 +87,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext<Response> outMsgCtx = prc.getOutboundMessageContext();
-        final Response response = outMsgCtx.getMessage();
+        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
+        final Response response = (Response) outMsgCtx.getMessage();
 
         Assert.assertNotNull(response);
         
@@ -116,8 +116,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext<ArtifactResponse> outMsgCtx = prc.getOutboundMessageContext();
-        final ArtifactResponse response = outMsgCtx.getMessage();
+        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
+        final ArtifactResponse response = (ArtifactResponse) outMsgCtx.getMessage();
 
         Assert.assertNotNull(response);
         Assert.assertNotNull(response.getID());
@@ -141,8 +141,8 @@ public class AddStatusResponseShellTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
 
-        final MessageContext<LogoutResponse> outMsgCtx = prc.getOutboundMessageContext();
-        final LogoutResponse response = outMsgCtx.getMessage();
+        final MessageContext outMsgCtx = prc.getOutboundMessageContext();
+        final LogoutResponse response = (LogoutResponse) outMsgCtx.getMessage();
 
         Assert.assertNotNull(response);
         Assert.assertNotNull(response.getID());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
index 28506c9..f4e55d5 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddStatusToResponseTest.java
@@ -37,7 +37,7 @@ import org.testng.annotations.Test;
 /** {@link AddStatusToResponse} unit test. */
 public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private AddStatusToResponse action;
     
@@ -53,7 +53,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
@@ -72,7 +72,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
@@ -93,7 +93,7 @@ public class AddStatusToResponseTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        final Response response = prc.getOutboundMessageContext().getMessage();
+        final Response response = (Response) prc.getOutboundMessageContext().getMessage();
 
         final Status status = response.getStatus();
         Assert.assertNotNull(status);
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
index 38545eb..647c253 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/AddSubjectConfirmationToSubjectsTest.java
@@ -41,7 +41,7 @@ import org.testng.annotations.Test;
 /** Test for {@link AddSubjectConfirmationToSubjects}. */
 public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<AuthnRequest,Response> prc;
+    private ProfileRequestContext prc;
     
     private AddSubjectConfirmationToSubjects action;
     
@@ -75,7 +75,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
     }
 
     @Test void testSuccess() throws ComponentInitializationException {
@@ -87,13 +87,13 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         Subject subject = assertion.getSubject();
         Assert.assertNotNull(subject);
         Assert.assertEquals(subject.getSubjectConfirmations().size(), 1);
         Assert.assertEquals(subject.getSubjectConfirmations().get(0).getMethod(), SubjectConfirmation.METHOD_BEARER);
         
-        assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(1);
+        assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(1);
         subject = assertion.getSubject();
         Assert.assertNotNull(subject);
         Assert.assertEquals(subject.getSubjectConfirmations().size(), 1);
@@ -104,7 +104,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         Assert.assertNull(data.getRecipient());
         Assert.assertNotNull(data.getNotOnOrAfter());
         Assert.assertEquals(data.getAddress(), "127.0.0.1");
-        Assert.assertEquals(data.getInResponseTo(), prc.getInboundMessageContext().getMessage().getID());
+        Assert.assertEquals(data.getInResponseTo(), ((AuthnRequest) prc.getInboundMessageContext().getMessage()).getID());
     }
     
     /** Set up the test message with some assertions. */
@@ -115,7 +115,7 @@ public class AddSubjectConfirmationToSubjectsTest extends OpenSAMLInitBaseTestCa
         prc.getOutboundMessageContext().setMessage(response);
         prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAuthnRequest());
         prc.getInboundMessageContext().getSubcontext(SAMLMessageInfoContext.class, true);
-        response.setInResponseTo(prc.getInboundMessageContext().getMessage().getID());
+        response.setInResponseTo(((AuthnRequest) prc.getInboundMessageContext().getMessage()).getID());
     }
     
 }
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
index 4abd39c..b15153f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/CopyNameIDFromRequestTest.java
@@ -25,7 +25,6 @@ import org.opensaml.profile.action.ActionTestingSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.saml2.core.Assertion;
-import org.opensaml.saml.saml2.core.AttributeQuery;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.core.Subject;
 import org.opensaml.saml.saml2.profile.SAML2ActionTestingSupport;
@@ -38,7 +37,7 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
 
     private static final String NAME_QUALIFIER = "https://idp.example.org";
 
-    private ProfileRequestContext<AttributeQuery,Response> prc;
+    private ProfileRequestContext prc;
     
     private CopyNameIDFromRequest action;
     
@@ -62,13 +61,13 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
 
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getAssertions().isEmpty());
+        Assert.assertTrue(((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().isEmpty());
     }
 
     @Test
     public void testNoRequest() {
         prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
         addAssertions();
 
         action.execute(prc);
@@ -78,7 +77,7 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
     @Test
     public void testNoName() {
         prc.getOutboundMessageContext().setMessage(SAML2ActionTestingSupport.buildResponse());
-        prc.getOutboundMessageContext().getMessage().getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
+        ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().add(SAML2ActionTestingSupport.buildAssertion());
         addAssertions();
 
         prc.getInboundMessageContext().setMessage(SAML2ActionTestingSupport.buildAttributeQueryRequest(null));
@@ -97,7 +96,7 @@ public class CopyNameIDFromRequestTest extends OpenSAMLInitBaseTestCase {
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
         
-        Assertion assertion = prc.getOutboundMessageContext().getMessage().getAssertions().get(0);
+        Assertion assertion = ((Response) prc.getOutboundMessageContext().getMessage()).getAssertions().get(0);
         subject = assertion.getSubject();
         Assert.assertNotNull(subject);
         Assert.assertNotNull(subject.getNameID());
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
index 4362742..7d223fb 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAssertionsTest.java
@@ -48,7 +48,7 @@ public class EncryptAssertionsTest extends OpenSAMLInitBaseTestCase {
     
     private EncryptionParameters encParams;
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private EncryptAssertions action;
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
index eed22a4..47b5aaa 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptAttributesTest.java
@@ -55,7 +55,7 @@ public class EncryptAttributesTest extends OpenSAMLInitBaseTestCase {
     
     private EncryptionParameters encParams;
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private EncryptAttributes action;
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
index 2e10063..4de200e 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/EncryptNameIDsTest.java
@@ -48,7 +48,7 @@ public class EncryptNameIDsTest extends OpenSAMLInitBaseTestCase {
     
     private EncryptionParameters encParams;
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private EncryptNameIDs action;
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
index 8c81e07..25ccd93 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/PopulateECPContextTest.java
@@ -32,7 +32,6 @@ import org.opensaml.profile.action.ActionTestingSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.saml.common.messaging.context.ECPContext;
 import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
-import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.profile.SAML2ActionTestingSupport;
 import org.opensaml.saml.saml2.profile.context.EncryptionContext;
 import org.opensaml.xmlsec.EncryptionParameters;
@@ -40,7 +39,7 @@ import org.opensaml.xmlsec.EncryptionParameters;
 /** Unit test for {@link PopulateECPContext}. */
 public class PopulateECPContextTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private PopulateECPContext action;
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
index 1f2af11..64d98c6 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/ResolveArtifactTest.java
@@ -31,7 +31,6 @@ import org.opensaml.core.OpenSAMLInitBaseTestCase;
 import org.opensaml.saml.common.binding.artifact.impl.BasicSAMLArtifactMap;
 import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
 import org.opensaml.saml.common.profile.SAMLEventIds;
-import org.opensaml.saml.saml2.core.ArtifactResolve;
 import org.opensaml.saml.saml2.core.ArtifactResponse;
 import org.opensaml.saml.saml2.core.Response;
 import org.opensaml.saml.saml2.profile.SAML2ActionTestingSupport;
@@ -44,7 +43,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
 
     private BasicSAMLArtifactMap artifactMap;
     
-    private ProfileRequestContext<ArtifactResolve,ArtifactResponse> prc;
+    private ProfileRequestContext prc;
     
     private ResolveArtifact action;
     
@@ -87,7 +86,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertNull(prc.getOutboundMessageContext().getMessage().getMessage());
+        Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
     }
 
     @Test public void testWrongSP() throws IOException {
@@ -96,7 +95,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertNull(prc.getOutboundMessageContext().getMessage().getMessage());
+        Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -106,7 +105,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertEvent(prc, SAMLEventIds.UNABLE_RESOLVE_ARTIFACT);
-        Assert.assertNull(prc.getOutboundMessageContext().getMessage().getMessage());
+        Assert.assertNull(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage());
         Assert.assertNull(artifactMap.get("foo"));
     }
 
@@ -116,7 +115,7 @@ public class ResolveArtifactTest extends OpenSAMLInitBaseTestCase {
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-        Assert.assertTrue(prc.getOutboundMessageContext().getMessage().getMessage() instanceof Response);
+        Assert.assertTrue(((ArtifactResponse) prc.getOutboundMessageContext().getMessage()).getMessage() instanceof Response);
         Assert.assertNull(artifactMap.get("foo"));
     }
 
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
index d6cfdea..4daadae 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/profile/impl/TestSelfEncryption.java
@@ -52,7 +52,7 @@ public class TestSelfEncryption extends OpenSAMLInitBaseTestCase {
     
     private EncryptionParameters encParams, encParamsSelf1, encParamsSelf2;
     
-    private ProfileRequestContext<Object,Response> prc;
+    private ProfileRequestContext prc;
     
     private EncryptNameIDs action;
     
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
index 3a8aad4..08eff73 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/DefaultSAML20AssertionValidationContextBuilderTest.java
@@ -152,8 +152,8 @@ public class DefaultSAML20AssertionValidationContextBuilderTest extends XMLObjec
         
     }
 
-    private MessageContext<?> buildMessageContext() {
-        MessageContext<?> messageContext = new MessageContext<>();
+    private MessageContext buildMessageContext() {
+        final MessageContext messageContext = new MessageContext();
         messageContext.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
         return messageContext;
     }
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
index 3a6fb66..7a7da21 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/wssecurity/messaging/impl/WSSecuritySAML20AssertionTokenSecurityHandlerTest.java
@@ -67,7 +67,7 @@ import org.testng.annotations.Test;
 public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObjectBaseTestCase {
     private WSSecuritySAML20AssertionTokenSecurityHandler handler;
     
-    private MessageContext<XMLObject> messageContext;
+    private MessageContext messageContext;
     private MockHttpServletRequest httpServletRequest;
     private Assertion assertion;
     private SubjectConfirmation subjectConfirmation;
@@ -292,8 +292,8 @@ public class WSSecuritySAML20AssertionTokenSecurityHandlerTest extends XMLObject
     // Helper classes and methods
     //
 
-    private MessageContext<XMLObject> buildMessageContext() {
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+    private MessageContext buildMessageContext() {
+        final MessageContext messageContext = new MessageContext();
         messageContext.getSubcontext(SAMLSelfEntityContext.class, true).setEntityId(rpEntityID);
         XMLObject payload = buildXMLObject(simpleXMLObjectQName);
         messageContext.setMessage(payload);
diff --git a/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java b/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
index 90bbbb4..c87d388 100644
--- a/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
+++ b/opensaml-security-api/src/main/java/org/opensaml/security/messaging/HttpClientSecurityContext.java
@@ -36,7 +36,7 @@ public final class HttpClientSecurityContext extends BaseContext {
     private HttpClientSecurityParameters securityParameters;
     
     /** TLS criteria strategy function. */
-    private Function<MessageContext<?>, CriteriaSet> tlsCriteriaSetStrategy;
+    private Function<MessageContext,CriteriaSet> tlsCriteriaSetStrategy;
     
     /**
      * Get the {@link HttpClientSecurityParameters} instance.
@@ -61,7 +61,7 @@ public final class HttpClientSecurityContext extends BaseContext {
      * 
      * @return the strategy function, or null
      */
-    @Nullable public Function<MessageContext<?>, CriteriaSet> getTLSCriteriaSetStrategy() {
+    @Nullable public Function<MessageContext,CriteriaSet> getTLSCriteriaSetStrategy() {
         return tlsCriteriaSetStrategy;
     }
     
@@ -70,7 +70,8 @@ public final class HttpClientSecurityContext extends BaseContext {
      * 
      * @param strategy the strategy function instance, or null
      */
-    public void setTLSCriteriaSetStrategy(@Nullable final Function<MessageContext<?>, CriteriaSet> strategy) {
+    public void setTLSCriteriaSetStrategy(@Nullable final Function<MessageContext,CriteriaSet> strategy) {
         tlsCriteriaSetStrategy = strategy;
     }
-}
+
+}
\ No newline at end of file
diff --git a/opensaml-security-impl/src/test/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandlerTest.java b/opensaml-security-impl/src/test/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandlerTest.java
index 69b1627..0454831 100644
--- a/opensaml-security-impl/src/test/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandlerTest.java
+++ b/opensaml-security-impl/src/test/java/org/opensaml/security/messaging/impl/PopulateHttpClientSecurityParametersHandlerTest.java
@@ -57,7 +57,7 @@ public class PopulateHttpClientSecurityParametersHandlerTest extends OpenSAMLIni
     private PopulateHttpClientSecurityParametersHandler handler;
     
     @BeforeMethod public void setUp() {
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         handler = new PopulateHttpClientSecurityParametersHandler();
     }
     
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
index 2cd4cc2..22cc3c0 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/AbstractPipelineHttpSOAPClient.java
@@ -88,7 +88,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
     @Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
     
     /** Strategy for building the criteria set which is input to the TLS trust engine. */
-    @Nullable private Function<InOutOperationContext<?, ?>, CriteriaSet> tlsCriteriaSetStrategy;
+    @Nullable private Function<InOutOperationContext,CriteriaSet> tlsCriteriaSetStrategy;
     
     /** Constructor. */
     public AbstractPipelineHttpSOAPClient() {
@@ -166,7 +166,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
      * 
      * @return the strategy function, or null
      */
-    @Nullable public Function<InOutOperationContext<?, ?>, CriteriaSet> getTLSCriteriaSetStrategy() {
+    @Nullable public Function<InOutOperationContext,CriteriaSet> getTLSCriteriaSetStrategy() {
         return tlsCriteriaSetStrategy;
     }
     
@@ -177,7 +177,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
      * 
      * @param function the strategy function, or null
      */
-    public void setTLSCriteriaSetStrategy(@Nullable final Function<InOutOperationContext<?, ?>, CriteriaSet> function) {
+    public void setTLSCriteriaSetStrategy(@Nullable final Function<InOutOperationContext,CriteriaSet> function) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         
@@ -191,7 +191,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
         Constraint.isNotNull(endpoint, "Endpoint cannot be null");
         Constraint.isNotNull(operationContext, "Operation context cannot be null");
         
-        HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> pipeline = null;
+        HttpClientMessagePipeline pipeline = null;
         try {
             // Store the endpoint URI
             operationContext.getSubcontext(SOAPClientContext.class, true).setDestinationURI(endpoint);
@@ -206,7 +206,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
             
             final HttpUriRequest httpRequest = buildHttpRequest(endpoint, operationContext);
             // Request encoding + outbound transport handling
-            final HttpClientRequestMessageEncoder<OutboundMessageType> encoder = pipeline.getEncoder();
+            final HttpClientRequestMessageEncoder encoder = pipeline.getEncoder();
             encoder.setHttpRequest(httpRequest);
             encoder.setMessageContext(operationContext.getOutboundMessageContext());
             encoder.initialize();
@@ -223,7 +223,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
             HttpClientSecuritySupport.checkTLSCredentialEvaluated(httpContext, httpRequest.getURI().getScheme());
             
             // Response decoding
-            final HttpClientResponseMessageDecoder<InboundMessageType> decoder = pipeline.getDecoder();
+            final HttpClientResponseMessageDecoder decoder = pipeline.getDecoder();
             decoder.setHttpResponse(httpResponse);
             decoder.initialize();
             decoder.decode();
@@ -278,8 +278,8 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
      * 
      * @throws SOAPException if there is an error obtaining a new pipeline instance
      */
-    @Nonnull protected HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> 
-            resolvePipeline(@Nonnull final InOutOperationContext operationContext) throws SOAPException {
+    @Nonnull protected HttpClientMessagePipeline resolvePipeline(@Nonnull final InOutOperationContext operationContext)
+            throws SOAPException {
         try {
             return newPipeline();
         } catch (final SOAPException e) {
@@ -303,7 +303,7 @@ public abstract class AbstractPipelineHttpSOAPClient<OutboundMessageType, Inboun
      * 
      * @throws SOAPException if there is an error obtaining a new pipeline instance
      */
-    @Nonnull protected abstract HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> newPipeline() 
+    @Nonnull protected abstract HttpClientMessagePipeline newPipeline() 
             throws SOAPException;
     
     /**
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
index b4863a3..b7bf4c5 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/client/http/PipelineFactoryHttpSOAPClient.java
@@ -38,22 +38,18 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
 /**
  * SOAP client that is based on {@link HttpClientMessagePipeline}, produced at runtime from an instance of
  * {@link HttpClientMessagePipelineFactory}.
- * 
- * @param <OutboundMessageType> the outbound message type
- * @param <InboundMessageType> the inbound message type
  */
 @ThreadSafe
-public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageType> 
-        extends AbstractPipelineHttpSOAPClient<OutboundMessageType, InboundMessageType> {
+public class PipelineFactoryHttpSOAPClient extends AbstractPipelineHttpSOAPClient {
     
     /** Logger. */
     private Logger log = LoggerFactory.getLogger(PipelineFactoryHttpSOAPClient.class);
     
     /** Factory for the client message pipeline. */
-    private HttpClientMessagePipelineFactory<InboundMessageType, OutboundMessageType> pipelineFactory;
+    private HttpClientMessagePipelineFactory pipelineFactory;
     
     /** Strategy function used to resolve the pipeline name to execute. */
-    private Function<InOutOperationContext<?, ?>, String> pipelineNameStrategy;
+    private Function<InOutOperationContext,String> pipelineNameStrategy;
     
     /**
      * Set the message pipeline factory.
@@ -61,7 +57,7 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * @param factory the message pipeline factory
      */
     public void setPipelineFactory(
-            @Nonnull final HttpClientMessagePipelineFactory<InboundMessageType, OutboundMessageType> factory) {
+            @Nonnull final HttpClientMessagePipelineFactory factory) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         
@@ -73,7 +69,7 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * 
      * @param function the strategy function, or null
      */
-    public void setPipelineNameStrategy(@Nullable final Function<InOutOperationContext<?, ?>, String> function) {
+    public void setPipelineNameStrategy(@Nullable final Function<InOutOperationContext,String> function) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         
@@ -121,8 +117,8 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * 
      * @throws SOAPException if there is an error obtaining a new pipeline instance
      */
-    @Nonnull protected HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> 
-            resolvePipeline(final InOutOperationContext operationContext) throws SOAPException {
+    @Nonnull protected HttpClientMessagePipeline resolvePipeline(final InOutOperationContext operationContext)
+            throws SOAPException {
         
         String resolvedPipelineName = null;
         try {
@@ -151,8 +147,7 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * </p>
      * 
      */
-    @Nonnull protected HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> newPipeline() 
-            throws SOAPException {
+    @Nonnull protected HttpClientMessagePipeline newPipeline() throws SOAPException {
         // Note: in a Spring environment, the actual factory impl might be a proxy via ServiceLocatorFactoryBean
         return pipelineFactory.newInstance();
     }
@@ -175,8 +170,7 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * 
      * @throws SOAPException if there is an error obtaining a new pipeline instance
      */
-    @Nullable protected HttpClientMessagePipeline<InboundMessageType, OutboundMessageType> newPipeline(
-            @Nullable final String name) throws SOAPException {
+    @Nullable protected HttpClientMessagePipeline newPipeline(@Nullable final String name) throws SOAPException {
         // Note: in a Spring environment, the actual factory impl might be a proxy via ServiceLocatorFactoryBean
         return pipelineFactory.newInstance(name);
     }
@@ -200,10 +194,10 @@ public class PipelineFactoryHttpSOAPClient<OutboundMessageType, InboundMessageTy
      * Default strategy for resolving SOAP client message pipeline name from the 
      * {@link SOAPClientContext#getPipelineName()} which is a direct child of the input operation context.
      */
-    public static class DefaultPipelineNameStrategy implements Function<InOutOperationContext<?,?>, String> {
+    public static class DefaultPipelineNameStrategy implements Function<InOutOperationContext,String> {
 
         /** {@inheritDoc} */
-        public String apply(@Nullable final InOutOperationContext<?, ?> opContext) {
+        public String apply(@Nullable final InOutOperationContext opContext) {
             if (opContext == null) {
                 return null;
             }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/common/SOAPHandler.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/common/SOAPHandler.java
index c2c6938..42d5ed1 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/common/SOAPHandler.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/common/SOAPHandler.java
@@ -26,10 +26,8 @@ import org.opensaml.messaging.handler.MessageHandler;
 
 /**
  * Interface for {@link MessageHandler}s that are specific to SOAP message processing.
- * 
- *  @param <MessageType> the type of message being handled
  */
-public interface SOAPHandler<MessageType> extends MessageHandler<MessageType> {
+public interface SOAPHandler extends MessageHandler {
     
     /**
      * Get the set of SOAP header names that the handler
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
index 0a4b061..ef0e9cb 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/AbstractHeaderGeneratingMessageHandler.java
@@ -33,16 +33,14 @@ import org.opensaml.messaging.handler.MessageHandlerException;
 
 /**
  * Abstract base class for message handlers that generate SOAP headers.
- *
- * @param <MessageType> the type of message being processed.
  */
-public abstract class AbstractHeaderGeneratingMessageHandler<MessageType> extends AbstractMessageHandler<MessageType> {
+public abstract class AbstractHeaderGeneratingMessageHandler extends AbstractMessageHandler {
     
     /** The statically configured value for mustUnderstand. */
     private boolean mustUnderstand;
     
     /** Predicate strategy for evaluating mustUnderstand from the message context. */
-    @Nullable private Predicate<MessageContext<MessageType>> mustUnderstandStrategy;
+    @Nullable private Predicate<MessageContext> mustUnderstandStrategy;
     
     /** The effective mustUnderstand value to use. */
     private boolean effectiveMustUnderstand;
@@ -51,7 +49,7 @@ public abstract class AbstractHeaderGeneratingMessageHandler<MessageType> extend
     @Nullable private String targetNode;
     
     /** Function strategy for resolving target node from the message context. */
-    @Nullable private Function<MessageContext<MessageType>, String> targetNodeStrategy;
+    @Nullable private Function<MessageContext,String> targetNodeStrategy;
     
     /** The effective target node value to use. */
     private String effectiveTargetNode;
@@ -72,7 +70,7 @@ public abstract class AbstractHeaderGeneratingMessageHandler<MessageType> extend
      * 
      * @param strategy the predicate strategy
      */
-    public void setMustUnderstandStrategy(@Nullable final Predicate<MessageContext<MessageType>> strategy) {
+    public void setMustUnderstandStrategy(@Nullable final Predicate<MessageContext> strategy) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         mustUnderstandStrategy = strategy;
@@ -103,7 +101,7 @@ public abstract class AbstractHeaderGeneratingMessageHandler<MessageType> extend
      * 
      * @param strategy the predicate strategy
      */
-    public void setTargetNodeStrategy(@Nullable final Function<MessageContext<MessageType>, String> strategy) {
+    public void setTargetNodeStrategy(@Nullable final Function<MessageContext,String> strategy) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
         targetNodeStrategy = strategy;
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
index 60146fe..9cc4169 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/messaging/SOAPMessagingSupport.java
@@ -83,7 +83,7 @@ public final class SOAPMessagingSupport {
      * @param msgContext the current message context
      * @param header the header that was understood
      */
-    public static void registerUnderstoodHeader(@Nonnull final MessageContext<? extends XMLObject> msgContext, 
+    public static void registerUnderstoodHeader(@Nonnull final MessageContext msgContext, 
             @Nonnull final XMLObject header) {
         final InboundSOAPContext inboundContext = getInboundSOAPContext(msgContext);
         
@@ -97,7 +97,7 @@ public final class SOAPMessagingSupport {
      * @param header the header that is to be checked for understanding
      * @return true if header was understood, false otherwise
      */
-    public static boolean checkUnderstoodHeader(@Nonnull final MessageContext<? extends XMLObject> msgContext,
+    public static boolean checkUnderstoodHeader(@Nonnull final MessageContext msgContext,
             @Nonnull final XMLObject header) {
         final InboundSOAPContext inboundContext = getInboundSOAPContext(msgContext);
         
@@ -111,7 +111,7 @@ public final class SOAPMessagingSupport {
      * @param messageContext the current message context
      * @return true iff the message context contains a SOAP Envelope
      */
-    public static boolean isSOAPMessage(@Nonnull final MessageContext<? extends XMLObject> messageContext) {
+    public static boolean isSOAPMessage(@Nonnull final MessageContext messageContext) {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
         
         final SOAPVersion version = getSOAPVersion(messageContext);
@@ -125,7 +125,7 @@ public final class SOAPMessagingSupport {
      * @param messageContext the current message context
      * @return true iff the message context contains a SOAP 1.1 Envelope
      */
-    public static boolean isSOAP11Message(@Nonnull final MessageContext<? extends XMLObject> messageContext) {
+    public static boolean isSOAP11Message(@Nonnull final MessageContext messageContext) {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
         
         final SOAPVersion version = getSOAPVersion(messageContext);
@@ -143,7 +143,7 @@ public final class SOAPMessagingSupport {
      * @return the SOAP version.  May be null if the version could not be determined.
      */
     @Nullable public static SOAPVersion getSOAPVersion(
-            @Nonnull final MessageContext<? extends XMLObject> messageContext) {
+            @Nonnull final MessageContext messageContext) {
         Constraint.isNotNull(messageContext, "Message context cannot be null");
         
         final SOAP11Context soap11 = getSOAP11Context(messageContext, false);
@@ -257,7 +257,7 @@ public final class SOAPMessagingSupport {
      * @return the list of matching header blocks
      */
     @Nonnull public static List<XMLObject> getInboundHeaderBlock(
-            @Nonnull final MessageContext<? extends XMLObject> messageContext, @Nonnull final QName headerName) {
+            @Nonnull final MessageContext messageContext, @Nonnull final QName headerName) {
             
         final InboundSOAPContext inboundContext = getInboundSOAPContext(messageContext);
         
@@ -275,7 +275,7 @@ public final class SOAPMessagingSupport {
      * @return the list of matching header blocks
      */
     @Nonnull public static List<XMLObject> getOutboundHeaderBlock(
-            @Nonnull final MessageContext<? extends XMLObject> messageContext, @Nonnull final QName headerName) {
+            @Nonnull final MessageContext messageContext, @Nonnull final QName headerName) {
             
         return getHeaderBlock(messageContext, headerName, null, true);
     }
diff --git a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
index 700e9ca..999b1d8 100644
--- a/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
+++ b/opensaml-soap-api/src/main/java/org/opensaml/soap/util/SOAPSupport.java
@@ -21,7 +21,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
-import java.util.Set;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -29,8 +28,6 @@ import javax.xml.namespace.QName;
 
 import net.shibboleth.utilities.java.support.collection.LazyList;
 import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport;
-import net.shibboleth.utilities.java.support.primitive.DeprecationSupport.ObjectType;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.xml.XMLConstants;
 
@@ -40,12 +37,9 @@ import org.opensaml.core.xml.XMLObjectBuilderFactory;
 import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
 import org.opensaml.core.xml.schema.XSBooleanValue;
 import org.opensaml.core.xml.util.AttributeMap;
-import org.opensaml.messaging.context.MessageContext;
-import org.opensaml.soap.messaging.SOAPMessagingSupport;
 import org.opensaml.soap.soap11.ActorBearing;
 import org.opensaml.soap.soap11.Detail;
 import org.opensaml.soap.soap11.EncodingStyleBearing;
-import org.opensaml.soap.soap11.Envelope;
 import org.opensaml.soap.soap11.Fault;
 import org.opensaml.soap.soap11.FaultActor;
 import org.opensaml.soap.soap11.FaultCode;
@@ -400,122 +394,6 @@ public final class SOAPSupport {
         return role;
     }
 
-    /**
-     * Add a header block to the SOAP envelope contained within the specified message context's
-     * SOAP subcontext.
-     * 
-     * @param messageContext the message context being processed
-     * @param headerBlock the header block to add
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#addHeaderBlock(MessageContext, XMLObject)}
-     */
-    @Deprecated
-    public static void addHeaderBlock(@Nonnull final MessageContext messageContext,
-            @Nonnull final XMLObject headerBlock) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD,
-                "org.opensaml.soap.util.SOAPSupport.addHeaderBlock", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.addHeaderBlock");
-        SOAPMessagingSupport.addHeaderBlock(messageContext, headerBlock);
-    }
-
-    /**
-     * Add a header to the SOAP 1.1 Envelope.
-     * 
-     * @param envelope the SOAP 1.1 envelope to process
-     * @param headerBlock the header to add
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#addSOAP11HeaderBlock(Envelope, XMLObject)}
-     */
-    @Deprecated
-    public static void addSOAP11HeaderBlock(@Nonnull final Envelope envelope, @Nonnull final XMLObject headerBlock) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD,
-                "org.opensaml.soap.util.SOAPSupport.addSOAP11HeaderBlock", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.addSOAP11HeaderBlock");
-        SOAPMessagingSupport.addSOAP11HeaderBlock(envelope, headerBlock);
-    }
-
-    /**
-     * Get a header block from the SOAP envelope contained within the specified message context's
-     * SOAP subcontext.
-     * 
-     * @param messageContext the message context being processed
-     * @param headerName the name of the header block to return 
-     * @param targetNodes the explicitly specified SOAP node actors (1.1) or roles (1.2) for which the header is desired
-     * @param isFinalDestination true specifies that headers targeted for message final destination should be returned,
-     *          false means they should not be returned
-     * @return the list of matching header blocks
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#getInboundHeaderBlock(MessageContext, QName)}
-     */
-    @Deprecated
-    @Nonnull public static List<XMLObject> getInboundHeaderBlock(
-            @Nonnull final MessageContext messageContext, @Nonnull final QName headerName,
-            @Nullable final Set<String> targetNodes, final boolean isFinalDestination) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD,
-                "org.opensaml.soap.util.SOAPSupport.getInboundHeaderBlock", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.getInboundHeaderBlock");
-        return SOAPMessagingSupport.getHeaderBlock(messageContext, headerName, targetNodes, isFinalDestination);
-    }
-
-    /**
-     * Get a header block from the SOAP 1.1 envelope.
-     * 
-     * @param envelope the SOAP 1.1 envelope to process 
-     * @param headerName the name of the header block to return 
-     * @param targetNodes the explicitly specified SOAP node actors for which the header is desired
-     * @param isFinalDestination true specifies that headers targeted for message final destination should be returned,
-     *          false specifies they should not be returned
-     * @return the list of matching header blocks
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#getSOAP11HeaderBlock(Envelope, QName, Set, boolean)}
-     */
-    @Deprecated
-    @Nonnull public static List<XMLObject> getSOAP11HeaderBlock(@Nonnull final Envelope envelope,
-            @Nonnull final QName headerName, @Nullable final Set<String> targetNodes,
-            final boolean isFinalDestination) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD,
-                "org.opensaml.soap.util.SOAPSupport.getSOAP11HeaderBlock", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.getSOAP11HeaderBlock");
-        return SOAPMessagingSupport.getSOAP11HeaderBlock(envelope, headerName, targetNodes, isFinalDestination);
-    }
-    
-    /**
-     * Evaluate whether the specified header block is targeted to a SOAP 1.1 node given the specified 
-     * parameters.
-     * 
-     * @param header the header to evaluate
-     * @param nodeActors the explicitly specified node actors for which the header is desired
-     * @param isFinalDestination true specifies that headers targeted for message final destination should be returned,
-     *          false specifies they should not be returned
-     * @return the list of matching header blocks
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#isSOAP11HeaderTargetedToNode(XMLObject, Set, boolean)}
-     */
-    @Deprecated
-    public static boolean isSOAP11HeaderTargetedToNode(@Nonnull final XMLObject header,
-            @Nullable final Set<String> nodeActors, final boolean isFinalDestination) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD,
-                "org.opensaml.soap.util.SOAPSupport.isSOAP11HeaderTargetedToNode", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.isSOAP11HeaderTargetedToNode");
-        return SOAPMessagingSupport.isSOAP11HeaderTargetedToNode(header, nodeActors, isFinalDestination);
-    }
-
-    /**
-     * Determine whether the message represented by the message context 
-     * contains a SOAP Envelope.
-     * 
-     * @param messageContext the current message context
-     * @return true iff the message context contains a SOAP Envelope
-     * 
-     * @deprecated use {@link SOAPMessagingSupport#isSOAPMessage(MessageContext)}
-     */
-    @Deprecated
-    public static boolean isSOAPMessage(@Nonnull final MessageContext<? extends XMLObject> messageContext) {
-        DeprecationSupport.warnOnce(ObjectType.METHOD, "org.opensaml.soap.util.SOAPSupport.isSOAPMessage", null,
-                "org.opensaml.soap.messaging.SOAPMessagingSupport.isSOAPMessage");
-        return SOAPMessagingSupport.isSOAPMessage(messageContext);
-    }
-
 // Checkstyle: CyclomaticComplexity OFF
     /**
      * Build a SOAP 1.1. Fault element.
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 9c0d01a..6e8fa7c 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
@@ -53,24 +53,21 @@ import org.slf4j.LoggerFactory;
  *  An application-specific payload-oriented message exchange would handle a specific type
  * of payload structure.  
  * </p>
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public class HttpClientResponseSOAP11Decoder<MessageType extends XMLObject>
-        extends BaseHttpClientResponseXMLMessageDecoder<MessageType> {
+public class HttpClientResponseSOAP11Decoder extends BaseHttpClientResponseXMLMessageDecoder {
     
     /** Logger. */
     private final Logger log = LoggerFactory.getLogger(HttpClientResponseSOAP11Decoder.class);
     
     /** Message handler to use in processing the message body. */
-    private MessageHandler<MessageType> bodyHandler;
+    private MessageHandler bodyHandler;
     
     /**
      * Get the configured body handler MessageHandler.
      * 
      * @return Returns the bodyHandler.
      */
-    public MessageHandler<MessageType> getBodyHandler() {
+    public MessageHandler getBodyHandler() {
         return bodyHandler;
     }
 
@@ -79,13 +76,13 @@ public class HttpClientResponseSOAP11Decoder<MessageType extends XMLObject>
      * 
      * @param newBodyHandler The bodyHandler to set.
      */
-    public void setBodyHandler(final MessageHandler<MessageType> newBodyHandler) {
+    public void setBodyHandler(final MessageHandler newBodyHandler) {
         bodyHandler = newBodyHandler;
     }
 
     /** {@inheritDoc} */
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<MessageType> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpResponse response = getHttpResponse();
         
         log.debug("Unmarshalling SOAP message");
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 500e678..71996a5 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
@@ -51,11 +51,8 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Basic SOAP 1.1 encoder for HTTP transport via an HttpClient's {@link HttpRequest}.
- *
- * @param <MessageType> the message type of the message context on which to operate
  */
-public class HttpClientRequestSOAP11Encoder<MessageType extends XMLObject> 
-        extends BaseHttpClientRequestXMLMessageEncoder<MessageType> {
+public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMessageEncoder {
     
     /** Class logger. */
     private final Logger log = LoggerFactory.getLogger(HttpClientRequestSOAP11Encoder.class);
@@ -99,16 +96,16 @@ public class HttpClientRequestSOAP11Encoder<MessageType extends XMLObject>
 
     /** {@inheritDoc} */
     public void prepareContext() throws MessageEncodingException {
-        final MessageContext<MessageType> messageContext = getMessageContext();
-        final MessageType message = messageContext.getMessage();
-        if (message == null) {
-            throw new MessageEncodingException("No outbound message contained in message context");
+        final MessageContext messageContext = getMessageContext();
+        final Object message = messageContext.getMessage();
+        if (message == null || !(message instanceof XMLObject)) {
+            throw new MessageEncodingException("No outbound XML message contained in message context");
         }
         
         if (message instanceof Envelope) {
             storeSOAPEnvelope((Envelope) message);
         } else {
-            buildAndStoreSOAPMessage(message);
+            buildAndStoreSOAPMessage((XMLObject) message);
         }
         
     }
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/EnvelopeBodyHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/EnvelopeBodyHandler.java
index 24461b3..89308ec 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/EnvelopeBodyHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/EnvelopeBodyHandler.java
@@ -29,15 +29,15 @@ import org.opensaml.soap.soap11.Envelope;
  * A body handler for use with {@link HTTPSOAP11Decoder} that populates the 
  * context message with the SOAP Envelope.
  */
-public class EnvelopeBodyHandler extends AbstractMessageHandler<Envelope> {
+public class EnvelopeBodyHandler extends AbstractMessageHandler {
 
     /** {@inheritDoc} */
-    protected void doInvoke(@Nonnull final MessageContext<Envelope> messageContext) throws MessageHandlerException {
-        final Envelope env = (Envelope) messageContext.getSubcontext(SOAP11Context.class).getEnvelope();
+    protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
+        final Envelope env = messageContext.getSubcontext(SOAP11Context.class).getEnvelope();
         if (env == null) {
             throw new MessageHandlerException("MessageContext did not contain a SOAP Envelope");
         }
         messageContext.setMessage(env);
     }
 
-}
+}
\ No newline at end of file
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 fbda03f..e49f074 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
@@ -52,11 +52,8 @@ import net.shibboleth.utilities.java.support.net.HttpServletSupport;
  *  An application-specific payload-oriented message exchange would handle a specific type
  * of payload structure.  
  * </p>
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public class HTTPSOAP11Decoder<MessageType extends XMLObject> 
-    extends BaseHttpServletRequestXMLMessageDecoder<MessageType> {
+public class HTTPSOAP11Decoder extends BaseHttpServletRequestXMLMessageDecoder {
 
     /** Valid Content-Type media types. */
     private static final Set<MediaType> SUPPORTED_MEDIA_TYPES = Sets.newHashSet(MediaType.create("text", "xml"));
@@ -65,14 +62,14 @@ public class HTTPSOAP11Decoder<MessageType extends XMLObject>
     private final Logger log = LoggerFactory.getLogger(HTTPSOAP11Decoder.class);
     
     /** Message handler to use in processing the message body. */
-    private MessageHandler<MessageType> bodyHandler;
+    private MessageHandler bodyHandler;
     
     /**
      * Get the configured body handler MessageHandler.
      * 
      * @return Returns the bodyHandler.
      */
-    public MessageHandler<MessageType> getBodyHandler() {
+    public MessageHandler getBodyHandler() {
         return bodyHandler;
     }
 
@@ -81,14 +78,14 @@ public class HTTPSOAP11Decoder<MessageType extends XMLObject>
      * 
      * @param newBodyHandler The bodyHandler to set.
      */
-    public void setBodyHandler(final MessageHandler<MessageType> newBodyHandler) {
+    public void setBodyHandler(final MessageHandler newBodyHandler) {
         bodyHandler = newBodyHandler;
     }
 
     /** {@inheritDoc} */
     @Override
     protected void doDecode() throws MessageDecodingException {
-        final MessageContext<MessageType> messageContext = new MessageContext<>();
+        final MessageContext messageContext = new MessageContext();
         final HttpServletRequest request = getHttpServletRequest();
 
         if (!"POST".equalsIgnoreCase(request.getMethod())) {
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/SimplePayloadBodyHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/SimplePayloadBodyHandler.java
index 096ad0c..26bdd43 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/SimplePayloadBodyHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/decoder/http/impl/SimplePayloadBodyHandler.java
@@ -19,6 +19,8 @@ package org.opensaml.soap.soap11.decoder.http.impl;
 
 import java.util.List;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.xml.XMLObject;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
@@ -32,13 +34,11 @@ import org.slf4j.LoggerFactory;
  * A body handler for use with {@link HTTPSOAP11Decoder} that populates the 
  * context message with the payload from the SOAP Envelope Body. The first 
  * child element of of the SOAP Envelope's Body is chosen as the message.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public class SimplePayloadBodyHandler<MessageType extends XMLObject> extends AbstractMessageHandler<MessageType> {
+public class SimplePayloadBodyHandler extends AbstractMessageHandler {
     
     /** Logger. */
-    private Logger log = LoggerFactory.getLogger(SimplePayloadBodyHandler.class);
+    @Nonnull private Logger log = LoggerFactory.getLogger(SimplePayloadBodyHandler.class);
 
     /** {@inheritDoc} */
     protected void doInvoke(final MessageContext messageContext) throws MessageHandlerException {
@@ -47,10 +47,10 @@ public class SimplePayloadBodyHandler<MessageType extends XMLObject> extends Abs
         if (bodyChildren == null || bodyChildren.isEmpty()) {
             throw new MessageHandlerException("SOAP Envelope Body contained no children");
         } else if (bodyChildren.size() > 1) {
-            log.warn("SOAP Envelope Body contained more than one child.  Returning the first as the message");
+            log.warn("SOAP Envelope Body contained more than one child, returning the first as the message");
         }
             
         messageContext.setMessage(env.getBody().getUnknownXMLObjects().get(0));
     }
 
-}
+}
\ No newline at end of file
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 9e93c39..5b6cf53 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
@@ -47,11 +47,8 @@ import org.w3c.dom.Element;
 
 /**
  * Basic SOAP 1.1 encoder for HTTP transport.
- * 
- * @param <MessageType> the message type of the message context on which to operate
  */
-public class HTTPSOAP11Encoder<MessageType extends XMLObject> 
-        extends BaseHttpServletResponseXMLMessageEncoder<MessageType> {
+public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder {
 
     /** Class logger. */
     private final Logger log = LoggerFactory.getLogger(HTTPSOAP11Encoder.class);
@@ -75,8 +72,8 @@ public class HTTPSOAP11Encoder<MessageType extends XMLObject>
     
     /** {@inheritDoc} */
     public void prepareContext() throws MessageEncodingException {
-        final MessageContext<MessageType> messageContext = getMessageContext();
-        XMLObject payload = null;
+        final MessageContext messageContext = getMessageContext();
+        Object payload = null;
         
         final Fault fault = SOAPMessagingSupport.getSOAP11Fault(messageContext);
         if (fault != null) {
@@ -88,16 +85,15 @@ public class HTTPSOAP11Encoder<MessageType extends XMLObject>
             payload = messageContext.getMessage();
         }
         
-        if (payload == null) {
-            throw new MessageEncodingException("No outbound message or Fault contained in message context");
+        if (payload == null || !(payload instanceof XMLObject)) {
+            throw new MessageEncodingException("No outbound XML message or Fault contained in message context");
         }
         
         if (payload instanceof Envelope) {
             storeSOAPEnvelope((Envelope) payload);
         } else {
-            buildAndStoreSOAPMessage(payload);
+            buildAndStoreSOAPMessage((XMLObject) payload);
         }
-        
     }
 
     /** {@inheritDoc} */
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
index e3a78bd..f3b382e 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/messaging/impl/SOAP11FaultContextDecoratingErrorHandler.java
@@ -39,10 +39,8 @@ import org.opensaml.soap.wsaddressing.messaging.WSAddressingContext;
  * The actual SOAP 1.1. fault is assumed to be emitted later, perhaps directly by a specialized
  * fault-aware {@link org.opensaml.messaging.encoder.MessageEncoder}.
  * </p>
- * 
- * @param <MessageType> the type of message supported
  */
-public class SOAP11FaultContextDecoratingErrorHandler<MessageType> implements TypedMessageErrorHandler<MessageType> {
+public class SOAP11FaultContextDecoratingErrorHandler implements TypedMessageErrorHandler {
     
     /** The handled type of Throwable. */
     @Nonnull private Class<? extends Throwable> handledThrowable;
@@ -97,7 +95,7 @@ public class SOAP11FaultContextDecoratingErrorHandler<MessageType> implements Ty
     }
     
     /** {@inheritDoc} */
-    public boolean handleError(@Nonnull final Throwable t, @Nonnull final MessageContext<MessageType> messageContext) {
+    public boolean handleError(@Nonnull final Throwable t, @Nonnull final MessageContext messageContext) {
         //TODO can support details?
         //TODO add Function<MessageContext,Fault> support?
         final Fault fault = SOAPSupport.buildSOAP11Fault(faultCode, faultString, faultActor, null, null);
@@ -111,4 +109,4 @@ public class SOAP11FaultContextDecoratingErrorHandler<MessageType> implements Ty
         return true;
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
index 2ed381c..90392fb 100644
--- a/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
+++ b/opensaml-soap-impl/src/main/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFault.java
@@ -194,7 +194,7 @@ public class AddSOAPFault extends AbstractProfileAction {
         if (profileRequestContext.getOutboundMessageContext() != null && nullifyOutboundMessage) {
             profileRequestContext.getOutboundMessageContext().setMessage(null);
         } else {
-            profileRequestContext.setOutboundMessageContext(new MessageContext<Object>());
+            profileRequestContext.setOutboundMessageContext(new MessageContext());
         }
         
         return super.doPreExecute(profileRequestContext);
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/SOAPMessagingBaseTestCase.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/SOAPMessagingBaseTestCase.java
index a9c0331..03035ef 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/SOAPMessagingBaseTestCase.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/SOAPMessagingBaseTestCase.java
@@ -30,11 +30,11 @@ import org.testng.annotations.BeforeMethod;
  */
 public class SOAPMessagingBaseTestCase extends XMLObjectBaseTestCase {
     
-    private MessageContext<XMLObject> messageContext;
+    private MessageContext messageContext;
     
     private Envelope envelope;
     
-    protected MessageContext<XMLObject> getMessageContext() {
+    protected MessageContext getMessageContext() {
         return messageContext;
     }
     
@@ -44,13 +44,13 @@ public class SOAPMessagingBaseTestCase extends XMLObjectBaseTestCase {
     
     @BeforeMethod
     protected void setUpMessageContextAndEnvelope() {
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         messageContext.setMessage(buildXMLObject(simpleXMLObjectQName));
         
         envelope = buildXMLObject(Envelope.DEFAULT_ELEMENT_NAME);
         envelope.setBody((Body) buildXMLObject(Body.DEFAULT_ELEMENT_NAME));
-        envelope.getBody().getUnknownXMLObjects().add(messageContext.getMessage());
+        envelope.getBody().getUnknownXMLObjects().add((XMLObject) messageContext.getMessage());
         messageContext.getSubcontext(SOAP11Context.class, true).setEnvelope(envelope);
     }
 
-}
+}
\ No newline at end of file
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11DecoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11DecoderTest.java
index 0f663e4..9a4a136 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11DecoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/decoder/http/impl/HttpClientResponseSOAP11DecoderTest.java
@@ -30,7 +30,6 @@ import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.message.BasicHttpResponse;
-import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.io.MarshallingException;
 import org.opensaml.core.xml.mock.SimpleXMLObject;
@@ -52,11 +51,11 @@ import org.w3c.dom.Element;
 
 public class HttpClientResponseSOAP11DecoderTest extends XMLObjectBaseTestCase {
     
-    private HttpClientResponseSOAP11Decoder<XMLObject> decoder;
+    private HttpClientResponseSOAP11Decoder decoder;
     
     @BeforeMethod
     public void setUp() {
-        decoder = new HttpClientResponseSOAP11Decoder<>();
+        decoder = new HttpClientResponseSOAP11Decoder();
         decoder.setParserPool(parserPool);
     }
     
@@ -72,7 +71,7 @@ public class HttpClientResponseSOAP11DecoderTest extends XMLObjectBaseTestCase {
         
         decoder.decode();
         
-        MessageContext<XMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
         
         Assert.assertNotNull(messageContext);
         Assert.assertNotNull(messageContext.getMessage());
@@ -96,7 +95,7 @@ public class HttpClientResponseSOAP11DecoderTest extends XMLObjectBaseTestCase {
         
         decoder.decode();
         
-        MessageContext<XMLObject> messageContext = decoder.getMessageContext();
+        MessageContext messageContext = decoder.getMessageContext();
         
         Assert.assertNotNull(messageContext);
         Assert.assertNotNull(messageContext.getMessage());
@@ -143,7 +142,7 @@ public class HttpClientResponseSOAP11DecoderTest extends XMLObjectBaseTestCase {
         return envelope;
     }
     
-    public class TestEnvelopeBodyHandler extends AbstractMessageHandler<XMLObject> {
+    public class TestEnvelopeBodyHandler extends AbstractMessageHandler {
         /** {@inheritDoc} */
         protected void doInvoke(MessageContext msgContext) throws MessageHandlerException {
             Envelope env = (Envelope) msgContext.getSubcontext(SOAP11Context.class).getEnvelope();
@@ -151,7 +150,7 @@ public class HttpClientResponseSOAP11DecoderTest extends XMLObjectBaseTestCase {
         }
     }
     
-    public class TestPayloadBodyHandler extends AbstractMessageHandler<XMLObject> {
+    public class TestPayloadBodyHandler extends AbstractMessageHandler {
         /** {@inheritDoc} */
         protected void doInvoke(MessageContext msgContext) throws MessageHandlerException {
             Envelope env = (Envelope) msgContext.getSubcontext(SOAP11Context.class).getEnvelope();
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11EncoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11EncoderTest.java
index 85bebb1..9ddd67c 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11EncoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/client/soap11/encoder/http/impl/HttpClientRequestSOAP11EncoderTest.java
@@ -20,7 +20,6 @@ package org.opensaml.soap.client.soap11.encoder.http.impl;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
 import org.apache.http.client.methods.HttpPost;
-import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.mock.SimpleXMLObject;
 import org.opensaml.messaging.context.MessageContext;
@@ -35,9 +34,9 @@ import org.testng.annotations.Test;
 
 public class HttpClientRequestSOAP11EncoderTest extends XMLObjectBaseTestCase {
     
-    private HttpClientRequestSOAP11Encoder<XMLObject> encoder;
+    private HttpClientRequestSOAP11Encoder encoder;
     
-    private MessageContext<XMLObject> messageContext;
+    private MessageContext messageContext;
     
     private HttpPost request;
     
@@ -45,7 +44,7 @@ public class HttpClientRequestSOAP11EncoderTest extends XMLObjectBaseTestCase {
     public void setUp() {
         request = new HttpPost("http://example.org/soap/receiver");
         
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         
         encoder = new HttpClientRequestSOAP11Encoder();
         encoder.setMessageContext(messageContext);
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
index 624071b..d666d37 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/decoder/http/impl/HTTPSOAP11DecoderTest.java
@@ -19,7 +19,6 @@ package org.opensaml.soap.soap11.decoder.http.impl;
 
 import java.io.IOException;
 
-import org.opensaml.core.xml.XMLObject;
 import org.opensaml.core.xml.XMLObjectBaseTestCase;
 import org.opensaml.core.xml.schema.XSAny;
 import org.opensaml.messaging.context.MessageContext;
@@ -75,9 +74,9 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         decoder.initialize();
         
         decoder.decode();
-        MessageContext<XMLObject> msgContext = decoder.getMessageContext();
+        MessageContext msgContext = decoder.getMessageContext();
         
-        XMLObject msg = msgContext.getMessage();
+        Object msg = msgContext.getMessage();
         Assert.assertNotNull(msg);
         
         Assert.assertTrue(msg instanceof Envelope);
@@ -99,9 +98,9 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         decoder.initialize();
         
         decoder.decode();
-        MessageContext<XMLObject> msgContext = decoder.getMessageContext();
+        MessageContext msgContext = decoder.getMessageContext();
         
-        XMLObject msg = msgContext.getMessage();
+        Object msg = msgContext.getMessage();
         Assert.assertNotNull(msg);
         
         Assert.assertTrue(msg instanceof XSAny);
@@ -162,7 +161,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         return Resources.toByteArray(getClass().getResource(resourceName));
     }
 
-    public class TestEnvelopeBodyHandler extends AbstractMessageHandler<Envelope> {
+    public class TestEnvelopeBodyHandler extends AbstractMessageHandler {
         /** {@inheritDoc} */
         protected void doInvoke(MessageContext msgContext) throws MessageHandlerException {
             Envelope env = (Envelope) msgContext.getSubcontext(SOAP11Context.class).getEnvelope();
@@ -170,7 +169,7 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
         }
     }
     
-    public class TestPayloadBodyHandler extends AbstractMessageHandler<Envelope> {
+    public class TestPayloadBodyHandler extends AbstractMessageHandler {
         /** {@inheritDoc} */
         protected void doInvoke(MessageContext msgContext) throws MessageHandlerException {
             Envelope env = (Envelope) msgContext.getSubcontext(SOAP11Context.class).getEnvelope();
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
index 389ff77..69dd142 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/encoder/http/impl/HTTPSOAP11EncoderTest.java
@@ -77,12 +77,12 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         payload.getUnknownXMLObjects().add(price);
         
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -129,12 +129,12 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         body.getUnknownXMLObjects().add(payload);
         
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(envelope);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -187,13 +187,13 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         payload.getUnknownXMLObjects().add(price);
         
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
         messageContext.getSubcontext(SOAP11Context.class, true).setEnvelope(envelope);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -248,12 +248,12 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         body.getUnknownXMLObjects().add(payload);
         
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(envelope);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -281,12 +281,12 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         faultString.setValue("Something bad happened");
         fault.setMessage(faultString);
        
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(fault);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -331,13 +331,13 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
         
         payload.getUnknownXMLObjects().add(price);
        
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
         SOAPMessagingSupport.registerSOAP11Fault(messageContext, fault);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
@@ -366,14 +366,14 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
     public void testContextReturnStatus() throws ComponentInitializationException, MessageEncodingException, XMLParserException, UnmarshallingException {
         XMLObject payload = buildXMLObject(simpleXMLObjectQName);
         
-        MessageContext<XMLObject> messageContext = new MessageContext<>();
+        MessageContext messageContext = new MessageContext();
         messageContext.setMessage(payload);
         
         messageContext.getSubcontext(SOAP11Context.class, true).setHTTPResponseStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
         
         MockHttpServletResponse response = new MockHttpServletResponse();
         
-        HTTPSOAP11Encoder<XMLObject> encoder = new HTTPSOAP11Encoder<>();
+        HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
         encoder.setMessageContext(messageContext);
         encoder.setHttpServletResponse(response);
         
diff --git a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
index 9a89378..ef32189 100644
--- a/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
+++ b/opensaml-soap-impl/src/test/java/org/opensaml/soap/soap11/profile/impl/AddSOAPFaultTest.java
@@ -41,7 +41,7 @@ import com.google.common.base.Predicates;
 /** {@link AddSOAPFault} unit test. */
 public class AddSOAPFaultTest extends OpenSAMLInitBaseTestCase {
     
-    private ProfileRequestContext<Object,Fault> prc;
+    private ProfileRequestContext prc;
     
     private AddSOAPFault action;
     
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
index c89edb7..34df2bf 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LoadClientStorageServices.java
@@ -54,12 +54,8 @@ import net.shibboleth.utilities.java.support.net.URISupport;
  * 
  * @event {@link EventIds#PROCEED_EVENT_ID}
  * @event {@link EventIds#INVALID_PROFILE_CTX}
- * 
- * @param <InboundMessageType>
- * @param <OutboundMessageType>
  */
-public class LoadClientStorageServices<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public class LoadClientStorageServices extends AbstractProfileAction {
     
     /** Name of local storage form field containing local storage support indicator. */
     @Nonnull @NotEmpty public static final String SUPPORT_FORM_FIELD = "shib_idp_ls_supported";
@@ -118,8 +114,7 @@ public class LoadClientStorageServices<InboundMessageType, OutboundMessageType>
     }
     
     /** {@inheritDoc} */
-    @Override protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         if (!super.doPreExecute(profileRequestContext)) {
             return false;
@@ -147,8 +142,7 @@ public class LoadClientStorageServices<InboundMessageType, OutboundMessageType>
     }
 
     /** {@inheritDoc} */
-    @Override protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         boolean useLS = useLocalStorage;
         if (useLS) {
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LogLocalStorageSaveResults.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LogLocalStorageSaveResults.java
index 52be73c..8c2ccf1 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LogLocalStorageSaveResults.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/LogLocalStorageSaveResults.java
@@ -33,12 +33,8 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
  * An action that logs the results of Local Storage-based {@link ClientStorageService} save operations.
  * 
  * @event {@link org.opensaml.profile.action.EventIds#PROCEED_EVENT_ID}
- * 
- * @param <InboundMessageType>
- * @param <OutboundMessageType>
  */
-public class LogLocalStorageSaveResults<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public class LogLocalStorageSaveResults extends AbstractProfileAction {
 
     /** Name of local storage form field signaling success/failure of a read operation. */
     @Nonnull @NotEmpty public static final String SUCCESS_FORM_FIELD = "shib_idp_ls_success";
@@ -53,8 +49,7 @@ public class LogLocalStorageSaveResults<InboundMessageType, OutboundMessageType>
     @Nullable private ClientStorageSaveContext clientStorageSaveCtx;
     
     /** {@inheritDoc} */
-    @Override protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         if (!super.doPreExecute(profileRequestContext)) {
             return false;
@@ -74,8 +69,7 @@ public class LogLocalStorageSaveResults<InboundMessageType, OutboundMessageType>
     }
 
     /** {@inheritDoc} */
-    @Override protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         final HttpServletRequest request = getHttpServletRequest();
 
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
index 7636d60..5032843 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageLoadContext.java
@@ -46,12 +46,8 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * 
  * @event {@link org.opensaml.profile.action.EventIds#PROCEED_EVENT_ID}
  * @event {@link #LOAD_NOT_NEEDED}
- * 
- * @param <InboundMessageType>
- * @param <OutboundMessageType>
  */
-public class PopulateClientStorageLoadContext<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public class PopulateClientStorageLoadContext extends AbstractProfileAction {
 
     /** Event signaling that no load step is necessary. */
     @Nonnull @NotEmpty public static final String LOAD_NOT_NEEDED = "NoLoadNeeded";
@@ -80,8 +76,7 @@ public class PopulateClientStorageLoadContext<InboundMessageType, OutboundMessag
     }
     
     /** {@inheritDoc} */
-    @Override protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         if (!super.doPreExecute(profileRequestContext)) {
             ActionSupport.buildEvent(profileRequestContext, LOAD_NOT_NEEDED);
@@ -98,8 +93,7 @@ public class PopulateClientStorageLoadContext<InboundMessageType, OutboundMessag
     }
 
     /** {@inheritDoc} */
-    @Override protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         final ClientStorageLoadContext loadCtx = new ClientStorageLoadContext();
         
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
index 1dc46e4..13dfb14 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/PopulateClientStorageSaveContext.java
@@ -46,12 +46,8 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * 
  * @event {@link org.opensaml.profile.action.EventIds#PROCEED_EVENT_ID}
  * @event {@link #SAVE_NOT_NEEDED}
- * 
- * @param <InboundMessageType>
- * @param <OutboundMessageType>
  */
-public class PopulateClientStorageSaveContext<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public class PopulateClientStorageSaveContext extends AbstractProfileAction {
 
     /** Event signaling that no load step is necessary. */
     @Nonnull @NotEmpty public static final String SAVE_NOT_NEEDED = "NoSaveNeeded";
@@ -80,8 +76,7 @@ public class PopulateClientStorageSaveContext<InboundMessageType, OutboundMessag
     }
     
     /** {@inheritDoc} */
-    @Override protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         if (!super.doPreExecute(profileRequestContext)) {
             ActionSupport.buildEvent(profileRequestContext, SAVE_NOT_NEEDED);
@@ -98,8 +93,7 @@ public class PopulateClientStorageSaveContext<InboundMessageType, OutboundMessag
     }
 
     /** {@inheritDoc} */
-    @Override protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         final ClientStorageSaveContext saveCtx = new ClientStorageSaveContext();
         
diff --git a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
index 5c31a13..4850704 100644
--- a/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
+++ b/opensaml-storage-impl/src/main/java/org/opensaml/storage/impl/client/SaveCookieBackedClientStorageServices.java
@@ -51,12 +51,9 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * @event {@link EventIds#PROCEED_EVENT_ID}
  * @event {@link EventIds#INVALID_PROFILE_CTX}
  * @post ProfileRequestContext.getSubcontext(ClientStorageSaveContext.class) == null
- * 
- * @param <InboundMessageType>
- * @param <OutboundMessageType>
  */
-public class SaveCookieBackedClientStorageServices<InboundMessageType, OutboundMessageType>
-        extends AbstractProfileAction<InboundMessageType, OutboundMessageType> {
+public class SaveCookieBackedClientStorageServices
+        extends AbstractProfileAction {
     
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(SaveCookieBackedClientStorageServices.class);
@@ -92,8 +89,7 @@ public class SaveCookieBackedClientStorageServices<InboundMessageType, OutboundM
     }
     
     /** {@inheritDoc} */
-    @Override protected boolean doPreExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         if (!super.doPreExecute(profileRequestContext)) {
             return false;
@@ -121,8 +117,7 @@ public class SaveCookieBackedClientStorageServices<InboundMessageType, OutboundM
     }
 
     /** {@inheritDoc} */
-    @Override protected void doExecute(
-            @Nonnull final ProfileRequestContext<InboundMessageType, OutboundMessageType> profileRequestContext) {
+    @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
         for (final ClientStorageServiceOperation operation : clientStorageSaveCtx.getStorageOperations()) {
             
diff --git a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
index 2b6f5d4..6e41b30 100644
--- a/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
+++ b/opensaml-xmlsec-impl/src/test/java/org/opensaml/xmlsec/messaging/impl/PopulateSignatureValidationParametersHandlerTest.java
@@ -44,7 +44,7 @@ public class PopulateSignatureValidationParametersHandlerTest extends OpenSAMLIn
     private PopulateSignatureValidationParametersHandler handler;
     
     @BeforeMethod public void setUp() {
-        messageContext = new MessageContext<>();
+        messageContext = new MessageContext();
         handler = new PopulateSignatureValidationParametersHandler();
     }
     

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


More information about the commits mailing list