a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
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 *
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 * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
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 *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: DSTRequestHandler.java,v 1.3 2008/06/25 05:47:14 qcheng Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.liberty.ws.dst.service;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
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 Fosterimport com.sun.identity.shared.xml.XMLUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Document;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.w3c.dom.Node;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
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 *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @supported.all.api
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic abstract class DSTRequestHandler implements RequestHandler {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Default constructor
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected DSTRequestHandler() {}
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
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 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public Message processRequest(Message msg)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SOAPFaultException, Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(DSTUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processRequest:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Request received: " + msg.toString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List requestBodies = msg.getBodies();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster requestBodies = Utils.convertElementToJAXB(requestBodies);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
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 }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Message response = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int securityProfile = msg.getSecurityProfileType();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if((securityProfile == Message.X509_TOKEN) ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (securityProfile == Message.SAML_TOKEN) ||
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (securityProfile == Message.BEARER_TOKEN)) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response = new Message(null, generateBinarySecurityToken(msg));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response = new Message();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setCorrelationHeader(msg.getCorrelationHeader());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setWSFVersion(msg.getWSFVersion());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List responseBodies = processSOAPBodies(requestBodies, msg, response);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseBodies = Utils.convertJAXBToElement(responseBodies);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster response.setSOAPBodies(responseBodies);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(DSTUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processRequest:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "returned response: " + response.toString());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return response;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
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 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List processSOAPBodies(List requestBodies,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Message msg, Message response)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SOAPFaultException, DSTException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("DSTRequestHandler:processSOAPBodies:Init");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster List responseBodies = new ArrayList();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int size = requestBodies.size();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for(int i=0; i < size; i++) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object request = requestBodies.get(i);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster responseBodies.add(processDSTRequest(request, msg, response));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return responseBodies;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
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 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private BinarySecurityToken generateBinarySecurityToken(Message msg)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws DSTException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SecurityTokenManager manager = new SecurityTokenManager(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster msg.getToken());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster BinarySecurityToken binaryToken = manager.getX509CertificateToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster binaryToken.setWSFVersion(msg.getWSFVersion());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return binaryToken;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("DSTRequestHandler:generateBinary" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "SecurityToken: Error in generating binary security token.", e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throw new DSTException(e);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
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 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public abstract Object processDSTRequest(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object request, Message msg, Message response)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SOAPFaultException, DSTException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
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 */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster protected String getResourceID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Object resourceIDType,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String providerID,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String serviceType) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler:getResourceID:Init");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(resourceIDType == null) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(DSTUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler:getResourceID:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ResourceIDType is null");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(resourceIDType instanceof ResourceIDType) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ResourceIDType resID = (ResourceIDType)resourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return resID.getValue();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else if( resourceIDType instanceof EncryptedResourceIDType) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster EncryptedResourceIDType encID =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (EncryptedResourceIDType)resourceIDType;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Document encDoc = XMLUtils.newDocument();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DiscoUtils.getDiscoMarshaller().marshal(encID, encDoc);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(DSTUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler.getResourceID:" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "Encrypted ResourceID = " + XMLUtils.print((Node)encDoc));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster EncryptedResourceID encryptedId = new EncryptedResourceID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster encDoc.getDocumentElement(), serviceType);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String resIDStr = EncryptedResourceID.getDecryptedResourceID(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster encryptedId, providerID).getResourceID();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if(DSTUtils.debug.messageEnabled()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.message("PPRequestHandler.getResourceID: " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ResourceID Value after decryption" + resIDStr);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return resIDStr;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception ex) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("PPRequestHandler.getResourceID:error", ex);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } else {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DSTUtils.debug.error("PPRequestHandler:getResourceID:invalid" +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "resource ID type.");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /*
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.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster}