Example usage for org.w3c.dom Element getNamespaceURI

List of usage examples for org.w3c.dom Element getNamespaceURI

Introduction

In this page you can find the example usage for org.w3c.dom Element getNamespaceURI.

Prototype

public String getNamespaceURI();

Source Link

Document

The namespace URI of this node, or null if it is unspecified (see ).

Usage

From source file:org.mule.config.spring.MuleHierarchicalBeanDefinitionParserDelegate.java

public BeanDefinition parseCustomElement(Element element, BeanDefinition parent) {
    if (logger.isDebugEnabled()) {
        logger.debug("parsing: " + SpringXMLUtils.elementToString(element));
    }//w  w  w . j a  v a  2s .  c o  m
    if (SpringXMLUtils.isBeansNamespace(element)) {
        return handleSpringElements(element, parent);
    } else {
        String namespaceUri = element.getNamespaceURI();
        NamespaceHandler handler = getReaderContext().getNamespaceHandlerResolver().resolve(namespaceUri);
        if (handler == null) {
            getReaderContext().error("Unable to locate NamespaceHandler for namespace [" + namespaceUri + "]",
                    element);
            return null;
        }

        boolean noRecurse = false;
        boolean forceRecurse = false;
        BeanDefinition finalChild;

        do {
            ParserContext parserContext = new ParserContext(getReaderContext(), this, parent);
            finalChild = handler.parse(element, parserContext);
            registerBean(element, finalChild);
            noRecurse = noRecurse || testFlag(finalChild, MULE_NO_RECURSE);
            forceRecurse = forceRecurse || testFlag(finalChild, MULE_FORCE_RECURSE);
        } while (null != finalChild && testFlag(finalChild, MULE_REPEAT_PARSE));

        // Only iterate and parse child mule name-spaced elements. Spring does not do
        // hierarchical parsing by default so we need to maintain this behavior
        // for non-mule elements to ensure that we don't break the parsing of any
        // other custom name-spaces e.g spring-jee.

        // We also avoid parsing inside elements that have constructed a factory bean
        // because that means we're dealing with (something like) ChildMapDefinitionParser,
        // which handles iteration internally (this is a hack needed because Spring doesn't
        // expose the DP for "<spring:entry>" elements directly).

        boolean isRecurse;
        if (noRecurse) {
            // no recursion takes precedence, as recursion is set by default
            isRecurse = false;
        } else {
            if (forceRecurse) {
                isRecurse = true;
            } else {
                // default behaviour if no control specified
                isRecurse = SpringXMLUtils.isMuleNamespace(element);
            }
        }

        if (isRecurse) {
            NodeList list = element.getChildNodes();
            for (int i = 0; i < list.getLength(); i++) {
                if (list.item(i) instanceof Element) {
                    parseCustomElement((Element) list.item(i), finalChild);
                }
            }
        }

        // If a parser requests post-processing we call again after children called

        if (testFlag(finalChild, MULE_POST_CHILDREN)) {
            ParserContext parserContext = new ParserContext(getReaderContext(), this, parent);
            finalChild = handler.parse(element, parserContext);
        }

        return finalChild;
    }
}

From source file:org.mule.config.spring.util.SpringXMLUtils.java

public static boolean isMuleNamespace(Element element) {
    String ns = element.getNamespaceURI();
    return ns != null && ns.startsWith(MULE_NAMESPACE_PREFIX);
}

From source file:org.mule.config.spring.util.SpringXMLUtils.java

public static boolean isBeansNamespace(Element element) {
    String ns = element.getNamespaceURI();
    return ns != null && ns.equals(BeanDefinitionParserDelegate.BEANS_NAMESPACE_URI);
}

From source file:org.mule.module.extension.internal.config.ExtensionsNamespaceHandler.java

/**
 * Registers parsers for the given element, provided that an extension can be found which
 * responds to that namespace//from  w w  w.j av  a2 s. co  m
 */
@Override
public BeanDefinition parse(Element element, ParserContext parserContext) {
    String namespace = element.getNamespaceURI();
    if (!isHandled(namespace)) {
        registerExtensionParsers(namespace, element, parserContext);
    }

    return super.parse(element, parserContext);
}

From source file:org.obm.caldav.server.resultBuilder.PropertyListBuilder.java

public Document build(CalDavToken t, DavRequest req, List<DavComponent> comps,
        Set<PropfindPropertyHandler> toLoad, Set<Element> notUsed, IBackend proxy) {
    try {//from   www  .  ja v  a  2 s. c  o  m

        Document ret = createMultiStatusDocument();
        Element r = ret.getDocumentElement();
        for (DavComponent comp : comps) {
            Element response = DOMUtils.createElement(r, "D:response");
            DOMUtils.createElementAndText(response, "D:href", comp.getURL());

            if (toLoad.size() > 0) {
                Element pStat = DOMUtils.createElement(response, "D:propstat");
                Element p = DOMUtils.createElement(pStat, "D:prop");
                for (PropfindPropertyHandler dph : toLoad) {
                    dph.appendPropertyValue(p, t, req, proxy, comp);
                }
                DOMUtils.createElementAndText(pStat, "D:status", "HTTP/1.1 200 OK");
            }

            if (notUsed.size() > 0) {
                Element pStatNotUsed = DOMUtils.createElement(response, "D:propstat");
                Element pNotUsed = DOMUtils.createElement(pStatNotUsed, "D:prop");
                for (Element enu : notUsed) {
                    DOMUtils.createElement(pNotUsed, enu.getNamespaceURI(), enu.getTagName());
                }
                DOMUtils.createElementAndText(pStatNotUsed, "D:status", "HTTP/1.1 404 Not Found");
            }
        }

        return ret;
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        return null;
    }

}

From source file:org.ojbc.bundles.adapters.staticmock.StaticMockQuery.java

/**
 * Perform a query (retrieving instances that match a (usually unique) identifier.
 * /*from   w  w  w .ja va  2s. com*/
 * @param queryRequestMessage
 *            the request message, assumed to be valid against some Query Service IEPD
 * @param context
 *            an arbitrary object that callers can pass in to provide some context for the query; this will be specific to each type of query
 * @return the matching document(s)
 * @throws Exception
 */
public List<IdentifiableDocumentWrapper> queryDocuments(Document queryRequestMessage, Object context)
        throws Exception {

    Element rootElement = queryRequestMessage.getDocumentElement();

    String documentId = null;
    String systemId = null;

    String rootElementNamespace = rootElement.getNamespaceURI();
    String rootElementLocalName = rootElement.getLocalName();

    if (OjbcNamespaceContext.NS_INCIDENT_QUERY_REQUEST_DOC.equals(rootElementNamespace)
            && "IncidentIdentifierIncidentReportRequest".equals(rootElementLocalName)) {
        Element systemElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage,
                "iqr-doc:IncidentIdentifierIncidentReportRequest/iqr:SourceSystemNameText");
        if (systemElement == null) {
            throw new IllegalArgumentException(
                    "Invalid query request message:  must specify the system to query.");
        }
        Element systemIdElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage,
                "iqr-doc:IncidentIdentifierIncidentReportRequest/iqr:Incident/nc:ActivityIdentification/nc:IdentificationID");
        documentId = systemIdElement.getTextContent();
        systemId = systemElement.getTextContent();
    } else if (OjbcNamespaceContext.NS_FIREARM_REGISTRATION_QUERY_REQUEST_DOC.equals(rootElementNamespace)
            && "PersonFirearmRegistrationRequest".equals(rootElementLocalName)) {
        String xPath = OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_DOC
                + ":PersonFirearmRegistrationRequest/"
                + OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_EXT
                + ":PersonFirearmRegistrationIdentification/" + OjbcNamespaceContext.NS_PREFIX_NC
                + ":IdentificationSourceText";
        Element systemElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage, xPath);
        if (systemElement == null) {
            throw new IllegalArgumentException(
                    "Invalid query request message:  must specify the system to query.");
        }
        Element systemIdElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage,
                OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_DOC
                        + ":PersonFirearmRegistrationRequest/"
                        + OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_EXT
                        + ":PersonFirearmRegistrationIdentification/" + OjbcNamespaceContext.NS_PREFIX_NC
                        + ":IdentificationID");
        documentId = systemIdElement.getTextContent();
        systemId = systemElement.getTextContent();
    } else if (OjbcNamespaceContext.NS_FIREARM_REGISTRATION_QUERY_REQUEST_DOC.equals(rootElementNamespace)
            && "FirearmRegistrationRequest".equals(rootElementLocalName)) {
        String xPath = OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_DOC
                + ":FirearmRegistrationRequest/"
                + OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_EXT
                + ":FirearmRegistrationIdentification/" + OjbcNamespaceContext.NS_PREFIX_NC
                + ":IdentificationSourceText";
        Element systemElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage, xPath);
        if (systemElement == null) {
            throw new IllegalArgumentException(
                    "Invalid query request message:  must specify the system to query.");
        }
        Element systemIdElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage,
                OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_DOC
                        + ":FirearmRegistrationRequest/"
                        + OjbcNamespaceContext.NS_PREFIX_FIREARM_REGISTRATION_QUERY_REQUEST_EXT
                        + ":FirearmRegistrationIdentification/" + OjbcNamespaceContext.NS_PREFIX_NC
                        + ":IdentificationID");
        documentId = systemIdElement.getTextContent();
        systemId = systemElement.getTextContent();
    } else if (OjbcNamespaceContext.NS_JUVENILE_HISTORY_QUERY_REQUEST_DOC.equals(rootElementNamespace)
            && "JuvenileHistoryQuery".equals(rootElementLocalName)) {
        String xPath = OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_QUERY_REQUEST_DOC
                + ":JuvenileHistoryQuery/" + OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_EXT
                + ":JuvenileHistoryQueryCriteria/" + OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_EXT
                + ":JuvenileInformationRecordID/" + OjbcNamespaceContext.NS_PREFIX_NC_30
                + ":IdentificationSourceText";
        Element systemElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage, xPath);
        if (systemElement == null) {
            throw new IllegalArgumentException(
                    "Invalid query request message:  must specify the system to query.");
        }
        Element systemIdElement = (Element) XmlUtils.xPathNodeSearch(queryRequestMessage,
                OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_QUERY_REQUEST_DOC + ":JuvenileHistoryQuery/"
                        + OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_EXT + ":JuvenileHistoryQueryCriteria/"
                        + OjbcNamespaceContext.NS_PREFIX_JUVENILE_HISTORY_EXT + ":JuvenileInformationRecordID/"
                        + OjbcNamespaceContext.NS_PREFIX_NC_30 + ":IdentificationID");
        documentId = systemIdElement.getTextContent();
        systemId = systemElement.getTextContent();
    } else {
        Element systemElement = (Element) XmlUtils.xPathNodeSearch(rootElement,
                "pqr:PersonRecordRequestIdentification/nc:IdentificationSourceText");
        if (systemElement == null) {
            throw new IllegalArgumentException(
                    "Invalid query request message:  must specify the system to query.");
        }
        Element systemIdElement = (Element) XmlUtils.xPathNodeSearch(rootElement,
                "pqr:PersonRecordRequestIdentification/nc:IdentificationID");
        documentId = systemIdElement.getTextContent();
        systemId = systemElement.getTextContent();
    }

    if (CRIMINAL_HISTORY_MOCK_ADAPTER_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryCriminalHistoryDocuments(documentId);

    } else if (WARRANT_MOCK_ADAPTER_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryWarrantDocuments(documentId);

    } else if (INCIDENT_MOCK_ADAPTER_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryIncidentDocuments(documentId);

    } else if (FIREARM_MOCK_ADAPTER_QUERY_BY_PERSON_SYSTEM_ID.equals(systemId)) {
        return queryPersonFirearmRegistrationDocuments(documentId);

    } else if (FIREARM_MOCK_ADAPTER_QUERY_BY_FIREARM_SYSTEM_ID.equals(systemId)) {
        return queryPersonFirearmRegistrationDocuments(documentId);

    } else if (JUVENILE_HISTORY_MOCK_ADAPTER_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryJuvenileHistoryDocuments(documentId, context);

    } else if (CUSTODY_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryCustodyDocuments(documentId);

    } else if (COURT_CASE_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryCourtCaseDocuments(documentId);

    } else if (VEHICLE_CRASH_QUERY_SYSTEM_ID.equals(systemId)) {
        return queryVehicleCrashDocuments(documentId);

    } else {
        throw new IllegalArgumentException("Unknown system name: " + systemId);
    }

}

From source file:org.ojbc.bundles.adapters.staticmock.StaticMockQuery.java

Document searchDocuments(Document searchRequestMessage, DateTime baseDate, Object context) throws Exception {

    Element rootElement = searchRequestMessage.getDocumentElement();
    String rootNamespaceURI = rootElement.getNamespaceURI();
    String rootLocalName = rootElement.getLocalName();

    if (OjbcNamespaceContext.NS_PERSON_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "PersonSearchRequest".equals(rootLocalName)) {
        return personSearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_CUSTODY_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "CustodySearchRequest".equals(rootLocalName)) {
        return custodySearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_COURT_CASE_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "CourtCaseSearchRequest".equals(rootLocalName)) {
        return courtCaseSearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "IncidentPersonSearchRequest".equals(rootLocalName)) {
        return incidentPersonSearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_FIREARM_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "FirearmSearchRequest".equals(rootLocalName)) {
        return firearmSearchDocuments(searchRequestMessage);

    } else if (OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "IncidentSearchRequest".equals(rootLocalName)) {
        return incidentSearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "IncidentVehicleSearchRequest".equals(rootLocalName)) {
        return incidentVehicleSearchDocuments(searchRequestMessage, baseDate);

    } else if (OjbcNamespaceContext.NS_VEHICLE_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "VehicleSearchRequest".equals(rootLocalName)) {
        return vehicleSearchDocuments(searchRequestMessage, baseDate);
    }/*w  w w . j  a v a 2 s  . c  o m*/
    throw new IllegalArgumentException("Invalid message: {" + rootNamespaceURI + "}" + rootLocalName);
}

From source file:org.ojbc.bundles.adapters.staticmock.StaticMockQuery.java

List<IdentifiableDocumentWrapper> incidentVehicleSearchDocumentsAsList(
        Document incidentVehicleSearchRequestMessage, DateTime baseDate) throws Exception {

    Element rootElement = incidentVehicleSearchRequestMessage.getDocumentElement();
    String rootNamespaceURI = rootElement.getNamespaceURI();
    String rootLocalName = rootElement.getLocalName();
    if (!(OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "IncidentVehicleSearchRequest".equals(rootLocalName))) {
        throw new IllegalArgumentException(
                "Invalid message, must have {" + OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC
                        + "}IncidentVehicleSearchRequest as the root " + "instead of {" + rootNamespaceURI + "}"
                        + rootLocalName);
    }//ww  w .  j a v  a2 s. c  o  m

    NodeList systemElements = XmlUtils.xPathNodeListSearch(rootElement, "isr:SourceSystemNameText");
    int systemElementCount;
    if (systemElements == null || (systemElementCount = systemElements.getLength()) == 0) {
        throw new IllegalArgumentException(
                "Invalid query request message:  must specify at least one system to query.");
    }

    Element vehicleIdElement = (Element) XmlUtils.xPathNodeSearch(incidentVehicleSearchRequestMessage,
            "/isr-doc:IncidentVehicleSearchRequest/ivsr:Vehicle/ivsr:VehicleSystemIdentification/nc:IdentificationID");

    List<IdentifiableDocumentWrapper> ret = new ArrayList<IdentifiableDocumentWrapper>();

    if (vehicleIdElement != null) {

        String id = vehicleIdElement.getTextContent();

        for (int i = 0; i < systemElementCount; i++) {
            for (IdentifiableDocumentWrapper dw : incidentDataSource.getDocuments()) {

                Document d = dw.getDocument();
                Element documentVehicleIdElement = (Element) XmlUtils.xPathNodeSearch(d,
                        "/ir:IncidentReport/lexspd:doPublish/lexs:PublishMessageContainer/lexs:PublishMessage/lexs:DataItemPackage/lexs:Digest/lexsdigest:EntityVehicle/nc:Vehicle/nc:VehicleIdentification/nc:IdentificationID");
                String documentPersonId = documentVehicleIdElement.getTextContent();
                if (id.equals(documentPersonId)) {
                    ret.add(dw);
                }
            }
        }

    }

    return ret;

}

From source file:org.ojbc.bundles.adapters.staticmock.StaticMockQuery.java

List<IdentifiableDocumentWrapper> vehicleSearchDocumentsAsList(Document vehicleSearchRequestMessage,
        DateTime baseDate) throws Exception {

    Element rootElement = vehicleSearchRequestMessage.getDocumentElement();
    String rootNamespaceURI = rootElement.getNamespaceURI();
    String rootLocalName = rootElement.getLocalName();
    if (!(OjbcNamespaceContext.NS_VEHICLE_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "VehicleSearchRequest".equals(rootLocalName))) {
        throw new IllegalArgumentException("Invalid message, must have {"
                + OjbcNamespaceContext.NS_VEHICLE_SEARCH_REQUEST_DOC + "}VehicleSearchRequest as the root "
                + "instead of {" + rootNamespaceURI + "}" + rootLocalName);
    }// ww w  .j a  v a  2 s  . c  o m

    NodeList systemElements = XmlUtils.xPathNodeListSearch(rootElement, "vsr:SourceSystemNameText");
    if (systemElements == null || systemElements.getLength() != 1) {
        throw new IllegalArgumentException(
                "Invalid query request message:  must specify exactly one system to query.");
    }
    Node systemElementNode = systemElements.item(0);
    String systemId = systemElementNode.getTextContent();
    if (!INCIDENT_MOCK_ADAPTER_VEHICLE_SEARCH_SYSTEM_ID.equals(systemId)) {
        throw new IllegalArgumentException(
                "Vehicle searches only allowed against static mock incident store.  Illegal system: "
                        + systemId);
    }

    List<IdentifiableDocumentWrapper> ret = new ArrayList<IdentifiableDocumentWrapper>();

    String searchXPath = buildIncidentSearchXPathFromVehicleSearchMessage(vehicleSearchRequestMessage);

    String modelYearLowerString = XmlUtils.xPathStringSearch(vehicleSearchRequestMessage,
            "/vsr-doc:VehicleSearchRequest/vsr:Vehicle/vsr:VehicleYearRange/nc:StartDate/nc:Year");
    String modelYearUpperString = XmlUtils.xPathStringSearch(vehicleSearchRequestMessage,
            "/vsr-doc:VehicleSearchRequest/vsr:Vehicle/vsr:VehicleYearRange/nc:EndDate/nc:Year");

    if (searchXPath == null && isMissing(modelYearLowerString) && isMissing(modelYearUpperString)) {
        return ret;
    }

    for (IdentifiableDocumentWrapper dw : incidentDataSource.getDocuments()) {

        Document d = dw.getDocument();
        LOG.debug("Searching document " + dw.getId());

        boolean match = (searchXPath == null || XmlUtils.xPathNodeSearch(d, searchXPath) != null);
        LOG.debug("Match=" + match + " based on xpath eval");

        if (match && (!(isMissing(modelYearLowerString) && isMissing(modelYearUpperString)))) {

            Integer modelYearLower = Integer.parseInt(modelYearLowerString);
            Integer modelYearUpper = Integer.parseInt(modelYearUpperString);

            String incidentVehicleModelYearString = XmlUtils.xPathStringSearch(d,
                    "/ir:IncidentReport/lexspd:doPublish/lexs:PublishMessageContainer/lexs:PublishMessage/lexs:DataItemPackage/lexs:Digest/lexsdigest:EntityVehicle/nc:Vehicle/nc:ItemModelYearDate");
            Integer incidentVehicleModelYear = null;

            try {
                incidentVehicleModelYear = Integer.parseInt(incidentVehicleModelYearString);
            } catch (NumberFormatException nfe) {
                nfe.printStackTrace();
                LOG.warn("Unparsable vehicle model year: " + incidentVehicleModelYearString);
            }

            if (incidentVehicleModelYear == null) {
                match = false;
            } else {
                if (modelYearLower != null) {
                    match = match && incidentVehicleModelYear >= modelYearLower;
                }
                if (modelYearUpper != null) {
                    match = match && incidentVehicleModelYear <= modelYearUpper;
                }
            }

        }

        if (match) {
            ret.add(dw);
        }

    }

    return ret;

}

From source file:org.ojbc.bundles.adapters.staticmock.StaticMockQuery.java

List<IdentifiableDocumentWrapper> incidentSearchDocumentsAsList(Document incidentSearchRequestMessage,
        DateTime baseDate) throws Exception {

    Element rootElement = incidentSearchRequestMessage.getDocumentElement();
    String rootNamespaceURI = rootElement.getNamespaceURI();
    String rootLocalName = rootElement.getLocalName();
    if (!(OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC.equals(rootNamespaceURI)
            && "IncidentSearchRequest".equals(rootLocalName))) {
        throw new IllegalArgumentException("Invalid message, must have {"
                + OjbcNamespaceContext.NS_INCIDENT_SEARCH_REQUEST_DOC + "}IncidentSearchRequest as the root "
                + "instead of {" + rootNamespaceURI + "}" + rootLocalName);
    }/*from   w w w  .  j a  v a  2 s  .c  o m*/

    NodeList systemElements = XmlUtils.xPathNodeListSearch(rootElement, "isr:SourceSystemNameText");
    if (systemElements == null || systemElements.getLength() == 0) {
        throw new IllegalArgumentException(
                "Invalid query request message:  must specify at least one system to query.");
    }

    List<IdentifiableDocumentWrapper> ret = new ArrayList<IdentifiableDocumentWrapper>();

    String searchXPath = buildIncidentSearchXPathFromIncidentSearchMessage(incidentSearchRequestMessage);

    String dateLowerString = XmlUtils.xPathStringSearch(incidentSearchRequestMessage,
            "/isr-doc:IncidentSearchRequest/isr:Incident/nc:ActivityDateRange/nc:StartDate/nc:DateTime");
    String dateUpperString = XmlUtils.xPathStringSearch(incidentSearchRequestMessage,
            "/isr-doc:IncidentSearchRequest/isr:Incident/nc:ActivityDateRange/nc:EndDate/nc:DateTime");

    LOG.debug("dateLowerString=" + dateLowerString);
    LOG.debug("dateUpperString=" + dateUpperString);

    if (searchXPath == null && isMissing(dateLowerString) && isMissing(dateUpperString)) {
        return ret;
    }

    DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeParser();

    for (IdentifiableDocumentWrapper dw : incidentDataSource.getDocuments()) {

        Document d = dw.getDocument();
        LOG.debug("Searching document " + dw.getId());

        boolean match = (searchXPath == null || XmlUtils.xPathNodeSearch(d, searchXPath) != null);
        LOG.debug("Match=" + match + " based on xpath eval");

        if (match && (!(isMissing(dateLowerString) && isMissing(dateUpperString)))) {

            LOG.debug("In date evaluation");

            String incidentStartDateString = XmlUtils.xPathStringSearch(d,
                    "/ir:IncidentReport/lexspd:doPublish/lexs:PublishMessageContainer/lexs:PublishMessage/lexs:DataItemPackage/lexs:Digest/lexsdigest:EntityActivity/nc:Activity[nc:ActivityCategoryText='Incident']/nc:ActivityDateRange/nc:StartDate/nc:DateTime");
            String incidentEndDateString = XmlUtils.xPathStringSearch(d,
                    "/ir:IncidentReport/lexspd:doPublish/lexs:PublishMessageContainer/lexs:PublishMessage/lexs:DataItemPackage/lexs:Digest/lexsdigest:EntityActivity/nc:Activity[nc:ActivityCategoryText='Incident']/nc:ActivityDateRange/nc:EndDate/nc:DateTime");

            if (isMissing(incidentStartDateString) && isMissing(incidentEndDateString)) {
                match = false;
            } else {
                DateTime incidentStartDateTime = null;
                DateTime incidentEndDateTime = null;
                try {
                    incidentStartDateTime = dateTimeFormatter.parseDateTime(incidentStartDateString);
                    incidentEndDateTime = dateTimeFormatter.parseDateTime(incidentEndDateString);
                } catch (Exception e) {
                    e.printStackTrace();
                    LOG.warn("Unable to parse date (either " + incidentStartDateString + " or "
                            + incidentEndDateString
                            + "). Note that null dates are ok...just means it's not part of the incident");
                }
                LOG.debug("incidentStartDateTime=" + incidentStartDateTime);
                LOG.debug("incidentEndDateTime=" + incidentEndDateTime);
                if (incidentStartDateTime == null && incidentEndDateTime == null) {
                    match = false;
                } else {
                    if (!isMissing(dateLowerString)) {
                        DateTime lowerDateTime = dateTimeFormatter.parseDateTime(dateLowerString);
                        if (incidentEndDateTime != null && incidentEndDateTime.isBefore(lowerDateTime)) {
                            match = false;
                        } else if (incidentEndDateTime == null
                                && incidentStartDateTime.isBefore(lowerDateTime)) {
                            match = false;
                        }
                    }
                    if (!isMissing(dateUpperString)) {
                        DateTime upperDateTime = dateTimeFormatter.parseDateTime(dateUpperString);
                        if (incidentStartDateTime != null && incidentStartDateTime.isAfter(upperDateTime)) {
                            match = false;
                        } else if (incidentStartDateTime == null
                                && incidentEndDateTime.isBefore(upperDateTime)) {
                            match = false;
                        }
                    }
                }
            }

        }

        if (match) {
            ret.add(dw);
        }

    }

    return ret;

}