Search in sources :

Example 26 with CswException

use of org.codice.ddf.spatial.ogc.csw.catalog.common.CswException in project ddf by codice.

the class TestCswResponseExceptionMapper method testCswExceptionWithInvalidEntityType.

@Test
public void testCswExceptionWithInvalidEntityType() {
    String exceptionReportXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" + "<ows:ExceptionReport version=\"1.2.0\" xmlns:ns16=\"http://www.opengis.net/ows/1.1\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cat=\"http://www.opengis.net/cat/csw\" xmlns:gco=\"http://www.isotc211.org/2005/gco\" xmlns:gmd=\"http://www.isotc211.org/2005/gmd\" xmlns:fra=\"http://www.cnig.gouv.fr/2005/fra\" xmlns:ins=\"http://www.inspire.org\" xmlns:gmx=\"http://www.isotc211.org/2005/gmx\" xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:dct=\"http://purl.org/dc/terms/\" xmlns:ows=\"http://www.opengis.net/ows\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:gml=\"http://www.opengis.net/gml\" xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" xmlns:gmi=\"http://www.isotc211.org/2005/gmi\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n" + "    <ows:Exception exceptionCode=\"INVALID_PARAMETER_VALUE\" locator=\"QueryConstraint\">\r\n" + "        <ows:ExceptionText>Only dc:title,dct:modified,dc:subject,dct:dateSubmitted,dct:alternative,dc:format,dct:created,dc:type,dct:abstract,dc:identifier,dc:creator  are currently supported</ows:ExceptionText>\r\n" + "    </ows:Exception>\r\n" + "</ows:ExceptionReport>";
    ResponseBuilder responseBuilder = Response.ok(exceptionReportXml);
    responseBuilder.type("text/xml");
    Response response = responseBuilder.build();
    CswException cswException = new CswResponseExceptionMapper().fromResponse(response);
    assertThat(cswException.getMessage(), is("Error reading response, entity type not understood: java.lang.String"));
}
Also used : Response(javax.ws.rs.core.Response) CswException(org.codice.ddf.spatial.ogc.csw.catalog.common.CswException) Matchers.containsString(org.hamcrest.Matchers.containsString) ResponseBuilder(javax.ws.rs.core.Response.ResponseBuilder) Test(org.junit.Test)

Example 27 with CswException

use of org.codice.ddf.spatial.ogc.csw.catalog.common.CswException in project ddf by codice.

the class TestCswSource method testPropertyIsEqualToQueryContentTypeIsMappedToFormat.

/**
     * Test to verify content type mapping is configurable.
     * The CSW Source should be able to map a csw:Record field to Content Type.
     */
@Test
public void testPropertyIsEqualToQueryContentTypeIsMappedToFormat() throws JAXBException, UnsupportedQueryException, DatatypeConfigurationException, SAXException, IOException, SecurityServiceException {
    // Setup
    int pageSize = 10;
    int numRecordsReturned = 1;
    long numRecordsMatched = 1;
    String format = "myContentType";
    setupMockContextForMetacardTypeRegistrationAndUnregistration(getDefaultContentTypes());
    try {
        configureMockCsw(numRecordsReturned, numRecordsMatched, CswConstants.VERSION_2_0_2);
    } catch (CswException e) {
        fail("Could not configure Mock Remote CSW: " + e.getMessage());
    }
    QueryImpl propertyIsEqualToQuery = new QueryImpl(builder.attribute(Metacard.CONTENT_TYPE).is().text(format));
    propertyIsEqualToQuery.setPageSize(pageSize);
    AbstractCswSource cswSource = getCswSource(mockCsw, mockContext, CswConstants.CSW_FORMAT);
    cswSource.setCswUrl(URL);
    cswSource.setId(ID);
    // Perform test
    cswSource.query(new QueryRequestImpl(propertyIsEqualToQuery));
    // Verify
    ArgumentCaptor<GetRecordsType> captor = ArgumentCaptor.forClass(GetRecordsType.class);
    // a second time for the actual content type query.
    try {
        verify(mockCsw, times(2)).getRecords(captor.capture());
    } catch (CswException e) {
        fail("Could not verify Mock CSW record count " + e.getMessage());
    }
    GetRecordsType getRecordsType = captor.getValue();
    String xml = getGetRecordsTypeAsXml(getRecordsType);
    Diff xmlDiff = new Diff(getRecordsControlXml202ContentTypeMappedToFormat, xml);
    if (!xmlDiff.similar()) {
        LOGGER.error("Unexpected XML request sent");
        LOGGER.error("Expected: {}", getRecordsControlXml202ContentTypeMappedToFormat);
        LOGGER.error("Actual: {}", xml);
    }
    assertXMLEqual(getRecordsControlXml202ContentTypeMappedToFormat, xml);
}
Also used : QueryImpl(ddf.catalog.operation.impl.QueryImpl) Diff(org.custommonkey.xmlunit.Diff) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) CswException(org.codice.ddf.spatial.ogc.csw.catalog.common.CswException) GetRecordsType(net.opengis.cat.csw.v_2_0_2.GetRecordsType) Matchers.anyString(org.mockito.Matchers.anyString) Test(org.junit.Test)

Example 28 with CswException

use of org.codice.ddf.spatial.ogc.csw.catalog.common.CswException in project ddf by codice.

the class TestCswSource method testAbsoluteTemporalSearchPropertyIsBetweenQuery.

@Test
public void testAbsoluteTemporalSearchPropertyIsBetweenQuery() throws JAXBException, UnsupportedQueryException, DatatypeConfigurationException, SAXException, IOException, SecurityServiceException {
    // Setup
    String expectedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" + "<GetRecords resultType=\"results\" outputFormat=\"application/xml\" " + "    outputSchema=\"http://www.opengis.net/cat/csw/2.0.2\" startPosition=\"1\" " + "    maxRecords=\"10\" service=\"CSW\" version=\"2.0.2\" " + "    xmlns=\"http://www.opengis.net/cat/csw/2.0.2\" " + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" " + "    xmlns:ogc=\"http://www.opengis.net/ogc\">\n " + "    <Query typeNames=\"csw:Record\">\r\n" + "        <ElementSetName>full</ElementSetName>\r\n" + "        <Constraint version=\"1.1.0\">\r\n" + "            <ogc:Filter>\r\n" + "                <ogc:PropertyIsBetween>\r\n" + "                    <ogc:PropertyName>effective</ogc:PropertyName>\r\n" + "                    <ogc:LowerBoundary>\r\n" + "                        <ogc:Literal>START_DATE_TIME</ogc:Literal>\r\n" + "                    </ogc:LowerBoundary>\r\n" + "                    <ogc:UpperBoundary>\r\n" + "                        <ogc:Literal>END_DATE_TIME</ogc:Literal>\r\n" + "                    </ogc:UpperBoundary>\r\n" + "                </ogc:PropertyIsBetween>\r\n" + "            </ogc:Filter>\r\n" + "        </Constraint>\r\n" + "    </Query>\r\n" + "</GetRecords>";
    final int pageSize = 10;
    final int numRecordsReturned = 1;
    final long numRecordsMatched = 10;
    setupMockContextForMetacardTypeRegistrationAndUnregistration(getDefaultContentTypes());
    try {
        configureMockCsw(numRecordsReturned, numRecordsMatched, CswConstants.VERSION_2_0_2);
    } catch (CswException e) {
        fail("Could not configure Mock Remote CSW: " + e.getMessage());
    }
    // Create start and end date times that are before current time
    DateTime startDate = new DateTime(2013, 5, 1, 0, 0, 0, 0);
    DateTime endDate = new DateTime(2013, 12, 31, 0, 0, 0, 0);
    DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
    // Load the expected start and end date time into the excepted result
    // XML
    expectedXml = expectedXml.replace("START_DATE_TIME", fmt.print(startDate));
    expectedXml = expectedXml.replace("END_DATE_TIME", fmt.print(endDate));
    // Single absolute time range to search across
    Filter temporalFilter = builder.attribute(Metacard.EFFECTIVE).is().during().dates(startDate.toDate(), endDate.toDate());
    QueryImpl temporalQuery = new QueryImpl(temporalFilter);
    temporalQuery.setPageSize(pageSize);
    AbstractCswSource cswSource = getCswSource(mockCsw, mockContext);
    cswSource.setCswUrl(URL);
    cswSource.setId(ID);
    // Perform test
    cswSource.query(new QueryRequestImpl(temporalQuery));
    // Verify
    ArgumentCaptor<GetRecordsType> captor = ArgumentCaptor.forClass(GetRecordsType.class);
    try {
        verify(mockCsw, atLeastOnce()).getRecords(captor.capture());
    } catch (CswException e) {
        fail("Could not verify Mock CSW record count " + e.getMessage());
    }
    GetRecordsType getRecordsType = captor.getValue();
    String xml = getGetRecordsTypeAsXml(getRecordsType);
    Diff xmlDiff = new Diff(expectedXml, xml);
    if (!xmlDiff.similar()) {
        LOGGER.error("Unexpected XML request sent");
        LOGGER.error("Expected: {}", expectedXml);
        LOGGER.error("Actual: {}", xml);
    }
    assertXMLEqual(expectedXml, xml);
}
Also used : Diff(org.custommonkey.xmlunit.Diff) CswException(org.codice.ddf.spatial.ogc.csw.catalog.common.CswException) GetRecordsType(net.opengis.cat.csw.v_2_0_2.GetRecordsType) Matchers.anyString(org.mockito.Matchers.anyString) DateTime(org.joda.time.DateTime) QueryImpl(ddf.catalog.operation.impl.QueryImpl) Filter(org.opengis.filter.Filter) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) DateTimeFormatter(org.joda.time.format.DateTimeFormatter) Test(org.junit.Test)

Example 29 with CswException

use of org.codice.ddf.spatial.ogc.csw.catalog.common.CswException in project ddf by codice.

the class TestCswSource method testQueryWithSorting.

@Test
public void testQueryWithSorting() throws JAXBException, UnsupportedQueryException, DatatypeConfigurationException, SAXException, IOException, SecurityServiceException {
    final String TITLE = "title";
    // Setup
    final String searchPhrase = "*";
    final int pageSize = 1;
    final int numRecordsReturned = 1;
    final long numRecordsMatched = 1;
    setupMockContextForMetacardTypeRegistrationAndUnregistration(getDefaultContentTypes());
    try {
        configureMockCsw(numRecordsReturned, numRecordsMatched, CswConstants.VERSION_2_0_2);
    } catch (CswException e) {
        fail("Could not configure Mock Remote CSW: " + e.getMessage());
    }
    QueryImpl query = new QueryImpl(builder.attribute(Metacard.ANY_TEXT).is().like().text(searchPhrase));
    query.setPageSize(pageSize);
    SortBy sortBy = new SortByImpl(TITLE, SortOrder.DESCENDING);
    query.setSortBy(sortBy);
    AbstractCswSource cswSource = getCswSource(mockCsw, mockContext);
    cswSource.setCswUrl(URL);
    cswSource.setId(ID);
    // Perform test
    SourceResponse response = cswSource.query(new QueryRequestImpl(query));
    // Verify
    Assert.assertNotNull(response);
    assertThat(response.getResults().size(), is(numRecordsReturned));
    assertThat(response.getHits(), is(numRecordsMatched));
    ArgumentCaptor<GetRecordsType> captor = ArgumentCaptor.forClass(GetRecordsType.class);
    try {
        verify(mockCsw, atLeastOnce()).getRecords(captor.capture());
    } catch (CswException e) {
        fail("Could not verify mock CSW record count: " + e.getMessage());
    }
    GetRecordsType getRecordsType = captor.getValue();
    QueryType cswQuery = (QueryType) getRecordsType.getAbstractQuery().getValue();
    assertThat(cswQuery.getSortBy().getSortProperty().size(), is(1));
    assertThat(cswQuery.getSortBy().getSortProperty().get(0).getPropertyName().getContent().get(0).toString(), equalTo(TITLE));
    assertThat(cswQuery.getSortBy().getSortProperty().get(0).getSortOrder(), is(SortOrderType.DESC));
}
Also used : SourceResponse(ddf.catalog.operation.SourceResponse) SortBy(org.opengis.filter.sort.SortBy) CswException(org.codice.ddf.spatial.ogc.csw.catalog.common.CswException) GetRecordsType(net.opengis.cat.csw.v_2_0_2.GetRecordsType) Matchers.anyString(org.mockito.Matchers.anyString) QueryImpl(ddf.catalog.operation.impl.QueryImpl) SortByImpl(ddf.catalog.filter.impl.SortByImpl) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) QueryType(net.opengis.cat.csw.v_2_0_2.QueryType) Test(org.junit.Test)

Example 30 with CswException

use of org.codice.ddf.spatial.ogc.csw.catalog.common.CswException in project ddf by codice.

the class TestCswSource method testAbsoluteTemporalSearchTwoRanges.

@Test
public void testAbsoluteTemporalSearchTwoRanges() throws JAXBException, UnsupportedQueryException, DatatypeConfigurationException, SAXException, IOException, SecurityServiceException {
    // Setup
    String expectedXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" + "<GetRecords resultType=\"results\" outputFormat=\"application/xml\"\r\n" + "    outputSchema=\"http://www.opengis.net/cat/csw/2.0.2\" startPosition=\"1\"\r\n" + "    maxRecords=\"10\" service=\"CSW\" version=\"2.0.2\"" + "    xmlns=\"http://www.opengis.net/cat/csw/2.0.2\"" + "    xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\"" + "    xmlns:ogc=\"http://www.opengis.net/ogc\">\r\n" + "    <Query typeNames=\"csw:Record\">\r\n" + "        <ElementSetName>full</ElementSetName>\r\n" + "        <Constraint version=\"1.1.0\">\r\n" + "            <ogc:Filter>\r\n" + "                <ogc:Or>\r\n" + "                    <ogc:PropertyIsBetween>\r\n" + "                        <ogc:PropertyName>effective</ogc:PropertyName>\r\n" + "                        <ogc:LowerBoundary>\r\n" + "                            <ogc:Literal>START1_DATE_TIME</ogc:Literal>\r\n" + "                        </ogc:LowerBoundary>\r\n" + "                        <ogc:UpperBoundary>\r\n" + "                            <ogc:Literal>END1_DATE_TIME</ogc:Literal>\r\n" + "                        </ogc:UpperBoundary>\r\n" + "                    </ogc:PropertyIsBetween>\r\n" + "                    <ogc:PropertyIsBetween>\r\n" + "                        <ogc:PropertyName>effective</ogc:PropertyName>\r\n" + "                        <ogc:LowerBoundary>\r\n" + "                            <ogc:Literal>START2_DATE_TIME</ogc:Literal>\r\n" + "                        </ogc:LowerBoundary>\r\n" + "                        <ogc:UpperBoundary>\r\n" + "                            <ogc:Literal>END2_DATE_TIME</ogc:Literal>\r\n" + "                        </ogc:UpperBoundary>\r\n" + "                    </ogc:PropertyIsBetween>\r\n" + "                </ogc:Or>\r\n" + "            </ogc:Filter>\r\n" + "        </Constraint>\r\n" + "    </Query>\r\n" + "</GetRecords>\r\n";
    final int pageSize = 10;
    final int numRecordsReturned = 1;
    final long numRecordsMatched = 10;
    setupMockContextForMetacardTypeRegistrationAndUnregistration(getDefaultContentTypes());
    try {
        configureMockCsw(numRecordsReturned, numRecordsMatched, CswConstants.VERSION_2_0_2);
    } catch (CswException e) {
        fail("Could not configure Mock Remote CSW: " + e.getMessage());
    }
    DateTime startDate = new DateTime(2012, 5, 1, 0, 0, 0, 0);
    DateTime endDate = new DateTime(2012, 12, 31, 0, 0, 0, 0);
    DateTime startDate2 = new DateTime(2013, 5, 1, 0, 0, 0, 0);
    DateTime endDate2 = new DateTime(2013, 12, 31, 0, 0, 0, 0);
    DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
    // Load the expected start and end date time into the excepted result
    // XML
    expectedXml = expectedXml.replace("START1_DATE_TIME", fmt.print(startDate));
    expectedXml = expectedXml.replace("END1_DATE_TIME", fmt.print(endDate));
    expectedXml = expectedXml.replace("START2_DATE_TIME", fmt.print(startDate2));
    expectedXml = expectedXml.replace("END2_DATE_TIME", fmt.print(endDate2));
    // Single absolute time range to search across
    FilterFactory filterFactory = new FilterFactoryImpl();
    Filter temporalFilter1 = builder.attribute(Metacard.EFFECTIVE).is().during().dates(startDate.toDate(), endDate.toDate());
    Filter temporalFilter2 = builder.attribute(Metacard.EFFECTIVE).is().during().dates(startDate2.toDate(), endDate2.toDate());
    Filter temporalFilter = filterFactory.or(temporalFilter1, temporalFilter2);
    QueryImpl temporalQuery = new QueryImpl(temporalFilter);
    temporalQuery.setPageSize(pageSize);
    AbstractCswSource cswSource = getCswSource(mockCsw, mockContext);
    cswSource.setCswUrl(URL);
    cswSource.setId(ID);
    // Perform test
    cswSource.query(new QueryRequestImpl(temporalQuery));
    // Verify
    ArgumentCaptor<GetRecordsType> captor = ArgumentCaptor.forClass(GetRecordsType.class);
    try {
        verify(mockCsw, atLeastOnce()).getRecords(captor.capture());
    } catch (CswException e) {
        fail("Could not verify Mock CSW record count " + e.getMessage());
    }
    GetRecordsType getRecordsType = captor.getValue();
    String xml = getGetRecordsTypeAsXml(getRecordsType);
    Diff xmlDiff = new Diff(expectedXml, xml);
    if (!xmlDiff.similar()) {
        LOGGER.error("Unexpected XML request sent");
        LOGGER.error("Expected: {}", expectedXml);
        LOGGER.error("Actual: {}", xml);
    }
    assertXMLEqual(expectedXml, xml);
}
Also used : Diff(org.custommonkey.xmlunit.Diff) CswException(org.codice.ddf.spatial.ogc.csw.catalog.common.CswException) GetRecordsType(net.opengis.cat.csw.v_2_0_2.GetRecordsType) Matchers.anyString(org.mockito.Matchers.anyString) DateTime(org.joda.time.DateTime) FilterFactory(org.opengis.filter.FilterFactory) QueryImpl(ddf.catalog.operation.impl.QueryImpl) Filter(org.opengis.filter.Filter) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) FilterFactoryImpl(org.geotools.filter.FilterFactoryImpl) DateTimeFormatter(org.joda.time.format.DateTimeFormatter) Test(org.junit.Test)

Aggregations

CswException (org.codice.ddf.spatial.ogc.csw.catalog.common.CswException)84 Test (org.junit.Test)55 CapabilitiesType (net.opengis.cat.csw.v_2_0_2.CapabilitiesType)19 GetCapabilitiesType (net.opengis.cat.csw.v_2_0_2.GetCapabilitiesType)19 GetRecordsType (net.opengis.cat.csw.v_2_0_2.GetRecordsType)17 QueryImpl (ddf.catalog.operation.impl.QueryImpl)13 QueryRequestImpl (ddf.catalog.operation.impl.QueryRequestImpl)13 DescribeRecordResponseType (net.opengis.cat.csw.v_2_0_2.DescribeRecordResponseType)13 Matchers.anyString (org.mockito.Matchers.anyString)13 QueryType (net.opengis.cat.csw.v_2_0_2.QueryType)11 UnsupportedQueryException (ddf.catalog.source.UnsupportedQueryException)10 ArrayList (java.util.ArrayList)10 SchemaComponentType (net.opengis.cat.csw.v_2_0_2.SchemaComponentType)10 GetCapabilitiesRequest (org.codice.ddf.spatial.ogc.csw.catalog.common.GetCapabilitiesRequest)10 SourceResponse (ddf.catalog.operation.SourceResponse)9 IOException (java.io.IOException)9 DescribeRecordRequest (org.codice.ddf.spatial.ogc.csw.catalog.common.DescribeRecordRequest)9 CswRecordCollection (org.codice.ddf.spatial.ogc.csw.catalog.common.CswRecordCollection)7 Filter (org.opengis.filter.Filter)7 JAXBException (javax.xml.bind.JAXBException)6