[java-opensaml] branch main updated: IDP-2069 - Null Handling Task
Scott Cantor
cantor.2 at osu.edu
Fri Apr 7 20:00:59 UTC 2023
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-opensaml.
View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=093add7bb4a109017c08725a2a4be7550c620b72
The following commit(s) were added to refs/heads/main by this push:
new 093add7bb IDP-2069 - Null Handling Task
093add7bb is described below
commit 093add7bb4a109017c08725a2a4be7550c620b72
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Apr 7 16:00:55 2023 -0400
IDP-2069 - Null Handling Task
https://shibboleth.atlassian.net/browse/IDP-2069
Clean SAML encoders/decoders.
Clean some tests.
---
.../AbstractHttpServletRequestMessageDecoder.java | 2 +-
.../AbstractHttpServletResponseMessageEncoder.java | 3 +-
.../soap/SAMLSOAPClientContextBuilder.java | 2 +-
.../binding/artifact/SAML2ArtifactType0004.java | 2 +-
.../binding/decoding/impl/HTTPArtifactDecoder.java | 82 ++++------
.../binding/decoding/impl/HTTPPostDecoder.java | 6 +-
.../decoding/impl/HTTPRedirectDeflateDecoder.java | 6 +-
.../binding/decoding/impl/HTTPSOAP11Decoder.java | 11 +-
.../impl/HttpClientResponseSOAP11Decoder.java | 11 +-
.../encoding/impl/BaseSAML2MessageEncoder.java | 5 +-
.../binding/encoding/impl/HTTPArtifactEncoder.java | 45 ++---
.../binding/encoding/impl/HTTPPostEncoder.java | 52 +++---
.../encoding/impl/HTTPPostSimpleSignEncoder.java | 50 +++---
.../encoding/impl/HTTPRedirectDeflateEncoder.java | 60 +++----
.../binding/encoding/impl/HTTPSOAP11Encoder.java | 10 +-
.../impl/HttpClientRequestSOAP11Encoder.java | 15 +-
.../binding/decoding/impl/HTTPPostDecoderTest.java | 21 ++-
.../decoding/impl/HTTPSOAP11DecoderTest.java | 17 +-
.../binding/encoding/impl/HTTPPostEncoderTest.java | 64 ++++----
.../encoding/impl/HTTPSOAP11EncoderTest.java | 37 +++--
.../binding/decoding/impl/HTTPPostDecoderTest.java | 6 +-
.../impl/HTTPRedirectDeflateDecoderTest.java | 33 ++--
.../decoding/impl/HTTPSOAP11DecoderTest.java | 17 +-
.../impl/HTTPPostSimpleSignEncoderTest.java | 3 +-
.../impl/HTTPRedirectDeflateEncoderTest.java | 182 +++++++++++----------
.../encoding/impl/HTTPSOAP11EncoderTest.java | 41 ++---
.../http/impl/HttpClientRequestSOAP11Encoder.java | 2 +-
.../encoder/http/impl/HTTPSOAP11Encoder.java | 10 +-
.../org/opensaml/xmlsec/crypto/XMLSigningUtil.java | 4 +-
29 files changed, 417 insertions(+), 382 deletions(-)
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 23c3ad055..5fa19bbfe 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
@@ -37,7 +37,7 @@ public abstract class AbstractHttpServletRequestMessageDecoder extends AbstractM
@NonnullAfterInit private NonnullSupplier<HttpServletRequest> httpServletRequestSupplier;
/** {@inheritDoc} */
- @Nullable public HttpServletRequest getHttpServletRequest() {
+ @NonnullAfterInit public HttpServletRequest getHttpServletRequest() {
if (httpServletRequestSupplier != null) {
return httpServletRequestSupplier.get();
}
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 9e9c5beac..23e001559 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
@@ -70,4 +70,5 @@ public abstract class AbstractHttpServletResponseMessageEncoder extends Abstract
throw new ComponentInitializationException("HTTP servlet response cannot be null");
}
}
-}
+
+}
\ No newline at end of file
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 0b0893263..b4b07a5d7 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
@@ -343,7 +343,7 @@ 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 build() throws MessageException {
+ @Nonnull public InOutOperationContext build() throws MessageException {
if (getOutboundMessage() == null) {
errorMissingData("Outbound message");
}
diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004.java
index bb44530c4..ca3a152f3 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/saml2/binding/artifact/SAML2ArtifactType0004.java
@@ -30,7 +30,7 @@ import org.opensaml.saml.common.binding.artifact.SAMLSourceIDArtifact;
public class SAML2ArtifactType0004 extends AbstractSAML2Artifact implements SAMLSourceIDArtifact {
/** SAML 2 artifact type code (0x0004). */
- @Nonnull public static final byte[] TYPE_CODE = { 0, 4 };
+ @Nonnull public static final byte[] TYPE_CODE = { 0, 4 };
/** 20 byte artifact source ID. */
@Nonnull private byte[] sourceID;
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 c154d5b57..a2589dabc 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
@@ -52,6 +52,7 @@ import org.opensaml.saml.saml2.core.Artifact;
import org.opensaml.saml.saml2.core.ArtifactResolve;
import org.opensaml.saml.saml2.core.ArtifactResponse;
import org.opensaml.saml.saml2.core.Issuer;
+import org.opensaml.saml.saml2.core.Status;
import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.metadata.ArtifactResolutionService;
import org.opensaml.saml.saml2.metadata.RoleDescriptor;
@@ -60,7 +61,6 @@ import org.opensaml.soap.client.SOAPClient;
import org.opensaml.soap.client.http.PipelineFactoryHttpSOAPClient;
import org.opensaml.soap.common.SOAPException;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -70,6 +70,7 @@ import net.shibboleth.shared.codec.DecodingException;
import net.shibboleth.shared.codec.EncodingException;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.resolver.CriteriaSet;
import net.shibboleth.shared.resolver.Resolver;
@@ -104,16 +105,16 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
@NonnullAfterInit private Resolver<String, CriteriaSet> selfEntityIDResolver;
/** SOAP client. */
- private SOAPClient soapClient;
+ @NonnullAfterInit private SOAPClient soapClient;
/** The SOAP client message pipeline name. */
- private String soapPipelineName;
+ @Nullable private String soapPipelineName;
/** SOAP client security configuration profile ID. */
- private String soapClientSecurityConfigurationProfileId;
+ @Nullable private String soapClientSecurityConfigurationProfileId;
/** Identifier generation strategy. */
- private IdentifierGenerationStrategy idStrategy;
+ @NonnullAfterInit private IdentifierGenerationStrategy idStrategy;
/** {@inheritDoc} */
protected void doInitialize() throws ComponentInitializationException {
@@ -150,19 +151,6 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
if (artifactEndpointResolver == null) {
artifactEndpointResolver = new DefaultEndpointResolver<>();
}
-
- }
-
- /** {@inheritDoc} */
- protected void doDestroy() {
- super.doDestroy();
- bindingDescriptor = null;
- artifactBuilderFactory = null;
- artifactEndpointResolver = null;
- roleDescriptorResolver = null;
- peerEntityRole = null;
- soapClient = null;
- idStrategy = null;
}
/**
@@ -198,7 +186,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*
* @param resolver the resolver instance
*/
- public void setSelfEntityIDResolver(@Nonnull final Resolver<String, CriteriaSet> resolver) {
+ public void setSelfEntityIDResolver(@Nullable final Resolver<String, CriteriaSet> resolver) {
checkSetterPreconditions();
selfEntityIDResolver = resolver;
}
@@ -217,7 +205,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*
* @param role the peer entity role
*/
- public void setPeerEntityRole(@Nonnull final QName role) {
+ public void setPeerEntityRole(@Nullable final QName role) {
checkSetterPreconditions();
peerEntityRole = role;
}
@@ -301,7 +289,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*
* @param client the SOAP client
*/
- public void setSOAPClient(@Nonnull final SOAPClient client) {
+ public void setSOAPClient(@Nullable final SOAPClient client) {
checkSetterPreconditions();
soapClient = client;
}
@@ -405,15 +393,9 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
try {
final SAML2Artifact artifact = parseArtifact(encodedArtifact);
-
final RoleDescriptor peerRoleDescriptor = resolvePeerRoleDescriptor(artifact);
- if (peerRoleDescriptor == null) {
- throw new MessageDecodingException("Failed to resolve peer RoleDescriptor based on inbound artifact");
- }
-
- final ArtifactResolutionService ars = resolveArtifactEndpoint(artifact, peerRoleDescriptor);
-
- final SAMLObject inboundMessage = dereferenceArtifact(artifact, peerRoleDescriptor, ars);
+ final String resolutionEndpoint = resolveArtifactEndpoint(artifact, peerRoleDescriptor);
+ final SAMLObject inboundMessage = dereferenceArtifact(artifact, peerRoleDescriptor, resolutionEndpoint);
messageContext.setMessage(inboundMessage);
} catch (final MessageDecodingException e) {
@@ -428,12 +410,12 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*
* @param artifact the artifact to de-reference
* @param peerRoleDescriptor the peer RoleDescriptor
- * @param ars the peer's artifact resolution service endpoint
+ * @param endpoint the peer's artifact resolution service endpoint
* @return the de-referenced artifact
* @throws MessageDecodingException if there is fatal error, or if the artifact was not successfully resolved
*/
@Nonnull private SAMLObject dereferenceArtifact(@Nonnull final SAML2Artifact artifact,
- @Nonnull final RoleDescriptor peerRoleDescriptor, @Nonnull final ArtifactResolutionService ars)
+ @Nonnull final RoleDescriptor peerRoleDescriptor, @Nonnull final String endpoint)
throws MessageDecodingException {
try {
@@ -442,7 +424,7 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
// TODO can assume/enforce response as ArtifactResponse here?
final InOutOperationContext opContext = new SAMLSOAPClientContextBuilder<>()
.setOutboundMessage(buildArtifactResolveRequestMessage(
- artifact, ars.getLocation(), peerRoleDescriptor, selfEntityID))
+ artifact, endpoint, peerRoleDescriptor, selfEntityID))
.setProtocol(SAMLConstants.SAML20P_NS)
.setPipelineName(getSOAPPipelineName())
.setSecurityConfigurationProfileId(getSOAPClientSecurityConfigurationProfileId())
@@ -450,14 +432,15 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
.setSelfEntityID(selfEntityID)
.build();
- log.trace("Executing ArtifactResolve over SOAP 1.1 binding to endpoint: {}", ars.getLocation());
- soapClient.send(ars.getLocation(), opContext);
- final Object response = opContext.getInboundMessageContext().getMessage();
+ log.trace("Executing ArtifactResolve over SOAP 1.1 binding to endpoint: {}", endpoint);
+ soapClient.send(endpoint, opContext);
+ final MessageContext inboundContext = opContext.getInboundMessageContext();
+ final Object response = inboundContext != null ? inboundContext.getMessage() : null;
if (response instanceof ArtifactResponse) {
return validateAndExtractResponseMessage((ArtifactResponse) response);
}
throw new MessageDecodingException("SOAP message payload was not an instance of ArtifactResponse: "
- + response.getClass().getName());
+ + (response != null ? response.getClass().getName() : "(null)"));
} catch (final MessageException | SOAPException | SecurityException | EncodingException e) {
throw new MessageDecodingException("Error dereferencing artifact", e);
}
@@ -472,22 +455,22 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*/
@Nonnull private SAMLObject validateAndExtractResponseMessage(@Nonnull final ArtifactResponse artifactResponse)
throws MessageDecodingException {
- if (artifactResponse.getStatus() == null
- || artifactResponse.getStatus().getStatusCode() == null
- || artifactResponse.getStatus().getStatusCode().getValue() == null) {
-
+
+ final Status status = artifactResponse.getStatus();
+ final StatusCode statusCode = status != null ? status.getStatusCode() : null;
+ if (statusCode == null || statusCode.getValue() == null) {
throw new MessageDecodingException("ArtifactResponse included no StatusCode, could not validate");
-
- } else if (!StatusCode.SUCCESS.equals(artifactResponse.getStatus().getStatusCode().getValue())){
+ } else if (!StatusCode.SUCCESS.equals(statusCode.getValue())){
throw new MessageDecodingException("ArtifactResponse carried non-success StatusCode: "
- + artifactResponse.getStatus().getStatusCode().getValue());
+ + statusCode.getValue());
}
- if (artifactResponse.getMessage() == null) {
+ final SAMLObject msg = artifactResponse.getMessage();
+ if (msg == null) {
throw new MessageDecodingException("ArtifactResponse carried an empty message payload");
}
- return artifactResponse.getMessage();
+ return msg;
}
/**
@@ -559,11 +542,13 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
*
* @param artifact the artifact
* @param peerRoleDescriptor the peer RoleDescriptor
+ *
* @return the peer artifact resolution service endpoint
+ *
* @throws MessageDecodingException if there is a fatal error resolving the endpoint,
* or the endpoint could not be resolved
*/
- @Nonnull private ArtifactResolutionService resolveArtifactEndpoint(@Nonnull final SAML2Artifact artifact,
+ @Nonnull private String resolveArtifactEndpoint(@Nonnull final SAML2Artifact artifact,
@Nonnull final RoleDescriptor peerRoleDescriptor) throws MessageDecodingException {
final RoleDescriptorCriterion roleDescriptorCriterion = new RoleDescriptorCriterion(peerRoleDescriptor);
@@ -589,7 +574,10 @@ public class HTTPArtifactDecoder extends BaseHttpServletRequestXMLMessageDecoder
try {
final ArtifactResolutionService ars = artifactEndpointResolver.resolveSingle(criteriaSet);
if (ars != null) {
- return ars;
+ final String loc = ars.getLocation();
+ if (loc != null) {
+ return loc;
+ }
}
throw new MessageDecodingException("Unable to resolve ArtifactResolutionService endpoint");
} catch (final ResolverException e) {
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 10ef6a704..f8cfef0fb 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
@@ -34,7 +34,6 @@ import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
import org.opensaml.saml.common.xml.SAMLConstants;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
@@ -42,6 +41,7 @@ import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.DecodingException;
+import net.shibboleth.shared.primitive.LoggerFactory;
/** Message decoder implementing the SAML 2.0 HTTP POST binding. */
public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder implements SAMLMessageDecoder {
@@ -113,7 +113,8 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder imp
* @throws MessageDecodingException thrown if the message does not contain a base64 encoded SAML message,
* or the message can not be base64-decoded.
*/
- protected InputStream getBase64DecodedMessage(final HttpServletRequest request) throws MessageDecodingException {
+ @Nonnull protected InputStream getBase64DecodedMessage(final HttpServletRequest request)
+ throws MessageDecodingException {
log.debug("Getting Base64 encoded message from request");
String encodedMessage = request.getParameter("SAMLRequest");
if (Strings.isNullOrEmpty(encodedMessage)) {
@@ -125,6 +126,7 @@ public class HTTPPostDecoder extends BaseHttpServletRequestXMLMessageDecoder imp
+ "SAMLResponse paramter. Invalid request for SAML 2 HTTP POST binding.");
throw new MessageDecodingException("No SAML message present in request");
}
+ assert encodedMessage != null;
try {
log.trace("Base64 decoding SAML message:\n{}", encodedMessage);
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 fb4e9bbd6..35d3aba5a 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
@@ -36,13 +36,13 @@ import org.opensaml.saml.common.binding.decoding.SAMLMessageDecoder;
import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
import org.opensaml.saml.common.xml.SAMLConstants;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
import jakarta.servlet.http.HttpServletRequest;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.codec.Base64Support;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
/**
@@ -129,7 +129,7 @@ public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessage
*
* @throws MessageDecodingException thrown if the message can not be decoded
*/
- protected InputStream decodeMessage(final String message) throws MessageDecodingException {
+ @Nonnull protected InputStream decodeMessage(@Nonnull final String message) throws MessageDecodingException {
log.debug("Base64 decoding and inflating SAML message");
try {
@@ -146,7 +146,7 @@ public class HTTPRedirectDeflateDecoder extends BaseHttpServletRequestXMLMessage
*
* @param messageContext the current message context
*/
- protected void populateBindingContext(final MessageContext messageContext) {
+ protected void populateBindingContext(@Nonnull final MessageContext messageContext) {
final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
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 2523ee472..2cb9cb16e 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
@@ -29,9 +29,9 @@ import org.opensaml.saml.common.binding.impl.SAMLSOAPDecoderBodyHandler;
import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
import org.opensaml.saml.common.xml.SAMLConstants;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* SAML 2.0 SOAP 1.1 over HTTP binding decoder.
@@ -79,9 +79,12 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
protected void doDecode() throws MessageDecodingException {
super.doDecode();
- populateBindingContext(getMessageContext());
+ final MessageContext msgCtx = getMessageContext();
+ assert msgCtx != null;
- final Object samlMessage = getMessageContext().getMessage();
+ populateBindingContext(msgCtx);
+
+ final Object samlMessage = msgCtx.getMessage();
if (samlMessage instanceof SAMLObject) {
log.debug("Decoded SOAP message which included SAML message of type {}",
((SAMLObject) samlMessage).getElementQName());
@@ -95,7 +98,7 @@ public class HTTPSOAP11Decoder extends org.opensaml.soap.soap11.decoder.http.imp
*
* @param messageContext the current message context
*/
- protected void populateBindingContext(final MessageContext messageContext) {
+ protected void populateBindingContext(@Nonnull final MessageContext messageContext) {
final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
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 60147002c..d5e410c49 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
@@ -29,9 +29,9 @@ import org.opensaml.saml.common.binding.impl.SAMLSOAPDecoderBodyHandler;
import org.opensaml.saml.common.messaging.context.SAMLBindingContext;
import org.opensaml.saml.common.xml.SAMLConstants;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.primitive.LoggerFactory;
/**
* SAML 2.0 SOAP 1.1 over HTTP binding decoder for HttpClient HttpResponse.
@@ -80,9 +80,12 @@ public class HttpClientResponseSOAP11Decoder
protected void doDecode() throws MessageDecodingException {
super.doDecode();
- populateBindingContext(getMessageContext());
+ final MessageContext msgCtx = getMessageContext();
+ assert msgCtx != null;
- final Object samlMessage = getMessageContext().getMessage();
+ populateBindingContext(msgCtx);
+
+ final Object samlMessage = msgCtx.getMessage();
if (samlMessage instanceof SAMLObject) {
log.debug("Decoded SOAP message which included SAML message of type {}",
((SAMLObject) samlMessage).getElementQName());
@@ -96,7 +99,7 @@ public class HttpClientResponseSOAP11Decoder
*
* @param messageContext the current message context
*/
- protected void populateBindingContext(final MessageContext messageContext) {
+ protected void populateBindingContext(@Nonnull final MessageContext messageContext) {
final SAMLBindingContext bindingContext = messageContext.ensureSubcontext(SAMLBindingContext.class);
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 0295cf60a..e13e52e9a 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
@@ -19,6 +19,8 @@ package org.opensaml.saml.saml2.binding.encoding.impl;
import java.net.URI;
+import javax.annotation.Nonnull;
+
import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.encoder.MessageEncodingException;
import org.opensaml.messaging.encoder.servlet.BaseHttpServletResponseXMLMessageEncoder;
@@ -41,7 +43,8 @@ public abstract class BaseSAML2MessageEncoder extends BaseHttpServletResponseXML
*
* @throws MessageEncodingException throw if no relying party endpoint is available
*/
- protected URI getEndpointURL(final MessageContext messageContext) throws MessageEncodingException {
+ @Nonnull protected URI getEndpointURL(@Nonnull 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 c5f628c64..442ebf3cd 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
@@ -39,9 +39,9 @@ import org.opensaml.saml.common.xml.SAMLConstants;
import org.opensaml.saml.config.SAMLConfigurationSupport;
import org.opensaml.saml.saml2.binding.artifact.SAML2Artifact;
import org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilder;
+import org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactBuilderFactory;
import org.opensaml.saml.saml2.binding.artifact.SAML2ArtifactType0004;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import jakarta.servlet.http.HttpServletResponse;
import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -53,6 +53,7 @@ import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.net.URLBuilder;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
/**
@@ -84,12 +85,11 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
/** Constructor. */
public HTTPArtifactEncoder() {
defaultArtifactType = SAML2ArtifactType0004.TYPE_CODE;
- setVelocityTemplateId(DEFAULT_TEMPLATE_ID);
+ velocityTemplateId = DEFAULT_TEMPLATE_ID;
}
/** {@inheritDoc} */
- @Override
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_ARTIFACT_BINDING_URI;
}
@@ -193,24 +193,10 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
}
}
- /** {@inheritDoc} */
- @Override
- protected void doDestroy() {
- velocityEngine = null;
- velocityTemplateId = null;
- artifactMap = null;
-
- super.doDestroy();
- }
-
/** {@inheritDoc} */
@Override
protected void doEncode() throws MessageEncodingException {
- final HttpServletResponse response = getHttpServletResponse();
- if (response == null) {
- throw new MessageEncodingException("HttpServletResponse was null");
- }
- response.setCharacterEncoding("UTF-8");
+ getHttpServletResponse().setCharacterEncoding("UTF-8");
if (postEncoding) {
postEncode();
@@ -229,6 +215,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
log.debug("Performing HTTP POST SAML 2 artifact encoding");
final MessageContext messageContext = getMessageContext();
+ assert messageContext != null;
log.debug("Creating velocity context");
final VelocityContext context = new VelocityContext();
@@ -256,6 +243,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
log.debug("Invoking velocity template");
final HttpServletResponse response = getHttpServletResponse();
try (final OutputStreamWriter outWriter = new OutputStreamWriter(response.getOutputStream())) {
+ assert velocityEngine != null;
velocityEngine.mergeTemplate(velocityTemplateId, "UTF-8", context, outWriter);
outWriter.flush();
}
@@ -274,8 +262,10 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
log.debug("Performing HTTP GET SAML 2 artifact encoding");
final MessageContext messageContext = getMessageContext();
+ assert messageContext != null;
final String endpointUrl = getEndpointURL(messageContext).toString();
+ assert endpointUrl != null;
final URLBuilder urlBuilder;
try {
@@ -288,10 +278,6 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
queryParams.clear();
final SAML2Artifact artifact = buildArtifact(messageContext);
- if (artifact == null) {
- log.error("Unable to build artifact for message to relying party");
- throw new MessageEncodingException("Unable to build artifact for message to relying party");
- }
try {
queryParams.add(new Pair<>("SAMLart",
Base64Support.encode(artifact.getArtifactBytes(), Base64Support.UNCHUNKED)));
@@ -313,6 +299,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
}
}
+// Checkstyle: CyclomaticComplexity OFF
/**
* Builds the SAML 2 artifact for the outgoing message.
*
@@ -340,13 +327,16 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
final SAML2ArtifactBuilder<?> artifactBuilder;
final byte[] artifactType = getSAMLArtifactType(messageContext);
if (artifactType != null) {
- artifactBuilder = SAMLConfigurationSupport.getSAML2ArtifactBuilderFactory()
- .getArtifactBuilder(artifactType);
+ final SAML2ArtifactBuilderFactory factory = SAMLConfigurationSupport.getSAML2ArtifactBuilderFactory();
+ artifactBuilder = factory != null ? factory.getArtifactBuilder(artifactType) : null;
} else {
- artifactBuilder = SAMLConfigurationSupport.getSAML2ArtifactBuilderFactory()
- .getArtifactBuilder(defaultArtifactType);
+ final SAML2ArtifactBuilderFactory factory = SAMLConfigurationSupport.getSAML2ArtifactBuilderFactory();
+ artifactBuilder = factory != null ? factory.getArtifactBuilder(defaultArtifactType) : null;
storeSAMLArtifactType(messageContext, defaultArtifactType);
}
+ if (artifactBuilder == null) {
+ throw new MessageEncodingException("Unable to obtain SAML2ArtifactBuilder");
+ }
final SAML2Artifact artifact = artifactBuilder.buildArtifact(messageContext);
if (artifact == null) {
@@ -366,6 +356,7 @@ public class HTTPArtifactEncoder extends BaseSAML2MessageEncoder {
return artifact;
}
+// Checkstyle: CyclomaticComplexity ON
/**
* Get the outbound message issuer.
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 4e42389c0..1f9bf6bf8 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
@@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException;
import java.io.Writer;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
@@ -33,14 +34,17 @@ import org.opensaml.saml.common.xml.SAMLConstants;
import org.opensaml.saml.saml2.core.RequestAbstractType;
import org.opensaml.saml.saml2.core.StatusResponseType;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.EncodingException;
import net.shibboleth.shared.codec.HTMLEncoder;
import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.LoggerFactory;
+import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.servlet.HttpServletSupport;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -55,21 +59,21 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
@Nonnull @NotEmpty public static final String DEFAULT_TEMPLATE_ID = "/templates/saml2-post-binding.vm";
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(HTTPPostEncoder.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostEncoder.class);
/** Velocity engine used to evaluate the template when performing POST encoding. */
- private VelocityEngine velocityEngine;
+ @NonnullAfterInit private VelocityEngine velocityEngine;
/** ID of the Velocity template used when performing POST encoding. */
- private String velocityTemplateId;
+ @Nonnull private String velocityTemplateId;
/** Constructor. */
public HTTPPostEncoder() {
- setVelocityTemplateId(DEFAULT_TEMPLATE_ID);
+ velocityTemplateId = DEFAULT_TEMPLATE_ID;
}
/** {@inheritDoc} */
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_POST_BINDING_URI;
}
@@ -78,7 +82,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
*
* @return return the VelocityEngine instance
*/
- public VelocityEngine getVelocityEngine() {
+ @NonnullAfterInit public VelocityEngine getVelocityEngine() {
return velocityEngine;
}
@@ -87,7 +91,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
*
* @param newVelocityEngine the new VelocityEngine instane
*/
- public void setVelocityEngine(final VelocityEngine newVelocityEngine) {
+ public void setVelocityEngine(@Nullable final VelocityEngine newVelocityEngine) {
checkSetterPreconditions();
velocityEngine = newVelocityEngine;
}
@@ -99,7 +103,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
*
* @return return the Velocity template id
*/
- public String getVelocityTemplateId() {
+ @Nonnull @NotEmpty public String getVelocityTemplateId() {
return velocityTemplateId;
}
@@ -110,27 +114,19 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
*
* @param newVelocityTemplateId the new Velocity template id
*/
- public void setVelocityTemplateId(final String newVelocityTemplateId) {
+ public void setVelocityTemplateId(@Nonnull @NotEmpty final String newVelocityTemplateId) {
checkSetterPreconditions();
- velocityTemplateId = newVelocityTemplateId;
- }
-
- /** {@inheritDoc} */
- protected void doDestroy() {
- velocityEngine = null;
- velocityTemplateId = null;
- super.doDestroy();
+ velocityTemplateId = Constraint.isNotNull(StringSupport.trimOrNull(newVelocityTemplateId),
+ "Velocity template ID cannot be null or empty");
}
/** {@inheritDoc} */
protected void doInitialize() throws ComponentInitializationException {
super.doInitialize();
+
if (velocityEngine == null) {
throw new ComponentInitializationException("VelocityEngine must be supplied");
}
- if (velocityTemplateId == null) {
- throw new ComponentInitializationException("Velocity template id must be supplied");
- }
}
/** {@inheritDoc} */
@@ -143,6 +139,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
}
final String endpointURL = getEndpointURL(messageContext).toString();
+ assert endpointURL != null;
postEncode(messageContext, endpointURL);
}
@@ -155,7 +152,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
*
* @throws MessageEncodingException thrown if there is a problem encoding the message
*/
- protected void postEncode(final MessageContext messageContext, final String endpointURL)
+ protected void postEncode(@Nonnull final MessageContext messageContext, @Nonnull final String endpointURL)
throws MessageEncodingException {
log.debug("Invoking Velocity template to create POST body");
try {
@@ -164,6 +161,7 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
populateVelocityContext(context, messageContext, endpointURL);
final HttpServletResponse response = getHttpServletResponse();
+ assert response != null;
HttpServletSupport.addNoCacheHeaders(response);
HttpServletSupport.setUTF8Encoding(response);
@@ -187,8 +185,9 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
* @param endpointURL endpoint URL to which to encode message
* @throws MessageEncodingException thrown if there is a problem encoding the message
*/
- protected void populateVelocityContext(final VelocityContext velocityContext,
- final MessageContext messageContext, final String endpointURL) throws MessageEncodingException {
+ protected void populateVelocityContext(@Nonnull final VelocityContext velocityContext,
+ @Nonnull final MessageContext messageContext, @Nonnull final String endpointURL)
+ throws MessageEncodingException {
final String encodedEndpointURL = HTMLEncoder.encodeForHTMLAttribute(endpointURL);
log.debug("Encoding action url of '{}' with encoded value '{}'", endpointURL, encodedEndpointURL);
@@ -196,6 +195,8 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
velocityContext.put("binding", getBindingURI());
final SAMLObject outboundMessage = (SAMLObject) messageContext.getMessage();
+ // Checked above.
+ assert outboundMessage != null;
log.debug("Marshalling and Base64 encoding SAML message");
final Element domMessage = marshallMessage(outboundMessage);
@@ -226,4 +227,5 @@ public class HTTPPostEncoder extends BaseSAML2MessageEncoder {
velocityContext.put("RelayState", encodedRelayState);
}
}
-}
+
+}
\ No newline at end of file
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 befe7a42c..d0c8fe156 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
@@ -20,6 +20,7 @@ package org.opensaml.saml.saml2.binding.encoding.impl;
import java.io.UnsupportedEncodingException;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.apache.velocity.VelocityContext;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
@@ -32,13 +33,11 @@ import org.opensaml.saml.common.messaging.SAMLMessageSecuritySupport;
import org.opensaml.saml.common.xml.SAMLConstants;
import org.opensaml.security.SecurityException;
import org.opensaml.security.credential.Credential;
-import org.opensaml.security.credential.CredentialSupport;
import org.opensaml.xmlsec.SignatureSigningParameters;
import org.opensaml.xmlsec.crypto.XMLSigningUtil;
import org.opensaml.xmlsec.keyinfo.KeyInfoGenerator;
import org.opensaml.xmlsec.signature.KeyInfo;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.base.Strings;
@@ -46,6 +45,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.DecodingException;
import net.shibboleth.shared.codec.EncodingException;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.xml.SerializeSupport;
/**
@@ -57,7 +57,7 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
@Nonnull @NotEmpty public static final String DEFAULT_TEMPLATE_ID = "/templates/saml2-post-simplesign-binding.vm";
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(HTTPPostSimpleSignEncoder.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPPostSimpleSignEncoder.class);
/** Constructor. */
public HTTPPostSimpleSignEncoder() {
@@ -65,20 +65,23 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
}
/** {@inheritDoc} */
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_POST_SIMPLE_SIGN_BINDING_URI;
}
/** {@inheritDoc} */
- protected void populateVelocityContext(final VelocityContext velocityContext, final MessageContext messageContext,
- final String endpointURL) throws MessageEncodingException {
+ protected void populateVelocityContext(@Nonnull final VelocityContext velocityContext,
+ @Nonnull final MessageContext messageContext, @Nonnull @NotEmpty final String endpointURL)
+ throws MessageEncodingException {
super.populateVelocityContext(velocityContext, messageContext, endpointURL);
final SignatureSigningParameters signingParameters =
SAMLMessageSecuritySupport.getContextSigningParameters(messageContext);
- if (signingParameters == null || signingParameters.getSigningCredential() == null) {
+ final Credential signingCredential = signingParameters != null
+ ? signingParameters.getSigningCredential() : null;
+ if (signingParameters == null || signingCredential == null) {
log.debug("No signing credential was supplied, skipping HTTP-Post simple signing");
return;
}
@@ -87,13 +90,12 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
velocityContext.put("SigAlg", sigAlgURI);
final String formControlData = buildFormDataToSign(velocityContext, messageContext, sigAlgURI);
- velocityContext.put("Signature", generateSignature(signingParameters.getSigningCredential(),
- sigAlgURI, formControlData));
+ velocityContext.put("Signature", generateSignature(signingCredential, sigAlgURI, formControlData));
final KeyInfoGenerator kiGenerator = signingParameters.getKeyInfoGenerator();
if (kiGenerator != null) {
- final String kiBase64 = buildKeyInfo(signingParameters.getSigningCredential(), kiGenerator);
+ final String kiBase64 = buildKeyInfo(signingCredential, kiGenerator);
if (!Strings.isNullOrEmpty(kiBase64)) {
velocityContext.put("KeyInfo", kiBase64);
}
@@ -108,8 +110,8 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
* @throws MessageEncodingException thrown if there is an error generating or marshalling the KeyInfo
* @return the marshalled, serialized and base64-encoded KeyInfo, or null if none was generated
*/
- protected String buildKeyInfo(final Credential signingCredential, final KeyInfoGenerator kiGenerator)
- throws MessageEncodingException {
+ @Nullable protected String buildKeyInfo(@Nonnull final Credential signingCredential,
+ @Nonnull final KeyInfoGenerator kiGenerator) throws MessageEncodingException {
try {
final KeyInfo keyInfo = kiGenerator.generate(signingCredential);
@@ -149,7 +151,8 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
*
* @return the form control data string for signature computation
*/
- protected String buildFormDataToSign(final VelocityContext velocityContext, final MessageContext messageContext,
+ @Nonnull protected String buildFormDataToSign(@Nonnull final VelocityContext velocityContext,
+ @Nonnull final MessageContext messageContext,
final String sigAlgURI) throws MessageEncodingException {
final StringBuilder builder = new StringBuilder();
@@ -164,7 +167,9 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
} else {
msgB64 = (String) velocityContext.get("SAMLResponse");
}
-
+ // One or the other is populated...
+ assert msgB64 != null;
+
String msg = null;
try {
msg = new String(Base64Support.decode(msgB64), "UTF-8");
@@ -203,11 +208,12 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
* @throws MessageEncodingException thrown if the algorithm URI is not supplied explicitly and
* could not be derived from the supplied credential
*/
- protected String getSignatureAlgorithmURI(final SignatureSigningParameters signingParameters)
+ @Nonnull protected String getSignatureAlgorithmURI(final SignatureSigningParameters signingParameters)
throws MessageEncodingException {
- if (signingParameters.getSignatureAlgorithm() != null) {
- return signingParameters.getSignatureAlgorithm();
+ final String alg = signingParameters.getSignatureAlgorithm();
+ if (alg != null) {
+ return alg;
}
throw new MessageEncodingException("The signing algorithm URI could not be determined");
@@ -224,13 +230,11 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
*
* @throws MessageEncodingException there is an error computing the signature
*/
- protected String generateSignature(final Credential signingCredential, final String algorithmURI,
- final String formData)
+ @Nonnull protected String generateSignature(@Nonnull final Credential signingCredential,
+ @Nonnull final String algorithmURI, final String formData)
throws MessageEncodingException {
- log.debug(String.format(
- "Generating signature with key type '%s', algorithm URI '%s' over form control string '%s'",
- CredentialSupport.extractSigningKey(signingCredential).getAlgorithm(), algorithmURI, formData));
+ log.debug("Generating signature with algorithm URI '{}' over form control string '{}'", algorithmURI, formData);
String b64Signature = null;
try {
@@ -252,4 +256,4 @@ public class HTTPPostSimpleSignEncoder extends HTTPPostEncoder {
return b64Signature;
}
-}
+}
\ No newline at end of file
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 fb3673b41..8163d71c3 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
@@ -46,17 +46,18 @@ import org.opensaml.security.credential.CredentialSupport;
import org.opensaml.xmlsec.SignatureSigningParameters;
import org.opensaml.xmlsec.crypto.XMLSigningUtil;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import jakarta.servlet.http.HttpServletResponse;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.EncodingException;
import net.shibboleth.shared.collection.CollectionSupport;
import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.net.URLBuilder;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.primitive.StringSupport;
import net.shibboleth.shared.servlet.HttpServletSupport;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -73,15 +74,10 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
CollectionSupport.setOf("SAMLEncoding", "SAMLRequest", "SAMLResponse", "RelayState", "SigAlg", "Signature");
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(HTTPRedirectDeflateEncoder.class);
-
- /** Constructor. */
- public HTTPRedirectDeflateEncoder() {
-
- }
+ @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPRedirectDeflateEncoder.class);
/** {@inheritDoc} */
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_REDIRECT_BINDING_URI;
}
@@ -94,6 +90,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
}
final String endpointURL = getEndpointURL(messageContext).toString();
+ assert endpointURL != null;
removeSignature((SAMLObject) outboundMessage);
@@ -102,6 +99,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
final String redirectURL = buildRedirectURL(messageContext, endpointURL, encodedMessage);
final HttpServletResponse response = getHttpServletResponse();
+ assert response != null;
HttpServletSupport.addNoCacheHeaders(response);
HttpServletSupport.setUTF8Encoding(response);
@@ -117,7 +115,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
*
* @param message current message context
*/
- protected void removeSignature(final SAMLObject message) {
+ protected void removeSignature(@Nonnull final SAMLObject message) {
if (message instanceof SignableSAMLObject) {
final SignableSAMLObject signableMessage = (SignableSAMLObject) message;
if (signableMessage.isSigned()) {
@@ -136,7 +134,8 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
*
* @throws MessageEncodingException thrown if there is a problem compressing the message
*/
- protected String deflateAndBase64Encode(final SAMLObject message) throws MessageEncodingException {
+ @Nonnull protected String deflateAndBase64Encode(@Nonnull final SAMLObject message)
+ throws MessageEncodingException {
log.debug("Deflating and Base64 encoding SAML message");
try {
final String messageStr = SerializeSupport.nodeToString(marshallMessage(message));
@@ -166,8 +165,9 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
*
* @throws MessageEncodingException thrown if the SAML message is neither a RequestAbstractType or Response
*/
- protected String buildRedirectURL(final MessageContext messageContext, final String endpoint, final String message)
- throws MessageEncodingException {
+ @Nonnull protected String buildRedirectURL(@Nonnull final MessageContext messageContext,
+ @Nonnull @NotEmpty final String endpoint, @Nonnull @NotEmpty final String message)
+ throws MessageEncodingException {
log.debug("Building URL to redirect client to");
URLBuilder urlBuilder = null;
@@ -205,14 +205,15 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
final SignatureSigningParameters signingParameters =
SAMLMessageSecuritySupport.getContextSigningParameters(messageContext);
- if (signingParameters != null && signingParameters.getSigningCredential() != null) {
+ final Credential signingCred = signingParameters != null ? signingParameters.getSigningCredential() : null;
+ if (signingParameters != null && signingCred != null) {
final String sigAlgURI = getSignatureAlgorithmURI(signingParameters);
final Pair<String, String> sigAlg = new Pair<>("SigAlg", sigAlgURI);
queryParams.add(sigAlg);
final String sigMaterial = urlBuilder.buildQueryString();
+ assert sigMaterial != null;
- queryParams.add(new Pair<>("Signature", generateSignature(
- signingParameters.getSigningCredential(), sigAlgURI, sigMaterial)));
+ queryParams.add(new Pair<>("Signature", generateSignature(signingCred, sigAlgURI, sigMaterial)));
// Add original params to the beginning of the list preserving their original order.
if (!originalParams.isEmpty()) {
@@ -234,7 +235,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
*
* @param queryParams the list of query params on which to operate
*/
- protected void removeDisallowedQueryParams(final @Nonnull List<Pair<String, String>> queryParams) {
+ protected void removeDisallowedQueryParams(@Nonnull final List<Pair<String, String>> queryParams) {
final Iterator<Pair<String,String>> iter = queryParams.iterator();
while (iter.hasNext()) {
final String paramName = StringSupport.trimOrNull(iter.next().getFirst());
@@ -255,11 +256,12 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
* @throws MessageEncodingException thrown if the algorithm URI is not supplied explicitly and
* could not be derived from the supplied credential
*/
- protected String getSignatureAlgorithmURI(final SignatureSigningParameters signingParameters)
+ @Nonnull protected String getSignatureAlgorithmURI(@Nonnull final SignatureSigningParameters signingParameters)
throws MessageEncodingException {
- if (signingParameters.getSignatureAlgorithm() != null) {
- return signingParameters.getSignatureAlgorithm();
+ final String alg = signingParameters.getSignatureAlgorithm();
+ if (alg != null) {
+ return alg;
}
throw new MessageEncodingException("The signing algorithm URI could not be determined");
@@ -276,30 +278,27 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
*
* @throws MessageEncodingException there is an error computing the signature
*/
- protected String generateSignature(final Credential signingCredential, final String algorithmURI,
- final String queryString)
- throws MessageEncodingException {
+ @Nonnull protected String generateSignature(@Nonnull final Credential signingCredential,
+ @Nonnull final String algorithmURI, @Nonnull final String queryString) throws MessageEncodingException {
- log.debug(String.format("Generating signature with key type '%s', algorithm URI '%s' over query string '%s'",
- CredentialSupport.extractSigningKey(signingCredential).getAlgorithm(), algorithmURI, queryString));
+ log.debug("Generating signature with algorithm URI '{}' over query string '{}'", algorithmURI, queryString);
- String b64Signature = null;
try {
final byte[] rawSignature =
XMLSigningUtil.signWithURI(signingCredential, algorithmURI, queryString.getBytes("UTF-8"));
- b64Signature = Base64Support.encode(rawSignature, Base64Support.UNCHUNKED);
+ final String b64Signature = Base64Support.encode(rawSignature, Base64Support.UNCHUNKED);
log.debug("Generated digital signature value (base64-encoded) {}", b64Signature);
+ return b64Signature;
} catch (final SecurityException e) {
log.error("Error during URL signing process: {}", e.getMessage());
throw new MessageEncodingException("Unable to sign URL query string", e);
} catch (final UnsupportedEncodingException e) {
// UTF-8 encoding is required to be supported by all JVMs
+ throw new MessageEncodingException("Unable to access UTF-8 character encoding?", e);
} catch (final EncodingException e) {
log.error("Error during URL signing process: {}", e.getMessage());
throw new MessageEncodingException("Unable to base64 encode signature of URL query string", e);
}
-
- return b64Signature;
}
/** A subclass of {@link DeflaterOutputStream} which defaults in a no-wrap {@link Deflater} instance and
@@ -314,7 +313,7 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
* @param os the output stream
* @param level the compression level (0-9)
*/
- public NoWrapAutoEndDeflaterOutputStream(final OutputStream os, final int level) {
+ public NoWrapAutoEndDeflaterOutputStream(@Nonnull final OutputStream os, final int level) {
super(os, new Deflater(level, true));
}
@@ -327,4 +326,5 @@ public class HTTPRedirectDeflateEncoder extends BaseSAML2MessageEncoder {
}
}
-}
+
+}
\ No newline at end of file
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 3aaa443fc..02e7e99fe 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,9 +17,14 @@
package org.opensaml.saml.saml2.binding.encoding.impl;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
import org.opensaml.saml.common.xml.SAMLConstants;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
/**
* SAML 2.0 SOAP 1.1 over HTTP binding encoder.
*/
@@ -32,14 +37,13 @@ public class HTTPSOAP11Encoder extends org.opensaml.soap.soap11.encoder.http.imp
}
/** {@inheritDoc} */
- @Override
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_SOAP11_BINDING_URI;
}
/** {@inheritDoc} */
@Override
- protected String getSOAPAction() {
+ @Nullable protected String getSOAPAction() {
return "http://www.oasis-open.org/committees/security";
}
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 60d7e0617..fc3229dd0 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,9 +17,14 @@
package org.opensaml.saml.saml2.binding.encoding.impl;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.opensaml.saml.common.binding.encoding.SAMLMessageEncoder;
import org.opensaml.saml.common.xml.SAMLConstants;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+
/**
* SAML 2.0 SOAP 1.1 over HTTP binding encoder for HttpClient HttpRequest.
*/
@@ -27,20 +32,14 @@ public class HttpClientRequestSOAP11Encoder
extends org.opensaml.soap.client.soap11.encoder.http.impl.HttpClientRequestSOAP11Encoder
implements SAMLMessageEncoder {
- /** Constructor. */
- public HttpClientRequestSOAP11Encoder() {
-
- }
-
/** {@inheritDoc} */
- @Override
- public String getBindingURI() {
+ @Nonnull @NotEmpty public String getBindingURI() {
return SAMLConstants.SAML2_SOAP11_BINDING_URI;
}
/** {@inheritDoc} */
@Override
- protected String getSOAPAction() {
+ @Nullable protected String getSOAPAction() {
return "http://www.oasis-open.org/committees/security";
}
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 5cd6458ca..88eb447b0 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
@@ -20,6 +20,8 @@ package org.opensaml.saml.saml1.binding.decoding.impl;
import java.net.MalformedURLException;
import java.net.URL;
+import javax.annotation.Nonnull;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.messaging.context.MessageContext;
import org.opensaml.messaging.decoder.MessageDecodingException;
@@ -30,6 +32,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.w3c.dom.Element;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.DecodingException;
@@ -69,8 +72,9 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
*/
@Test
public void testDecode() throws Exception {
- Response samlResponse = (Response) unmarshallElement("/org/opensaml/saml/saml1/binding/Response.xml");
-
+ final Response samlResponse = (Response) unmarshallElement("/org/opensaml/saml/saml1/binding/Response.xml");
+ assert samlResponse != null;
+
String deliveredEndpointURL = samlResponse.getRecipient();
httpRequest.setParameter("SAMLResponse", encodeMessage(samlResponse));
@@ -78,7 +82,8 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
populateRequestURL(httpRequest, deliveredEndpointURL);
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof Response);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -110,6 +115,7 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
} catch (MalformedURLException e) {
Assert.fail("Malformed URL: " + e.getMessage());
}
+ assert url != null;
request.setScheme(url.getProtocol());
request.setServerName(url.getHost());
if (url.getPort() != -1) {
@@ -125,10 +131,11 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
request.setQueryString(url.getQuery());
}
- protected String encodeMessage(SAMLObject message) throws Exception {
- marshallerFactory.getMarshaller(message).marshall(message);
- String messageStr = SerializeSupport.nodeToString(message.getDOM());
+ protected String encodeMessage(@Nonnull SAMLObject message) throws Exception {
+ final Element dom = marshallerFactory.ensureMarshaller(message).marshall(message);
+ String messageStr = SerializeSupport.nodeToString(dom);
return Base64Support.encode(messageStr.getBytes("UTF-8"), Base64Support.UNCHUNKED);
}
-}
+
+}
\ No newline at end of file
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 321915944..e651df7d6 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
@@ -17,6 +17,8 @@
package org.opensaml.saml.saml1.binding.decoding.impl;
+import javax.annotation.Nonnull;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.io.MarshallingException;
@@ -27,6 +29,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.w3c.dom.Element;
import net.shibboleth.shared.testing.ConstantSupplier;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -66,14 +69,16 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
httpRequest.setContent(requestContent.getBytes());
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
- Assert.assertNotNull(messageContext.getSubcontext(SOAP11Context.class).getEnvelope());
+ Assert.assertNotNull(messageContext.ensureSubcontext(SOAP11Context.class).getEnvelope());
Assert.assertTrue(messageContext.getMessage() instanceof Request);
}
- protected String encodeMessage(XMLObject message) throws MarshallingException {
- marshallerFactory.getMarshaller(message).marshall(message);
- return SerializeSupport.nodeToString(message.getDOM());
+ protected String encodeMessage(@Nonnull final XMLObject message) throws MarshallingException {
+ final Element dom = marshallerFactory.ensureMarshaller(message).marshall(message);
+ return SerializeSupport.nodeToString(dom);
}
-}
+
+}
\ No newline at end of file
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 78bd5b795..71e044180 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
@@ -52,6 +52,7 @@ import net.shibboleth.shared.testing.ConstantSupplier;
/**
* Test class for SAML 1 HTTP Post encoding.
*/
+ at SuppressWarnings("javadoc")
public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
/** Velocity template engine. */
@@ -67,33 +68,32 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
}
@Test
- @SuppressWarnings("unchecked")
public void testEncoding() throws Exception {
- SAMLObjectBuilder<Response> requestBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
- Response samlMessage = requestBuilder.buildObject();
+ final SAMLObjectBuilder<Response> requestBuilder =
+ (SAMLObjectBuilder<Response>) builderFactory.<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final Response samlMessage = requestBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setVersion(SAMLVersion.VERSION_11);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
- Endpoint samlEndpoint = endpointBuilder.buildObject();
+ final SAMLObjectBuilder<Endpoint> endpointBuilder =
+ (SAMLObjectBuilder<Endpoint>) builderFactory.<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
- MessageContext messageContext = new MessageContext();
+ final MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
- SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
+ final SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
handler.invoke(messageContext);
- MockHttpServletResponse response = new MockHttpServletResponse();
+ final MockHttpServletResponse response = new MockHttpServletResponse();
- HTTPPostEncoder encoder = new HTTPPostEncoder();
+ final HTTPPostEncoder encoder = new HTTPPostEncoder();
encoder.setMessageContext(messageContext);
encoder.setHttpServletResponseSupplier(new ConstantSupplier<>(response));
@@ -122,40 +122,42 @@ public class HTTPPostEncoderTest extends XMLObjectBaseTestCase {
}
Assert.assertTrue(sawDocType);
- Element head = webDoc.selectFirst("html > head");
- Assert.assertNotNull(head);
- Element metaCharSet = head.selectFirst("meta[charset]");
- Assert.assertNotNull(metaCharSet);
+ final Element head = webDoc.selectFirst("html > head");
+ assert head != null;
+ final Element metaCharSet = head.selectFirst("meta[charset]");
+ assert metaCharSet != null;
Assert.assertEquals(metaCharSet.attr("charset").toLowerCase(), "utf-8");
- Element body = webDoc.selectFirst("html > body");
- Assert.assertNotNull(body);
+ final Element body = webDoc.selectFirst("html > body");
+ assert body != null;
Assert.assertEquals(body.attr("onload"), "document.forms[0].submit()");
- Element form = body.selectFirst("form");
- Assert.assertNotNull(form);
+ final Element form = body.selectFirst("form");
+ assert form != null;
Assert.assertEquals(form.attr("method").toLowerCase(), "post");
Assert.assertEquals(form.attr("action"), "http://example.org/response");
- Element relayState = form.selectFirst("input[name=TARGET]");
- Assert.assertNotNull(relayState);
+ final Element relayState = form.selectFirst("input[name=TARGET]");
+ assert relayState != null;
Assert.assertEquals(relayState.val(), "relay");
- Element noscriptMsg = body.selectFirst("noscript > p");
- Assert.assertNotNull(noscriptMsg);
+ final Element noscriptMsg = body.selectFirst("noscript > p");
+ assert noscriptMsg != null;
Assert.assertTrue(noscriptMsg.text().contains("Since your browser does not support JavaScript"));
- Element samlResponse = form.selectFirst("input[name=SAMLResponse]");
- Assert.assertNotNull(samlResponse);
+ final Element samlResponse = form.selectFirst("input[name=SAMLResponse]");
+ assert samlResponse != null;
Assert.assertNotNull(samlResponse.val());
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Support.decode(samlResponse.val()))) {
- XMLObject xmlObject = XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
+ final XMLObject xmlObject = XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
Assert.assertTrue(xmlObject instanceof Response);
- assertXMLEquals(xmlObject.getDOM().getOwnerDocument(), samlMessage);
+ final org.w3c.dom.Element xmlDOM = xmlObject.getDOM();
+ assert xmlDOM != null;
+ assertXMLEquals(xmlDOM.getOwnerDocument(), samlMessage);
}
- Element submit = body.selectFirst("noscript > div > input[type=submit]");
- Assert.assertNotNull(submit);
+ final Element submit = body.selectFirst("noscript > div > input[type=submit]");
+ assert submit != null;
Assert.assertEquals(submit.val(), "Continue");
}
}
\ No newline at end of file
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 c034be666..e270a1878 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
@@ -32,6 +32,7 @@ import org.opensaml.saml.common.messaging.context.SAMLPeerEntityContext;
import org.opensaml.saml.saml1.core.Request;
import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
import org.opensaml.saml.saml2.metadata.Endpoint;
+import org.opensaml.soap.soap11.Body;
import org.opensaml.soap.soap11.Envelope;
import org.springframework.mock.web.MockHttpServletResponse;
import org.testng.Assert;
@@ -50,30 +51,28 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void testEncoding() throws Exception {
- SAMLObjectBuilder<Request> requestBuilder = (SAMLObjectBuilder<Request>) builderFactory
- .getBuilder(Request.DEFAULT_ELEMENT_NAME);
- Request request = requestBuilder.buildObject();
+ final SAMLObjectBuilder<Request> requestBuilder =
+ (SAMLObjectBuilder<Request>) builderFactory.<Request>ensureBuilder(Request.DEFAULT_ELEMENT_NAME);
+ final Request request = requestBuilder.buildObject();
request.setID("foo");
request.setIssueInstant(Instant.ofEpochMilli(0));
request.setVersion(SAMLVersion.VERSION_11);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
- Endpoint samlEndpoint = endpointBuilder.buildObject();
+ final SAMLObjectBuilder<Endpoint> endpointBuilder =
+ (SAMLObjectBuilder<Endpoint>) builderFactory.<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
- MessageContext messageContext = new MessageContext();
+ final MessageContext messageContext = new MessageContext();
messageContext.setMessage(request);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class).ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
- MockHttpServletResponse response = new MockHttpServletResponse();
+ final MockHttpServletResponse response = new MockHttpServletResponse();
- HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
+ final HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
encoder.setMessageContext(messageContext);
encoder.setHttpServletResponseSupplier(new ConstantSupplier<>(response));
@@ -86,19 +85,21 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals(response.getHeader("Cache-control"), "no-cache, no-store", "Unexpected cache controls");
Assert.assertEquals(response.getHeader("SOAPAction"), "http://www.oasis-open.org/committees/security");
- try (ByteArrayInputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray())) {
- XMLObject xmlObject = XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
+ try (final ByteArrayInputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray())) {
+ final XMLObject xmlObject = XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
Assert.assertNotNull(xmlObject);
Assert.assertTrue(xmlObject instanceof Envelope);
- Envelope envelope = (Envelope) xmlObject;
+ final Envelope envelope = (Envelope) xmlObject;
Assert.assertNull(envelope.getHeader());
- Assert.assertNotNull(envelope.getBody());
- Assert.assertEquals(envelope.getBody().getUnknownXMLObjects().size(), 1);
- Request outboundRequest = (Request) envelope.getBody().getUnknownXMLObjects().get(0);
+ final Body body = envelope.getBody();
+ assert body != null;
+ Assert.assertEquals(body.getUnknownXMLObjects().size(), 1);
+ Request outboundRequest = (Request) body.getUnknownXMLObjects().get(0);
outboundRequest.releaseDOM();
outboundRequest.releaseChildrenDOM(true);
outboundRequest.setParent(null);
assertXMLEquals(XMLObjectSupport.marshall(outboundRequest).getOwnerDocument(), request);
}
}
+
}
\ No newline at end of file
diff --git a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
index a05e96171..ee2473b4f 100644
--- a/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
+++ b/opensaml-saml-impl/src/test/java/org/opensaml/saml/saml2/binding/decoding/impl/HTTPPostDecoderTest.java
@@ -69,7 +69,8 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
+ "xuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIi8+");
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof RequestAbstractType);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -107,7 +108,8 @@ public class HTTPPostDecoderTest extends XMLObjectBaseTestCase {
+ "2FtbHA6UmVzcG9uc2U+");
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof Response);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
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 bfda59c08..f1225f80f 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
@@ -24,6 +24,8 @@ import java.net.URL;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
+import javax.annotation.Nonnull;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.io.MarshallingException;
import org.opensaml.messaging.context.MessageContext;
@@ -38,15 +40,14 @@ import org.springframework.mock.web.MockHttpServletRequest;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.w3c.dom.Element;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.codec.EncodingException;
import net.shibboleth.shared.testing.ConstantSupplier;
import net.shibboleth.shared.xml.SerializeSupport;
-/**
- *
- */
+ at SuppressWarnings("javadoc")
public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
private String expectedRelayValue = "relay";
@@ -81,7 +82,8 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
populateRequestURL(httpRequest, "http://example.org");
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof Response);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -90,14 +92,16 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
@Test
public void testRequestDecoding() throws MessageDecodingException, MessageEncodingException,
MarshallingException, EncodingException {
- AuthnRequest samlRequest =
+ final AuthnRequest samlRequest =
(AuthnRequest) unmarshallElement("/org/opensaml/saml/saml2/binding/AuthnRequest.xml");
+ assert samlRequest != null;
samlRequest.setDestination(null);
httpRequest.setParameter("SAMLRequest", encodeMessage(samlRequest));
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof RequestAbstractType);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -117,15 +121,17 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
@Test
public void testExplicitDefaultSAMLEncoding()
throws MessageDecodingException, MessageEncodingException, MarshallingException, EncodingException {
- AuthnRequest samlRequest =
+ final AuthnRequest samlRequest =
(AuthnRequest) unmarshallElement("/org/opensaml/saml/saml2/binding/AuthnRequest.xml");
+ assert samlRequest != null;
samlRequest.setDestination(null);
httpRequest.setParameter("SAMLRequest", encodeMessage(samlRequest));
httpRequest.setParameter("SAMLEncoding", "urn:oasis:names:tc:SAML:2.0:bindings:URL-Encoding:DEFLATE");
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
Assert.assertTrue(messageContext.getMessage() instanceof RequestAbstractType);
Assert.assertEquals(SAMLBindingSupport.getRelayState(messageContext), expectedRelayValue);
@@ -134,8 +140,9 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
@Test(expectedExceptions=MessageDecodingException.class)
public void testUnsupportedSAMLEncoding()
throws MessageDecodingException, MessageEncodingException, MarshallingException, EncodingException {
- AuthnRequest samlRequest =
+ final AuthnRequest samlRequest =
(AuthnRequest) unmarshallElement("/org/opensaml/saml/saml2/binding/AuthnRequest.xml");
+ assert samlRequest != null;
samlRequest.setDestination(null);
httpRequest.setParameter("SAMLRequest", encodeMessage(samlRequest));
@@ -151,6 +158,7 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
} catch (MalformedURLException e) {
Assert.fail("Malformed URL: " + e.getMessage());
}
+ assert url != null;
request.setScheme(url.getProtocol());
request.setServerName(url.getHost());
if (url.getPort() != -1) {
@@ -166,10 +174,10 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
request.setQueryString(url.getQuery());
}
- protected String encodeMessage(SAMLObject message) throws MessageEncodingException, MarshallingException, EncodingException {
+ protected String encodeMessage(@Nonnull final SAMLObject message) throws MessageEncodingException, MarshallingException, EncodingException {
try {
- marshallerFactory.getMarshaller(message).marshall(message);
- String messageStr = SerializeSupport.nodeToString(message.getDOM());
+ final Element dom = marshallerFactory.ensureMarshaller(message).marshall(message);
+ String messageStr = SerializeSupport.nodeToString(dom);
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
Deflater deflater = new Deflater(Deflater.DEFLATED, true);
@@ -182,4 +190,5 @@ public class HTTPRedirectDeflateDecoderTest extends XMLObjectBaseTestCase {
throw new MessageEncodingException("Unable to DEFLATE and Base64 encode SAML message", e);
}
}
+
}
\ No newline at end of file
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 c12073787..93fc8c9f6 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
@@ -17,6 +17,8 @@
package org.opensaml.saml.saml2.binding.decoding.impl;
+import javax.annotation.Nonnull;
+
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.io.MarshallingException;
@@ -27,6 +29,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.w3c.dom.Element;
import net.shibboleth.shared.testing.ConstantSupplier;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -67,14 +70,16 @@ public class HTTPSOAP11DecoderTest extends XMLObjectBaseTestCase {
httpRequest.setContent(requestContent.getBytes());
decoder.decode();
- MessageContext messageContext = decoder.getMessageContext();
+ final MessageContext messageContext = decoder.getMessageContext();
+ assert messageContext != null;
- Assert.assertNotNull(messageContext.getSubcontext(SOAP11Context.class).getEnvelope());
+ Assert.assertNotNull(messageContext.ensureSubcontext(SOAP11Context.class).getEnvelope());
Assert.assertTrue(messageContext.getMessage() instanceof Response);
}
- protected String encodeMessage(XMLObject message) throws MarshallingException {
- marshallerFactory.getMarshaller(message).marshall(message);
- return SerializeSupport.nodeToString(message.getDOM());
+ protected String encodeMessage(@Nonnull final XMLObject message) throws MarshallingException {
+ final Element dom = marshallerFactory.ensureMarshaller(message).marshall(message);
+ return SerializeSupport.nodeToString(dom);
}
-}
+
+}
\ No newline at end of file
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 0e7f9f115..e42c2cdc0 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
@@ -65,6 +65,7 @@ import net.shibboleth.shared.testing.ConstantSupplier;
/**
* Test case for {@link HTTPPostEncoder}.
*/
+ at SuppressWarnings("javadoc")
public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
/** Velocity template engine. */
@@ -86,7 +87,7 @@ public class HTTPPostSimpleSignEncoderTest extends XMLObjectBaseTestCase {
*/
@Test
public void testResponseEncoding() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder =
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder =
(SAMLObjectBuilder<StatusCode>) builderFactory.<StatusCode>ensureBuilder(
StatusCode.DEFAULT_ELEMENT_NAME);
StatusCode statusCode = statusCodeBuilder.buildObject();
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 50ececf86..7bb24d4d0 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
@@ -47,7 +47,6 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import org.w3c.dom.Document;
-import jakarta.servlet.http.HttpServletResponse;
import net.shibboleth.shared.codec.Base64Support;
import net.shibboleth.shared.net.URISupport;
import net.shibboleth.shared.net.URLBuilder;
@@ -64,44 +63,43 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void testResponseEncoding() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
- StatusCode statusCode = statusCodeBuilder.buildObject();
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
- Status responseStatus = statusBuilder.buildObject();
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
- Response samlMessage = responseBuilder.buildObject();
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
- Endpoint samlEndpoint = endpointBuilder.buildObject();
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
- MessageContext messageContext = new MessageContext();
+ final MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
- SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
+ final SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
handler.invoke(messageContext);
- MockHttpServletResponse response = new MockHttpServletResponse();
+ final MockHttpServletResponse response = new MockHttpServletResponse();
- HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
+ final HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
encoder.setMessageContext(messageContext);
encoder.setHttpServletResponseSupplier(new ConstantSupplier<>(response));
@@ -112,13 +110,14 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals("UTF-8", response.getCharacterEncoding(), "Unexpected character encoding");
Assert.assertEquals(response.getHeader("Cache-control"), "no-cache, no-store", "Unexpected cache controls");
- Assert.assertNotNull(response.getRedirectedUrl());
- URLBuilder urlBuilder = new URLBuilder(response.getRedirectedUrl());
+ final String redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ final URLBuilder urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
- Map<String,String> queryParams = URISupport.buildQueryMap(urlBuilder.getQueryParams());
+ final Map<String,String> queryParams = URISupport.buildQueryMap(urlBuilder.getQueryParams());
Assert.assertFalse(queryParams.containsKey("Signature"));
Assert.assertFalse(queryParams.containsKey("SigAlg"));
Assert.assertTrue(queryParams.containsKey("RelayState"));
@@ -141,44 +140,43 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void testResponseEncodingWithEndpointQueryParams() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
- StatusCode statusCode = statusCodeBuilder.buildObject();
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
- Status responseStatus = statusBuilder.buildObject();
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
- Response samlMessage = responseBuilder.buildObject();
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
- Endpoint samlEndpoint = endpointBuilder.buildObject();
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response?foo=bar&abc=123");
- MessageContext messageContext = new MessageContext();
+ final MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
- SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
+ final SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
handler.invoke(messageContext);
- MockHttpServletResponse response = new MockHttpServletResponse();
+ final MockHttpServletResponse response = new MockHttpServletResponse();
- HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
+ final HTTPRedirectDeflateEncoder encoder = new HTTPRedirectDeflateEncoder();
encoder.setMessageContext(messageContext);
encoder.setHttpServletResponseSupplier(new ConstantSupplier<>(response));
@@ -189,8 +187,9 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals("UTF-8", response.getCharacterEncoding(), "Unexpected character encoding");
Assert.assertEquals(response.getHeader("Cache-control"), "no-cache, no-store", "Unexpected cache controls");
- Assert.assertNotNull(response.getRedirectedUrl());
- URLBuilder urlBuilder = new URLBuilder(response.getRedirectedUrl());
+ final String redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ final URLBuilder urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
@@ -222,28 +221,27 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void testResponseEncodingWithDisallowedEndpointQueryParams() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
Endpoint samlEndpoint = endpointBuilder.buildObject();
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");
@@ -251,8 +249,8 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
handler.invoke(messageContext);
@@ -270,8 +268,9 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals("UTF-8", response.getCharacterEncoding(), "Unexpected character encoding");
Assert.assertEquals(response.getHeader("Cache-control"), "no-cache, no-store", "Unexpected cache controls");
- Assert.assertNotNull(response.getRedirectedUrl());
- URLBuilder urlBuilder = new URLBuilder(response.getRedirectedUrl());
+ final String redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ final URLBuilder urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
@@ -309,26 +308,26 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
@Test
@SuppressWarnings("unchecked")
public void testResponseEncodingWithSimpleSign() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
@@ -336,14 +335,14 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
KeyPair kp = KeySupport.generateKeyPair("RSA", 1024, null);
SignatureSigningParameters signingParameters = new SignatureSigningParameters();
signingParameters.setSigningCredential(CredentialSupport.getSimpleCredential(kp.getPublic(), kp.getPrivate()));
signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
- messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+ messageContext.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(signingParameters);
SAMLOutboundDestinationHandler handler = new SAMLOutboundDestinationHandler();
handler.invoke(messageContext);
@@ -358,8 +357,9 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
encoder.prepareContext();
encoder.encode();
- Assert.assertNotNull(response.getRedirectedUrl());
- URLBuilder urlBuilder = new URLBuilder(response.getRedirectedUrl());
+ final String redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ final URLBuilder urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
@@ -392,30 +392,29 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void OSJ271() throws Exception {
// First we generate the signature with a redirect URL that does not have query params.
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
@@ -423,14 +422,14 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
KeyPair kp = KeySupport.generateKeyPair("RSA", 1024, null);
SignatureSigningParameters signingParameters = new SignatureSigningParameters();
signingParameters.setSigningCredential(CredentialSupport.getSimpleCredential(kp.getPublic(), kp.getPrivate()));
signingParameters.setSignatureAlgorithm(SignatureConstants.ALGO_ID_SIGNATURE_RSA_SHA1);
- messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+ messageContext.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(signingParameters);
// NOTE: So that we can get an exact signature comparison without and with query params, we do not invoke
// the SAMLOutboundDestinationHandler, which would change the data being signed. Not correct vis-a-vis actual
@@ -446,8 +445,9 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
encoder.prepareContext();
encoder.encode();
- Assert.assertNotNull(response.getRedirectedUrl());
- URLBuilder urlBuilder = new URLBuilder(response.getRedirectedUrl());
+ String redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ URLBuilder urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
@@ -481,10 +481,10 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
- messageContext.getSubcontext(SecurityParametersContext.class, true).setSignatureSigningParameters(signingParameters);
+ messageContext.ensureSubcontext(SecurityParametersContext.class).setSignatureSigningParameters(signingParameters);
final MockHttpServletResponse response2 = new MockHttpServletResponse();
@@ -496,8 +496,9 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
encoder.prepareContext();
encoder.encode();
- Assert.assertNotNull(response2.getRedirectedUrl());
- urlBuilder = new URLBuilder(response2.getRedirectedUrl());
+ redirectedUrl = response.getRedirectedUrl();
+ assert redirectedUrl != null;
+ urlBuilder = new URLBuilder(redirectedUrl);
Assert.assertEquals(urlBuilder.getScheme(), "http");
Assert.assertEquals(urlBuilder.getHost(), "example.org");
Assert.assertEquals(urlBuilder.getPath(), "/response");
@@ -530,4 +531,5 @@ public class HTTPRedirectDeflateEncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals(signatureWithoutParams, signatureWithParams);
}
-}
+
+}
\ No newline at end of file
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 b2971d1f8..b82e7dc18 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
@@ -34,6 +34,7 @@ import org.opensaml.saml.saml2.core.Status;
import org.opensaml.saml.saml2.core.StatusCode;
import org.opensaml.saml.saml2.metadata.AssertionConsumerService;
import org.opensaml.saml.saml2.metadata.Endpoint;
+import org.opensaml.soap.soap11.Body;
import org.opensaml.soap.soap11.Envelope;
import org.springframework.mock.web.MockHttpServletResponse;
import org.testng.Assert;
@@ -52,41 +53,40 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
* @throws Exception if something goes wrong
*/
@Test
- @SuppressWarnings("unchecked")
public void testResponseEncoding() throws Exception {
- SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
- .getBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
- StatusCode statusCode = statusCodeBuilder.buildObject();
+ final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) builderFactory
+ .<StatusCode>ensureBuilder(StatusCode.DEFAULT_ELEMENT_NAME);
+ final StatusCode statusCode = statusCodeBuilder.buildObject();
statusCode.setValue(StatusCode.SUCCESS);
- SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
- .getBuilder(Status.DEFAULT_ELEMENT_NAME);
- Status responseStatus = statusBuilder.buildObject();
+ final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) builderFactory
+ .<Status>ensureBuilder(Status.DEFAULT_ELEMENT_NAME);
+ final Status responseStatus = statusBuilder.buildObject();
responseStatus.setStatusCode(statusCode);
- SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
- .getBuilder(Response.DEFAULT_ELEMENT_NAME);
- Response samlMessage = responseBuilder.buildObject();
+ final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) builderFactory
+ .<Response>ensureBuilder(Response.DEFAULT_ELEMENT_NAME);
+ final Response samlMessage = responseBuilder.buildObject();
samlMessage.setID("foo");
samlMessage.setVersion(SAMLVersion.VERSION_20);
samlMessage.setIssueInstant(Instant.ofEpochMilli(0));
samlMessage.setStatus(responseStatus);
- SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
- .getBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
+ final SAMLObjectBuilder<Endpoint> endpointBuilder = (SAMLObjectBuilder<Endpoint>) builderFactory
+ .<Endpoint>ensureBuilder(AssertionConsumerService.DEFAULT_ELEMENT_NAME);
Endpoint samlEndpoint = endpointBuilder.buildObject();
samlEndpoint.setLocation("http://example.org");
samlEndpoint.setResponseLocation("http://example.org/response");
- MessageContext messageContext = new MessageContext();
+ final MessageContext messageContext = new MessageContext();
messageContext.setMessage(samlMessage);
SAMLBindingSupport.setRelayState(messageContext, "relay");
- messageContext.getSubcontext(SAMLPeerEntityContext.class, true)
- .getSubcontext(SAMLEndpointContext.class, true).setEndpoint(samlEndpoint);
+ messageContext.ensureSubcontext(SAMLPeerEntityContext.class)
+ .ensureSubcontext(SAMLEndpointContext.class).setEndpoint(samlEndpoint);
final MockHttpServletResponse response = new MockHttpServletResponse();
- HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
+ final HTTPSOAP11Encoder encoder = new HTTPSOAP11Encoder();
encoder.setMessageContext(messageContext);
encoder.setHttpServletResponseSupplier(new ConstantSupplier<>(response));
@@ -99,15 +99,16 @@ public class HTTPSOAP11EncoderTest extends XMLObjectBaseTestCase {
Assert.assertEquals(response.getHeader("Cache-control"), "no-cache, no-store", "Unexpected cache controls");
Assert.assertEquals(response.getHeader("SOAPAction"), "http://www.oasis-open.org/committees/security");
- try (ByteArrayInputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray())) {
+ try (final ByteArrayInputStream inputStream = new ByteArrayInputStream(response.getContentAsByteArray())) {
XMLObject xmlObject = XMLObjectSupport.unmarshallFromInputStream(parserPool, inputStream);
Assert.assertNotNull(xmlObject);
Assert.assertTrue(xmlObject instanceof Envelope);
Envelope envelope = (Envelope) xmlObject;
Assert.assertNull(envelope.getHeader());
- Assert.assertNotNull(envelope.getBody());
- Assert.assertEquals(envelope.getBody().getUnknownXMLObjects().size(), 1);
- Response outboundResponse = (Response) envelope.getBody().getUnknownXMLObjects().get(0);
+ final Body body = envelope.getBody();
+ assert body != null;
+ Assert.assertEquals(body.getUnknownXMLObjects().size(), 1);
+ Response outboundResponse = (Response) body.getUnknownXMLObjects().get(0);
outboundResponse.releaseDOM();
outboundResponse.releaseChildrenDOM(true);
outboundResponse.setParent(null);
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 67bfe870c..2b5f0ba8a 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
@@ -237,7 +237,7 @@ public class HttpClientRequestSOAP11Encoder extends BaseHttpClientRequestXMLMess
}
/** {@inheritDoc} */
- protected XMLObject getMessageToLog() {
+ @Nullable protected XMLObject getMessageToLog() {
return getMessageContext().ensureSubcontext(SOAP11Context.class).getEnvelope();
}
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 fe3a02aca..ef912a466 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
@@ -39,10 +39,10 @@ import org.opensaml.soap.soap11.FaultCode;
import org.opensaml.soap.soap11.Header;
import org.opensaml.soap.wsaddressing.Action;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import jakarta.servlet.http.HttpServletResponse;
+import net.shibboleth.shared.primitive.LoggerFactory;
import net.shibboleth.shared.servlet.HttpServletSupport;
import net.shibboleth.shared.xml.SerializeSupport;
@@ -52,13 +52,13 @@ import net.shibboleth.shared.xml.SerializeSupport;
public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder {
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(HTTPSOAP11Encoder.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(HTTPSOAP11Encoder.class);
/** SOAP Envelope builder. */
- private SOAPObjectBuilder<Envelope> envBuilder;
+ @Nonnull private SOAPObjectBuilder<Envelope> envBuilder;
/** SOAP Body builder. */
- private SOAPObjectBuilder<Body> bodyBuilder;
+ @Nonnull private SOAPObjectBuilder<Body> bodyBuilder;
/** Constructor. */
public HTTPSOAP11Encoder() {
@@ -213,7 +213,7 @@ public class HTTPSOAP11Encoder extends BaseHttpServletResponseXMLMessageEncoder
*
* @return a SOAPAction HTTP header URI value
*/
- protected String getSOAPAction() {
+ @Nullable protected String getSOAPAction() {
final Envelope env = getSOAPEnvelope();
final Header header = env != null ? env.getHeader() : null;
if (header == null) {
diff --git a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/crypto/XMLSigningUtil.java b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/crypto/XMLSigningUtil.java
index 722ee796d..03409ce0f 100644
--- a/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/crypto/XMLSigningUtil.java
+++ b/opensaml-xmlsec-api/src/main/java/org/opensaml/xmlsec/crypto/XMLSigningUtil.java
@@ -46,8 +46,8 @@ public final class XMLSigningUtil {
* @return the computed signature or MAC value
* @throws SecurityException throw if the computation process results in an error
*/
- public static byte[] signWithURI(@Nonnull final Credential signingCredential, @Nonnull final String algorithmURI,
- @Nonnull final byte[] input) throws SecurityException {
+ @Nonnull public static byte[] signWithURI(@Nonnull final Credential signingCredential,
+ @Nonnull final String algorithmURI, @Nonnull final byte[] input) throws SecurityException {
final String jcaAlgorithmID = AlgorithmSupport.getAlgorithmID(algorithmURI);
if (jcaAlgorithmID == null) {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list