Search in sources :

Example 1 with DecodingException

use of org.n52.svalbard.decode.exception.DecodingException in project arctic-sea by 52North.

the class JSONBinding method parseRequest.

private OwsServiceRequest parseRequest(HttpServletRequest request) throws OwsExceptionReport {
    try {
        JsonNode json = Json.loadReader(request.getReader());
        if (LOG.isDebugEnabled()) {
            LOG.debug("JSON-REQUEST: {}", Json.print(json));
        }
        OperationDecoderKey key = new OperationDecoderKey(json.path(SERVICE).textValue(), json.path(VERSION).textValue(), json.path(REQUEST).textValue(), MediaTypes.APPLICATION_JSON);
        Decoder<OwsServiceRequest, JsonNode> decoder = getDecoder(key);
        if (decoder == null) {
            NoDecoderForKeyException cause = new NoDecoderForKeyException(key);
            throw new NoApplicableCodeException().withMessage(cause.getMessage()).causedBy(cause);
        }
        OwsServiceRequest sosRequest;
        try {
            sosRequest = decoder.decode(json);
        } catch (OwsDecodingException ex) {
            throw ex.getCause();
        } catch (DecodingException ex) {
            throw new NoApplicableCodeException().withMessage(ex.getMessage()).causedBy(ex);
        }
        sosRequest.setRequestContext(getRequestContext(request));
        return sosRequest;
    } catch (IOException ioe) {
        throw new NoApplicableCodeException().causedBy(ioe).withMessage("Error while reading request! Message: %s", ioe.getMessage());
    }
}
Also used : NoDecoderForKeyException(org.n52.svalbard.decode.exception.NoDecoderForKeyException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) NoApplicableCodeException(org.n52.shetland.ogc.ows.exception.NoApplicableCodeException) JsonNode(com.fasterxml.jackson.databind.JsonNode) DecodingException(org.n52.svalbard.decode.exception.DecodingException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) OwsServiceRequest(org.n52.shetland.ogc.ows.service.OwsServiceRequest) IOException(java.io.IOException) OperationDecoderKey(org.n52.svalbard.decode.OperationDecoderKey)

Example 2 with DecodingException

use of org.n52.svalbard.decode.exception.DecodingException in project arctic-sea by 52North.

the class KvpBinding method parseRequest.

protected OwsServiceRequest parseRequest(HttpServletRequest req) throws OwsExceptionReport {
    if (req.getParameterMap() == null || req.getParameterMap().isEmpty()) {
        throw new MissingRequestParameterException();
    }
    Map<String, String> parameters = Streams.stream(req.getParameterNames()).collect(toMap(name -> name.replace("amp;", "").toLowerCase(Locale.ROOT), req::getParameter));
    String service = parameters.get(RequestParams.service.name());
    String version = parameters.get(RequestParams.version.name());
    String operation = parameters.get(RequestParams.request.name());
    if (Strings.isNullOrEmpty(service)) {
        throw new MissingServiceParameterException();
    }
    if (!isServiceSupported(service)) {
        throw new InvalidServiceParameterException(service);
    }
    if (Strings.isNullOrEmpty(operation)) {
        throw new MissingRequestParameterException();
    }
    if (version != null && !isVersionSupported(service, version)) {
        throw new VersionNotSupportedException();
    }
    Decoder<OwsServiceRequest, Map<String, String>> decoder = getDecoder(new OperationDecoderKey(service, version, operation, MediaTypes.APPLICATION_KVP));
    if (decoder == null) {
        throw new OperationNotSupportedException(operation);
    }
    OwsServiceRequest request;
    try {
        request = decoder.decode(parameters);
    } catch (OwsDecodingException ex) {
        throw ex.getCause();
    } catch (DecodingException ex) {
        throw toOwsExceptionReport(ex);
    }
    if (this.includeOriginalRequest) {
        request.setOriginalRequest(String.join("?", req.getRequestURL(), req.getQueryString()));
    }
    return request;
}
Also used : MediaTypes(org.n52.janmayen.http.MediaTypes) InvalidParameterValueException(org.n52.shetland.ogc.ows.exception.InvalidParameterValueException) Decoder(org.n52.svalbard.decode.Decoder) HTTPException(org.n52.iceland.exception.HTTPException) LoggerFactory(org.slf4j.LoggerFactory) MediaType(org.n52.janmayen.http.MediaType) SosConstants(org.n52.shetland.ogc.sos.SosConstants) LocationHintException(org.n52.janmayen.exception.LocationHintException) Strings(com.google.common.base.Strings) HttpServletRequest(javax.servlet.http.HttpServletRequest) Collectors.toMap(java.util.stream.Collectors.toMap) Locale(java.util.Locale) Map(java.util.Map) Collector(java.util.stream.Collector) OwsServiceResponse(org.n52.shetland.ogc.ows.service.OwsServiceResponse) MediaTypeBindingKey(org.n52.iceland.binding.MediaTypeBindingKey) SimpleBinding(org.n52.iceland.binding.SimpleBinding) OwsOperationKey(org.n52.shetland.ogc.ows.service.OwsOperationKey) Sos2Constants(org.n52.shetland.ogc.sos.Sos2Constants) CompositeException(org.n52.janmayen.exception.CompositeException) DecodingException(org.n52.svalbard.decode.exception.DecodingException) Logger(org.slf4j.Logger) HttpServletResponse(javax.servlet.http.HttpServletResponse) OperationNotSupportedException(org.n52.shetland.ogc.ows.exception.OperationNotSupportedException) Set(java.util.Set) Setting(org.n52.faroe.annotation.Setting) IOException(java.io.IOException) MiscSettings(org.n52.iceland.service.MiscSettings) BindingKey(org.n52.iceland.binding.BindingKey) OwsExceptionReport(org.n52.shetland.ogc.ows.exception.OwsExceptionReport) MissingRequestParameterException(org.n52.iceland.exception.ows.concrete.MissingRequestParameterException) OwsServiceRequest(org.n52.shetland.ogc.ows.service.OwsServiceRequest) InvalidServiceParameterException(org.n52.iceland.exception.ows.concrete.InvalidServiceParameterException) ConformanceClasses(org.n52.svalbard.ConformanceClasses) OperationDecoderKey(org.n52.svalbard.decode.OperationDecoderKey) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) Streams(org.n52.janmayen.stream.Streams) VersionNotSupportedException(org.n52.iceland.exception.ows.concrete.VersionNotSupportedException) Configurable(org.n52.faroe.annotation.Configurable) CompositeOwsException(org.n52.shetland.ogc.ows.exception.CompositeOwsException) Collections(java.util.Collections) RequestParams(org.n52.shetland.ogc.ows.OWSConstants.RequestParams) MissingServiceParameterException(org.n52.shetland.ogc.ows.exception.MissingServiceParameterException) OperationNotSupportedException(org.n52.shetland.ogc.ows.exception.OperationNotSupportedException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) InvalidServiceParameterException(org.n52.iceland.exception.ows.concrete.InvalidServiceParameterException) MissingRequestParameterException(org.n52.iceland.exception.ows.concrete.MissingRequestParameterException) DecodingException(org.n52.svalbard.decode.exception.DecodingException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) VersionNotSupportedException(org.n52.iceland.exception.ows.concrete.VersionNotSupportedException) MissingServiceParameterException(org.n52.shetland.ogc.ows.exception.MissingServiceParameterException) OwsServiceRequest(org.n52.shetland.ogc.ows.service.OwsServiceRequest) Collectors.toMap(java.util.stream.Collectors.toMap) Map(java.util.Map) OperationDecoderKey(org.n52.svalbard.decode.OperationDecoderKey)

Example 3 with DecodingException

use of org.n52.svalbard.decode.exception.DecodingException in project arctic-sea by 52North.

the class AbstractXmlBinding method decode.

protected T decode(HttpServletRequest request) throws OwsExceptionReport {
    String characterEncoding = getCharacterEncoding(request);
    String xmlString = xmlToString(request, characterEncoding);
    LOGGER.debug("XML-REQUEST: {}", xmlString);
    DecoderKey key = getDecoderKey(xmlString, characterEncoding);
    LOGGER.trace("Found decoder key: {}", key);
    Decoder<T, String> decoder = getDecoder(key);
    if (decoder == null) {
        // if this a GetCapabilities request, then the service is not supported
        String opOrType = null;
        Optional<String> service = Optional.empty();
        if (key instanceof XmlNamespaceOperationDecoderKey) {
            XmlNamespaceOperationDecoderKey xmlNamespaceKey = (XmlNamespaceOperationDecoderKey) key;
            opOrType = xmlNamespaceKey.getType();
        } else if (key instanceof XmlStringOperationDecoderKey) {
            XmlStringOperationDecoderKey xmlStringKey = (XmlStringOperationDecoderKey) key;
            opOrType = xmlStringKey.getOperation();
            service = Optional.of(xmlStringKey.getService());
        }
        if (OWSConstants.Operations.GetCapabilities.toString().equalsIgnoreCase(opOrType)) {
            if (service.isPresent()) {
                throw new InvalidParameterValueException(OWSConstants.GetCapabilitiesParams.service, service.get()).withMessage("The service '%s' is not supported.", service);
            } else {
                throw new MissingParameterValueException(OWSConstants.GetCapabilitiesParams.service).withMessage("The parameter '%s' is missing.", OWSConstants.GetCapabilitiesParams.service);
            }
        } else {
            throw new InvalidParameterValueException().withMessage("No decoder found for incoming message " + "based on derived decoder key: %s\nMessage: %s", key, xmlString);
        }
    } else {
        LOGGER.trace("Using decoder: {}", decoder);
    }
    try {
        return decoder.decode(xmlString);
    } catch (OwsDecodingException ex) {
        throw ex.getCause();
    } catch (DecodingException ex) {
        throw new NoApplicableCodeException().withMessage(ex.getMessage()).causedBy(ex);
    }
}
Also used : XmlNamespaceOperationDecoderKey(org.n52.svalbard.decode.XmlNamespaceOperationDecoderKey) MissingParameterValueException(org.n52.shetland.ogc.ows.exception.MissingParameterValueException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) InvalidParameterValueException(org.n52.shetland.ogc.ows.exception.InvalidParameterValueException) NoApplicableCodeException(org.n52.shetland.ogc.ows.exception.NoApplicableCodeException) DecoderKey(org.n52.svalbard.decode.DecoderKey) XmlStringOperationDecoderKey(org.n52.svalbard.decode.XmlStringOperationDecoderKey) XmlNamespaceOperationDecoderKey(org.n52.svalbard.decode.XmlNamespaceOperationDecoderKey) DecodingException(org.n52.svalbard.decode.exception.DecodingException) OwsDecodingException(org.n52.iceland.coding.decode.OwsDecodingException) XmlStringOperationDecoderKey(org.n52.svalbard.decode.XmlStringOperationDecoderKey)

Example 4 with DecodingException

use of org.n52.svalbard.decode.exception.DecodingException in project arctic-sea by 52North.

the class OmObservationTest method should_have_SpatialFilteringProfileParameter.

@Test
public final void should_have_SpatialFilteringProfileParameter() throws OwsExceptionReport, DecodingException {
    OmObservation omObservation = new OmObservation();
    NamedValue<Geometry> namedValue = new NamedValue<>();
    namedValue.setName(new ReferenceType(OmConstants.PARAM_NAME_SAMPLING_GEOMETRY));
    GeometryFactory fac = new GeometryFactory(new PrecisionModel(PrecisionModel.FLOATING), 4326);
    namedValue.setValue(new GeometryValue(fac.createPoint(new Coordinate(34.5, 76.4))));
    // test no parameter is set
    assertFalse(omObservation.isSetParameter());
    assertFalse(omObservation.isSetSpatialFilteringProfileParameter());
    omObservation.addParameter(namedValue);
    // test with set SpatialFilteringProfile parameter
    assertTrue(omObservation.isSetParameter());
    assertTrue(omObservation.isSetSpatialFilteringProfileParameter());
    assertThat(omObservation.getSpatialFilteringProfileParameter(), is(equalTo(namedValue)));
}
Also used : Geometry(org.locationtech.jts.geom.Geometry) GeometryValue(org.n52.shetland.ogc.om.values.GeometryValue) GeometryFactory(org.locationtech.jts.geom.GeometryFactory) Coordinate(org.locationtech.jts.geom.Coordinate) PrecisionModel(org.locationtech.jts.geom.PrecisionModel) ReferenceType(org.n52.shetland.ogc.gml.ReferenceType) Test(org.junit.Test)

Example 5 with DecodingException

use of org.n52.svalbard.decode.exception.DecodingException in project arctic-sea by 52North.

the class XmlHelper method validateDocument.

/**
 * checks whether the XMLDocument is valid
 *
 * @param doc
 *            the document which should be checked
 *
 * @throws T
 *             * if the Document is not valid
 */
/*
     * TODO Replace this version with a method that uses LaxValidationCases and
     * provides means to access the errors after validating the document
     */
public static <X extends XmlObject, T extends Throwable> X validateDocument(X doc, Function<Throwable, T> supplier) throws T {
    // Create an XmlOptions instance and set the error listener.
    LinkedList<XmlError> validationErrors = new LinkedList<>();
    XmlOptions validationOptions = new XmlOptions().setErrorListener(validationErrors).setLoadLineNumbers(XmlOptions.LOAD_LINE_NUMBERS_END_ELEMENT);
    // Create Exception with error message if the xml document is invalid
    if (!doc.validate(validationOptions)) {
        String message;
        // getValidation error and throw service exception for the first
        // error
        Iterator<XmlError> iter = validationErrors.iterator();
        List<XmlError> errors = new LinkedList<>();
        while (iter.hasNext()) {
            XmlError error = iter.next();
            boolean shouldPass = false;
            if (error instanceof XmlValidationError) {
                for (LaxValidationCase lvc : LaxValidationCase.values()) {
                    if (lvc.shouldPass((XmlValidationError) error)) {
                        shouldPass = true;
                        LOGGER.debug("Lax validation case found for XML validation error: {}", error);
                        break;
                    }
                }
            }
            if (!shouldPass) {
                errors.add(error);
            }
        }
        CompositeException exceptions = new CompositeException();
        for (XmlError error : errors) {
            // get name of the missing or invalid parameter
            message = error.getMessage();
            if (message != null) {
                exceptions.add(new DecodingException(message, "[XmlBeans validation error:] %s", message));
            }
        }
        if (!errors.isEmpty()) {
            throw supplier.apply(exceptions);
        }
    }
    return doc;
}
Also used : XmlOptions(org.apache.xmlbeans.XmlOptions) CompositeException(org.n52.janmayen.exception.CompositeException) XmlError(org.apache.xmlbeans.XmlError) DecodingException(org.n52.svalbard.decode.exception.DecodingException) LinkedList(java.util.LinkedList) XmlValidationError(org.apache.xmlbeans.XmlValidationError)

Aggregations

Test (org.junit.Test)92 DecodingException (org.n52.svalbard.decode.exception.DecodingException)63 XmlObject (org.apache.xmlbeans.XmlObject)52 JsonNode (com.fasterxml.jackson.databind.JsonNode)25 SweField (org.n52.shetland.ogc.swe.SweField)25 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)23 XmlException (org.apache.xmlbeans.XmlException)23 GetObservationRequest (org.n52.shetland.ogc.sos.request.GetObservationRequest)22 UnsupportedDecoderInputException (org.n52.svalbard.decode.exception.UnsupportedDecoderInputException)21 AbstractProcess (org.n52.shetland.ogc.sensorML.AbstractProcess)13 SystemType (net.opengis.sensorML.x101.SystemType)12 TimeInstant (org.n52.shetland.ogc.gml.time.TimeInstant)12 Before (org.junit.Before)11 AbstractFeature (org.n52.shetland.ogc.gml.AbstractFeature)11 SensorMLDocument (net.opengis.sensorML.x101.SensorMLDocument)10 DateTime (org.joda.time.DateTime)10 SweAbstractDataComponent (org.n52.shetland.ogc.swe.SweAbstractDataComponent)10 XmlString (org.apache.xmlbeans.XmlString)9 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)8 Geometry (org.locationtech.jts.geom.Geometry)8