}
return encoder;
}
+
+ /**
+ * Get the inbound message decoder to use.
+ *
+ * <p>The default implementation uses the binding URI from
+ * {@link #getInboundBinding()} to lookup the decoder from the supported message decoders
+ * defined in {@link #getMessageDecoders()}.
+ * </p>
+ *
+ * <p>
+ * Subclasses may override to implement a different mechanism to determine the
+ * decoder to use.
+ * </p>
+ *
+ * @param requestContext current request context
+ * @return the message decoder to use
+ * @throws ProfileException if the decoder to use can not be resolved based on the request context
+ */
+ protected SAMLMessageDecoder getInboundMessageDecoder(BaseSAMLProfileRequestContext requestContext)
+ throws ProfileException {
+ SAMLMessageDecoder decoder = null;
+
+ decoder = getMessageDecoders().get(getInboundBinding());
+ if (decoder == null) {
+ log.error("No inbound message decoder configured for binding: {}", getInboundBinding());
+ throw new ProfileException("No inbound message decoder configured for binding: " + getInboundBinding());
+ }
+ return decoder;
+ }
/**
* Writes an audit log entry indicating the successful response to the attribute request.
*/
protected void decodeRequest(ArtifactResolutionRequestContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding '{}'", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding '{}'",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
requestContext.setCommunicationProfileId(getProfileId());
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML11P_NS);
try {
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
decoder.decode(requestContext);
log.debug("Decoded artifact resolution request from relying party '{}'", requestContext
*/
protected void decodeRequest(AttributeQueryContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding {}", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding {}",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
requestContext.setCommunicationProfileId(getProfileId());
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML11P_NS);
try {
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
- if (decoder == null) {
- throw new ProfileException("No message decoder configured for inbound binding " + getInboundBinding());
- }
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
decoder.decode(requestContext);
log.debug("Decoded request");
*/
protected void decodeRequest(ShibbolethSSORequestContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding {}", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding {}",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
HttpServletRequest httpRequest = ((HttpServletRequestAdapter) inTransport).getWrappedRequest();
requestContext.setOutboundMessageTransport(outTransport);
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML11P_NS);
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
try {
decoder.decode(requestContext);
ShibbolethSSORequestContext requestContext = new ShibbolethSSORequestContext();
requestContext.setCommunicationProfileId(getProfileId());
- requestContext.setMessageDecoder(getMessageDecoders().get(getInboundBinding()));
+ requestContext.setMessageDecoder(getInboundMessageDecoder(requestContext));
requestContext.setLoginContext(loginContext);
requestContext.setRelayState(loginContext.getSpTarget());
*/
protected void decodeRequest(ArtifactResolutionRequestContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding '{}'", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding '{}'",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
requestContext.setCommunicationProfileId(getProfileId());
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML20P_NS);
try {
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
decoder.decode(requestContext);
log.debug("Decoded request from relying party '{}'", requestContext.getInboundMessageIssuer());
*/
protected void decodeRequest(AttributeQueryContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding '{}'", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding '{}'",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
requestContext.setCommunicationProfileId(getProfileId());
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML20P_NS);
try {
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
decoder.decode(requestContext);
log.debug("Decoded request from relying party '{}'", requestContext.getInboundMessage());
*/
protected void decodeRequest(SSORequestContext requestContext, HTTPInTransport inTransport,
HTTPOutTransport outTransport) throws ProfileException {
- log.debug("Decoding message with decoder binding '{}'", getInboundBinding());
+ if (log.isDebugEnabled()) {
+ log.debug("Decoding message with decoder binding '{}'",
+ getInboundMessageDecoder(requestContext).getBindingURI());
+ }
requestContext.setCommunicationProfileId(getProfileId());
requestContext.setOutboundSAMLProtocol(SAMLConstants.SAML20P_NS);
try {
- SAMLMessageDecoder decoder = getMessageDecoders().get(getInboundBinding());
+ SAMLMessageDecoder decoder = getInboundMessageDecoder(requestContext);
requestContext.setMessageDecoder(decoder);
decoder.decode(requestContext);
log.debug("Decoded request from relying party '{}'", requestContext.getInboundMessageIssuer());
SSORequestContext requestContext = new SSORequestContext();
requestContext.setCommunicationProfileId(getProfileId());
- requestContext.setMessageDecoder(getMessageDecoders().get(getInboundBinding()));
+ requestContext.setMessageDecoder(getInboundMessageDecoder(requestContext));
requestContext.setLoginContext(loginContext);