a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: InteractionManager.java,v 1.5 2008/08/06 17:28:10 exu Exp $
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts * Portions Copyrighted 2016 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.interaction;
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpottsimport static org.forgerock.openam.utils.Time.*;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.PeriodicCleanUpMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.encode.URLEncDec;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.common.LogUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.InquiryElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.InteractionResponseElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.RedirectRequestElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.StatusElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.interaction.jaxb.UserInteractionElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Client;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.CorrelationHeader;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Message;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPBindingConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPBindingException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPFault;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPFaultDetail;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPFaultException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Utils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ConcurrentModificationException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This class provides the interface and implementation for supporting
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * resource owner interaction. <code>WSC</code> and <code>WSP</code> would
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * collaborate with the singleton object instance of this class to provide
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * and use resource owner interaction.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Name of URL query parameter to be used by <code>WSC</code> to include
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>returnToURL</code>, while redirecting user agent to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.all.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String RETURN_TO_URL = "ReturnToURL";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Name of suggested URL query parameter to be used by <code>WSC</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * to include an ID to refer to request message that led to user agent
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String REQUEST_ID = "RequestID";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Name of URL query parameter to be used by <code>WSC</code> to include
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>providerID</code> of <code>IDP</code>, that was used to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * authenticate user.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Name of URL query parameter to be used by <code>WSP</code> to include
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * an ID to indicate that user agent is redirected back to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSC</code> from <code>WSP</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String RESEND_MESSAGE = "ResendMessage";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Name space URI of interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String INTERACTION_NAMESPACE
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = "urn:liberty:is:2003-08";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>s:Server</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>s</code> - soap name space prefix
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(SOAPBindingConstants.NS_SOAP, "Server");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:interactIfNeeded</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACT_IF_NEEDED
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(INTERACTION_NAMESPACE, "interactIfNeeded", "is");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:doNotInteract</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_DO_NOT_INTERACT
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(INTERACTION_NAMESPACE, "doNotInteract", "is");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:doNotInteractForData</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_DO_NOT_INTERACT_FOR_DATA
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(INTERACTION_NAMESPACE, "doNotInteractForData", "is");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:interactionRequired</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACTION_REQUIRED
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(INTERACTION_NAMESPACE, "interactionRequired");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:forData</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACTION_REQUIRED_FOR_DATA
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:timeNotSufficient</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACTION_TIME_NOT_SUFFICEINT
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = new QName(INTERACTION_NAMESPACE, "timeNotSufficient");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:timeOut</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACTION_TIMED_OUT
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>QName</code> for <code>is:interactIfNeeded</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>is</code> - name space prefix for interaction service
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final QName QNAME_INTERACTION_CAN_NOT_DETERMINE_REQUEST_HOST
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "canNotDetermineRequestHostName");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Constant string to indicate generic server error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public static final String SERVER_ERROR = "Server Error";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static InteractionManager interactionManager = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static Debug debug = Debug.getInstance("libIDWSF");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String REDIRECT_URL = "redirectURL";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = "http://schemas.xmlsoap.org/soap/actor/next";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String INTERACTION_RB_NAME = "libInteraction";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private InteractionCache cache = new InteractionCache();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private com.sun.identity.liberty.ws.interaction.jaxb.ObjectFactory
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets singleton object instance of <code>InteractionManager</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return singleton object instance of <code>InteractionManager</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster synchronized public static InteractionManager getInstance() {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objectFactory = JAXBObjectFactory.getObjectFactory();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster interactionConfig = InteractionConfig.getInstance();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "InteractionManager():constructed singleton instance");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Sends SOAP request to <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This would be invoked at <code>WSC</code> side.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestMessage request message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param connectTo SOAP URL to which to send the SOAP request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param certAlias SOAP Client Certificate Alias
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param soapAction SOAP Action Attribute
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param returnToURL URL to which to redirect user agent after
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> - resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpRequest HTTP request object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpResponse HTTP response object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return response SOAP response message sent by <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for generic interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionRedirectException if user agent is redirected to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> for resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPBindingException for generic SOAP binding errors
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPFaultException if the response message has SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message sendRequest(Message requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws InteractionException, InteractionRedirectException,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " entering with messageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + requestMessage.getCorrelationHeader().getMessageID()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":refToMessageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + requestMessage.getCorrelationHeader().getRefToMessageID()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // construct and set UserInteraction element in requestMessage
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (interactionConfig.wscIncludesUserInteractionHeader()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Enumeration locales = httpRequest.getLocales();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster acceptLanguages.add(locales.nextElement().toString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Accept-Language specified by httpRequest="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster UserInteractionElement ue = createUserInteractionElement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Element element = Utils.convertJAXBToElement(ue);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "not setting userInteractionHeader:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "can not convert JAXBObject to Element", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "invoking soap Client.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objs[0] = requestMessage.getCorrelationHeader()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO, LogUtil.IS_SENDING_MESSAGE,objs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseMessage = Client.sendRequest(requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " catching SOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseMessage = handleRedirectRequest(requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster redirectURL, responseID, connectTo, certAlias, soapAction,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " returning response message=" + responseMessage);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objs[0] = responseMessage.getCorrelationHeader().getMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objs[1] = requestMessage.getCorrelationHeader().getMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.IS_RETURNING_RESPONSE_MESSAGE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Resends a previously cached SOAP request message to <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This would be invoked at <code>WSC</code> side. Message ID for the cached
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * message should be provided as value of <code>REQUEST_ID</code> query
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * parameter in <code>httpRequest</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param returnToURL URL to which to redirect user agent after
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> - resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpRequest HTTP request object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpResponse HTTP response object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return response SOAP message sent by <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for generic interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionRedirectException if user agent is redirected to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> for resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPBindingException if there are generic SOAP errors
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPFaultException if the response message has SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @see #REQUEST_ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message resendRequest(String returnToURL,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws InteractionRedirectException, InteractionException,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return resendRequest(returnToURL, httpRequest, httpResponse, null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Resends a SOAP request message to <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This would be invoked at <code>WSC</code> side.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param returnToURL URL to which to redirect user agent after
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> - resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpRequest HTTP request object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param httpResponse HTTP response object of current user agent request
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestMessage SOAP message to be resent.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return response SOAP message sent by <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for generic interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionRedirectException if user agent is redirected to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>WSP</code> for resource owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPBindingException for generic SOAP errors
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPFaultException if the response message has SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message resendRequest(String returnToURL,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpServletResponse httpResponse, Message requestMessage)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws InteractionRedirectException, InteractionException,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.resendRequest():entering ");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //check for RESEND_MESSAGE parameter
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String messageID = httpRequest.getParameter(RESEND_MESSAGE);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " request without " + RESEND_MESSAGE + " in requestURL="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //check whether WSP advised not to resend
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ( (messageID == "0") || (messageID.equals("false")) ) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " resend not allowed in requestURL="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //check for original REQUEST_ID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster messageID = httpRequest.getParameter(REQUEST_ID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " request without " + REQUEST_ID + " in requestURL="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " old connectTo not found for messageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.resendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "invoking with null requestMessage:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "old cached message would be used");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Message oldMessage = getRequestMessage(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " old message not found for messageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.resendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "invoking with non null requestMessage");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CorrelationHeader ch = new CorrelationHeader();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ch.setRefToMessageID(InteractionManager.getInstance()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.resendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "invoking InteractionManager.sendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.IS_RESENDING_MESSAGE,objs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Message responseMessage = sendRequest(requestMessage, connectTo,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getClientCert(messageID), getSoapAction(messageID),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.resendRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " returning responseMessage=" + responseMessage);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Message handleRedirectRequest(Message requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String redirectURL, String messageID, String connectTo,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String certAlias, String soapAction, String returnToURL,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster HttpServletRequest httpRequest, HttpServletResponse httpResponse)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws InteractionRedirectException, InteractionException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "entering with redirectURL="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //redirectURL should not have ReturnToURL parameter
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!(redirectURL.indexOf(RETURN_TO_URL + "=") == -1)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid redirectURL - illegal parameter "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //redirectURL should not have IDP parameter
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid redirectURL - illegal parameter:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //redirectURL should be https
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (InteractionConfig.getInstance().wscEnforcesHttpsCheck()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid Request "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " not https"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //redirectURL should point to connectTo host
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster && !checkRedirectHost(redirectURL, connectTo)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "Invalid Request redirectToHost differs from "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " connectToHost:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String requestID = requestMessage.getCorrelationHeader().getMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleRedirectRequest():cached "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " request message for messageID=" + messageID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":requestMessage:" + (requestMessage == null) );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster returnToURL = returnToURL + "?" + REQUEST_ID + "=" + requestID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster redirectURL = redirectURL +"&"+ RETURN_TO_URL + "="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "redirecting user agent to redirectURL= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleRedirectRequest():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "redirected user agent to redirectURL= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.IS_REDIRECTED_USER_AGENT,objs);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionRedirectException(requestID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //return returnMessage;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Handles resource owner interactions on behalf of <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is invoked at <code>WSP</code> side.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestMessage SOAP request that requires resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param inquiryElement query that <code>WSP</code> wants to pose to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * resource owner.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return SOAP message that contains <code>InteractionResponse</code>,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * gathered by <code>InteractionManager</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for generic interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionSOAPFaultException if a SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * has to be returned to <code>WSC</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPFaultException if the response message has SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @deprecated
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message handleInteraction(Message requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InquiryElement inquiryElement) throws InteractionException,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionSOAPFaultException, SOAPFaultException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return handleInteraction(requestMessage, inquiryElement, null);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Handles resource owner interactions on behalf of <code>WSP</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This is invoked at <code>WSP</code> side.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestMessage SOAP request that requires resource
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * owner interactions
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param inquiryElement query that <code>WSP</code> wants to pose to
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * resource owner
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param language language in which the query page needs to be rendered
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return SOAP message that contains <code>InteractionResponse</code>,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * gathered by <code>InteractionManager</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for generic interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionSOAPFaultException if a SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * has to be returned to <code>WSC</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws SOAPFaultException if the response message has SOAP fault
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message handleInteraction(Message requestMessage,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InquiryElement inquiryElement, String language)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionSOAPFaultException, SOAPFaultException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleInteraction():entering");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check redirect is enabled for WSP
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!interactionConfig.wspSupportsRedirect()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " WSP requests for interaction:wspWillRedirect="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionException");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new InteractionException(INTERACTION_RB_NAME,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check wsc provided UserInteraction header
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " WSP requests for interaction - WSC did not "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " provide UserInteractionHeader");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionSOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check WSC is willing to redirect
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "WSP rquests for interaction - WSC "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " says redirect=false");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionSOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check WSC allowed interaction
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (ue.getInteract().equals(QNAME_DO_NOT_INTERACT)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "WSP rquests for interaction - WSC "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " UserInteractionHeader says doNotInteract");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionSOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check WSC allowed interaction for data
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "WSP rquests interaction for data - WSC "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " UserInteractionHeader says doNotInteractForData");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionSOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //Check WSP will not exceed maxInteractionTime specified by WSC
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ( (uemi != null) && (interactionConfig.getWSPRedirectTime()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "WSP inteaction time ="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " exceeds WSC maxInteractTime= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.warning("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "throwing InteractionSOAPFaultException="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster = requestMessage.getCorrelationHeader().getMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String redirectResponseID = getResponseID(sfe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (interactionConfig.wspEnforcesReturnToHostEqualsRequestHost()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InetAddress inetAddress = InetAddress.getByName(requestIP);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //requestHost = inetAddress.getCanonicalHostName();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ", for redirectResponseID= "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster setRequestHost(redirectResponseID, requestHost);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " throwing InteractionSOAPFaultException", sfe);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe1 = newRedirectFaultError(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster QNAME_INTERACTION_CAN_NOT_DETERMINE_REQUEST_HOST);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster setInquiryElement(redirectResponseID, inquiryElement);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster setRequestMessageID(redirectResponseID, requestMessageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.handleInteraction():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " throwing InteractionSOAPFaultException "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " to redirect user agent="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster //return responseMessage;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setInquiryElement(String messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InquiryElement getInquiryElement(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster inquiryElement = cacheEntry.getInquiryElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setInteractionResponseElement(String messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionResponseElement interactionResponse) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cacheEntry.setInteractionResponseElement(interactionResponse);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets interaction response that was gathered from resource owner
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * by <code>InteractionManager</code>
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestMessage request message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return interaction response that was gathered by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * <code>InteractionManager</code>.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws InteractionException for interaction error
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public InteractionResponseElement getInteractionResponseElement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionResponseElement interactionResponseElement = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CorrelationHeader ch = requestMessage.getCorrelationHeader();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.getInteractionResponseElement():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "responseElement="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster objs[2] = (cacheEntry == null) ? "NULL" : "NOT NULL";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster LogUtil.access(Level.INFO,LogUtil.IS_RETURNING_RESPONSE_ELEMENT,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setRequestMessage(String messageID, Message requestMessage) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.setRequestMessage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " cached request message for messageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":requestMessage:" + (requestMessage == null) );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private Message getRequestMessage(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestMessage = cacheEntry.getRequestMessage();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.getRequestMessage():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " looking up request message for messageID="
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + ":requestMessage=" + (requestMessage == null) );
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setRequestMessageID(String messageID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster cacheEntry.setRequestMessageID(requestMessageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestMessageID = cacheEntry.getRequestMessageID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setReturnToURL(String messageID, String returnToURL) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setRequestHost(String messageID, String requestHost) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setConnectTo(String messageID, String ConnectTo) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setSoapAction(String messageID, String soapAction) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setClientCert(String messageID, String certAlias) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getConnectTo(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getClientCert(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String getSoapAction(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void setLanguage(String messageID, String language) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry cacheEntry = cache.getCacheEntry(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private UserInteractionElement createUserInteractionElement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ue =objectFactory.createUserInteractionElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ue.setRedirect(interactionConfig.wscSupportsRedirect());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.createUserInteractionElement():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " can not create UserInteractionElement", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster static UserInteractionElement getUserInteractionElement(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.getUserInteractionElement():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "not able to get userInteractionElement:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "can not convert Element to JAXBObject", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private SOAPFaultException newRedirectFault(String messageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster re = objectFactory.createRedirectRequestElement();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.newRedirectFault():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " can not create RedirectRequestElement", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CorrelationHeader ch = new CorrelationHeader();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String lbRedirectUrl = interactionConfig.getLbWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String wspRedirectUrl = interactionConfig.getWSPRedirectHandler();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.newRedirectURLFault():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster redirectUrl = wspRedirectUrl + "?" + TRANS_ID + "=" + responseID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.newRedirectURLFault():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "lbRedirectURL is null, rediectUrl:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else { //lbRedirectUrl defined
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster redirectUrl = lbRedirectUrl + "?" + TRANS_ID + "=" + responseID
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "=" + InteractionConfig.getInstance().getLocalServerId();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionManager.newRedirectURLFault():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "lbRedirectURL is not null, rediectUrl:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.newRedirectFault():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " can not create newRedirectFault:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " can not convert JAXBObject to Element", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = new SOAPFaultException(sfmsg);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private SOAPFaultException newRedirectFaultError(QName errorCode) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.newRedirectFaultError():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.newRedirectFaultError():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "can not create new RedirectFaultError:"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "can not convert JAXBObject to Element", je);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SOAPFaultException sfe = new SOAPFaultException(new Message(sf));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String getRedirectURL(SOAPFaultException sfe) throws SOAPFaultException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sfe.getSOAPFaultMessage().getSOAPFault().getDetail();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.getRedirectURL():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster && (details.get(0) instanceof RedirectRequestElement)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private boolean checkRedirectHost(String redirectURL, String connectTo) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster boolean answer = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.checkRedirectHost():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "redirectURL not a valid URL"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String getResponseID(SOAPFaultException sfe) throws SOAPFaultException{
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster sfe.getSOAPFaultMessage().getCorrelationHeader();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.getResponseID():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "null CorrelationHeader in SOAPFaultException");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.error("InteractionManager.getResponseID():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "null messageID in SOAPFaultException");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final boolean VERBOSE_MESSAGE = false;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final int SWEEP_INTERVAL = 60 * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final int CACHE_ENTRY_MAX_IDLE_TIME = 120 * 1000;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster PeriodicCleanUpMap cache = new PeriodicCleanUpMap(SWEEP_INTERVAL,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteactionCache.InteractionCache() "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " - entering constructor");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteactionCache.InteractionCache() "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " - starting sweeper thread");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionCache.InteractionCache() "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionCache.InteractionCache() "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " CACHE_ENTRY_MAX_IDLE_TIME = "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SystemTimerPool.getTimerPool().schedule((TaskRunnable) cache,
ccf9d4a5c6453fa9f8b839baeee25147865fbb7dJames Phillpotts new Date(((currentTimeMillis() + SWEEP_INTERVAL) / 1000)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteactionCache.InteractionCache() "
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " - returning from constructor");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (VERBOSE_MESSAGE && debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionCache.getCacheEntry():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + "looking up cacheEntry for messageID=" + messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionCache.getCacheEntry():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry entry = (CacheEntry)cache.get(messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void putCacheEntry(String messageID, CacheEntry cacheEntry) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (VERBOSE_MESSAGE && debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster debug.message("InteractionCache.putCacheEntry():"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster + " cached cacheEntry for messageID=" + messageID);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionResponseElement interactionResponseElement;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster CacheEntry(String messageID, Message message) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setRequestMessage(Message requestMessage) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setRequestMessageID(String requestMessageID) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster void setInquiryElement(InquiryElement inquiryElement) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InteractionResponseElement interactionResponseElement) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster this.interactionResponseElement = interactionResponseElement;