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: DSTRequestHandler.java,v 1.3 2008/06/25 05:47:14 qcheng Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.dst.service;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.ResourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.jaxb.EncryptedResourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.EncryptedResourceID;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.dst.DSTUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.SOAPFaultException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Message;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.RequestHandler;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.soapbinding.Utils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.security.SecurityTokenManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.common.wsse.BinarySecurityToken;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.dst.DSTException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.liberty.ws.disco.common.DiscoUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The class <code>DSTRequestHandler</code> is a handler for processing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Query or Modify Requests for any generic data service that are built
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * using Liberty SIS specifications. This class includes common processing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * rules defined by Liberty DST specification, it is an extension point
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * for any Liberty DST based web services.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.all.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic abstract class DSTRequestHandler implements RequestHandler {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Default constructor
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Processes the request for the given personal profile service request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param msg SOAP Request message
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Message SOAP Response Message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SOAPFaultException if the service requires an interaction.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception Exception for any generic failure.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processRequest:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestBodies = Utils.convertElementToJAXB(requestBodies);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(requestBodies == null || requestBodies.size() == 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("DSTRequestHandler:processRequest:"+
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "SOAPBodies are null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new Exception(DSTUtils.bundle.getString("nullInputParams"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int securityProfile = msg.getSecurityProfileType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response = new Message(null, generateBinarySecurityToken(msg));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setCorrelationHeader(msg.getCorrelationHeader());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List responseBodies = processSOAPBodies(requestBodies, msg, response);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseBodies = Utils.convertJAXBToElement(responseBodies);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processRequest:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Processes each SOAPBody.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param requestBodies list of request bodies
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return List list of response bodies.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SOAPFaultException for the interaction queries.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception DSTException for any failure.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List processSOAPBodies(List requestBodies,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processSOAPBodies:Init");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseBodies.add(processDSTRequest(request, msg, response));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Generates the binary security token if the security profile is X509.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param msg Request Message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return BinarySecurityToken.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception DSTException.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private BinarySecurityToken generateBinarySecurityToken(Message msg)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SecurityTokenManager manager = new SecurityTokenManager(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BinarySecurityToken binaryToken = manager.getX509CertificateToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster binaryToken.setWSFVersion(msg.getWSFVersion());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("DSTRequestHandler:generateBinary" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "SecurityToken: Error in generating binary security token.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Processes query/modify request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param request query or modify object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param msg Request Message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param response response Message.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return Object processed response object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception DSTException for failure.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @exception SOAPFaultException for the interaction redirects
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Gets the Resource ID given in the Query or Modify Request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param resourceIDType JAXB ResourceIDType Object.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param providerID Provider ID.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param serviceType Service Type.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @return String resource id.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler:getResourceID:Init");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler:getResourceID:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ResourceIDType is null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceIDType resID = (ResourceIDType)resourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if( resourceIDType instanceof EncryptedResourceIDType) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoUtils.getDiscoMarshaller().marshal(encID, encDoc);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler.getResourceID:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Encrypted ResourceID = " + XMLUtils.print((Node)encDoc));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster EncryptedResourceID encryptedId = new EncryptedResourceID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String resIDStr = EncryptedResourceID.getDecryptedResourceID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler.getResourceID: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ResourceID Value after decryption" + resIDStr);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("PPRequestHandler.getResourceID:error", ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("PPRequestHandler:getResourceID:invalid" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "resource ID type.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Issue to be resolved: DST Schema does not have any name space associated
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with it. These schemas are included in each service schema., so that they
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * would inherit the name spaces of respective processing service.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Hence, DST JAXBElements have to be different for each data service. This
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * issue might need to escalate to the JAXB team so that we should be able
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * to specify the name space at runtime.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Till then, we will have one request handler for each data service, other
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * wise resolving imports is really difficult.