/** {@inheritDoc} */ protected void processAttribute(XMLObject samlObject, Attr attribute) throws UnmarshallingException { StatusCode statusCode = (StatusCode) samlObject; if (attribute.getName().equals(StatusCode.VALUE_ATTRIB_NAME)) { statusCode.setValue(AttributeSupport.getAttributeValueAsQName(attribute)); } else { super.processAttribute(samlObject, attribute); } } }
/** * Build and attach {@link StatusCode} element. * * @param status the element to attach to * @param codes the status codes to use */ private void buildStatusCode(@Nonnull final Status status, @Nonnull @NonnullElements final List<QName> codes) { final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) XMLObjectProviderRegistrySupport.getBuilderFactory().<StatusCode>getBuilderOrThrow( StatusCode.TYPE_NAME); // Build nested StatusCodes. StatusCode statusCode = statusCodeBuilder.buildObject(); status.setStatusCode(statusCode); if (codes.isEmpty()) { statusCode.setValue(StatusCode.RESPONDER); } else { statusCode.setValue(codes.get(0)); final Iterator<QName> i = codes.iterator(); i.next(); while (i.hasNext()) { final StatusCode subcode = statusCodeBuilder.buildObject(); subcode.setValue(i.next()); statusCode.setStatusCode(subcode); statusCode = subcode; } } }
@Nonnull @Override protected Response buildSamlResponse( @Nonnull final RequestContext springRequestContext, @Nonnull final ProfileRequestContext<SAMLObject, SAMLObject> profileRequestContext) { final TicketValidationRequest request = getCASRequest(profileRequestContext); final TicketValidationResponse validationResponse = getCASResponse(profileRequestContext); final Response response = newSAMLObject(Response.class, Response.DEFAULT_ELEMENT_NAME); response.setID(request.getTicket()); response.setIssueInstant(DateTime.now()); final Status status = newSAMLObject(Status.class, Status.DEFAULT_ELEMENT_NAME); final StatusCode statusCode = newSAMLObject(StatusCode.class, StatusCode.DEFAULT_ELEMENT_NAME); statusCode.setValue(new QName(NAMESPACE, validationResponse.getErrorCode())); status.setStatusCode(statusCode); final StatusMessage message = newSAMLObject(StatusMessage.class, StatusMessage.DEFAULT_ELEMENT_NAME); message.setMessage(validationResponse.getErrorDetail()); status.setStatusMessage(message); response.setStatus(status); return response; } }
/** * Create a new SAML status object. * * @param codeValue the code value * @param statusMessage the status message * @return the status */ public Status newStatus(final QName codeValue, final String statusMessage) { final Status status = newSamlObject(Status.class); final StatusCode code = newSamlObject(StatusCode.class); code.setValue(codeValue); status.setStatusCode(code); if (statusMessage != null) { final StatusMessage message = newSamlObject(StatusMessage.class); message.setMessage(statusMessage); status.setStatusMessage(message); } return status; }
/** {@inheritDoc} */ @Override protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) { final XMLObjectBuilderFactory bf = XMLObjectProviderRegistrySupport.getBuilderFactory(); final SAMLObjectBuilder<StatusCode> statusCodeBuilder = (SAMLObjectBuilder<StatusCode>) bf.<StatusCode>getBuilderOrThrow(StatusCode.DEFAULT_ELEMENT_NAME); final SAMLObjectBuilder<Status> statusBuilder = (SAMLObjectBuilder<Status>) bf.<Status>getBuilderOrThrow(Status.DEFAULT_ELEMENT_NAME); final SAMLObjectBuilder<Response> responseBuilder = (SAMLObjectBuilder<Response>) bf.<Response>getBuilderOrThrow(Response.DEFAULT_ELEMENT_NAME); final StatusCode statusCode = statusCodeBuilder.buildObject(); statusCode.setValue(StatusCode.SUCCESS); final Status status = statusBuilder.buildObject(); status.setStatusCode(statusCode); final Response response = responseBuilder.buildObject(); response.setID(idGenerator.generateIdentifier()); response.setIssueInstant(new DateTime(ISOChronology.getInstanceUTC())); response.setStatus(status); response.setVersion(SAMLVersion.VERSION_11); profileRequestContext.getOutboundMessageContext().setMessage(response); }
final Status status = newSAMLObject(Status.class, Status.DEFAULT_ELEMENT_NAME); final StatusCode code = newSAMLObject(StatusCode.class, StatusCode.DEFAULT_ELEMENT_NAME); code.setValue(StatusCode.SUCCESS); status.setStatusCode(code); response.setStatus(status);