Search in sources :

Example 1 with OwsServiceRequest

use of org.n52.shetland.ogc.ows.service.OwsServiceRequest in project arctic-sea by 52North.

the class SimpleBinding method getServiceOperator.

protected ServiceOperator getServiceOperator(OwsServiceRequest request) throws OwsExceptionReport {
    checkServiceOperatorKeyTypes(request);
    String service = request.getService();
    String version = request.getVersion();
    if (request instanceof GetCapabilitiesRequest) {
        GetCapabilitiesRequest gcr = (GetCapabilitiesRequest) request;
        if (gcr.isSetAcceptVersions()) {
            return gcr.getAcceptVersions().stream().map(v -> new OwsServiceKey(service, v)).map(this::getServiceOperator).filter(Objects::nonNull).findFirst().orElseThrow(() -> new InvalidServiceOrVersionException(service, version));
        } else {
            Set<String> supportedVersions = serviceOperatorRepository.getSupportedVersions(service);
            String newest = supportedVersions.stream().max(Comparables.version()).orElseThrow(() -> new InvalidServiceParameterException(service));
            return getServiceOperator(new OwsServiceKey(service, newest));
        }
    } else {
        return getServiceOperator(new OwsServiceKey(service, version));
    }
}
Also used : GetCapabilitiesRequest(org.n52.shetland.ogc.ows.service.GetCapabilitiesRequest) InvalidServiceParameterException(org.n52.iceland.exception.ows.concrete.InvalidServiceParameterException) OwsServiceKey(org.n52.shetland.ogc.ows.service.OwsServiceKey) Objects(java.util.Objects) InvalidServiceOrVersionException(org.n52.iceland.exception.ows.concrete.InvalidServiceOrVersionException)

Example 2 with OwsServiceRequest

use of org.n52.shetland.ogc.ows.service.OwsServiceRequest in project arctic-sea by 52North.

the class SimpleBinding method checkServiceOperatorKeyTypes.

protected void checkServiceOperatorKeyTypes(OwsServiceRequest request) throws OwsExceptionReport {
    String service = request.getService();
    String version = request.getVersion();
    if (service == null || service.isEmpty()) {
        throw new MissingServiceParameterException();
    } else if (!getServiceOperatorRepository().isServiceSupported(service)) {
        throw new InvalidServiceParameterException(service);
    } else if (request instanceof GetCapabilitiesRequest) {
        GetCapabilitiesRequest gcr = (GetCapabilitiesRequest) request;
        if (gcr.isSetAcceptVersions() && !gcr.getAcceptVersions().stream().anyMatch(v -> isVersionSupported(service, v))) {
            throw new InvalidAcceptVersionsParameterException(gcr.getAcceptVersions());
        }
    } else if (version == null || version.isEmpty()) {
        throw new MissingVersionParameterException();
    } else if (!isVersionSupported(service, version)) {
        throw new VersionNotSupportedException();
    }
}
Also used : GetCapabilitiesRequest(org.n52.shetland.ogc.ows.service.GetCapabilitiesRequest) InvalidServiceParameterException(org.n52.iceland.exception.ows.concrete.InvalidServiceParameterException) MissingVersionParameterException(org.n52.shetland.ogc.ows.exception.MissingVersionParameterException) InvalidAcceptVersionsParameterException(org.n52.iceland.exception.ows.concrete.InvalidAcceptVersionsParameterException) VersionNotSupportedException(org.n52.iceland.exception.ows.concrete.VersionNotSupportedException) MissingServiceParameterException(org.n52.shetland.ogc.ows.exception.MissingServiceParameterException)

Example 3 with OwsServiceRequest

use of org.n52.shetland.ogc.ows.service.OwsServiceRequest in project arctic-sea by 52North.

the class EXIBinding method doPostOperation.

@Override
public void doPostOperation(HttpServletRequest req, HttpServletResponse res) throws HTTPException, IOException {
    OwsServiceRequest sosRequest = null;
    try {
        sosRequest = parseRequest(req);
        OwsServiceResponse sosResponse = getServiceOperator(sosRequest).receiveRequest(sosRequest);
        writeResponse(req, res, sosResponse);
    } catch (OwsExceptionReport oer) {
        oer.setVersion(sosRequest != null ? sosRequest.getVersion() : null);
        writeOwsExceptionReport(req, res, oer);
    }
}
Also used : OwsServiceRequest(org.n52.shetland.ogc.ows.service.OwsServiceRequest) OwsServiceResponse(org.n52.shetland.ogc.ows.service.OwsServiceResponse) OwsExceptionReport(org.n52.shetland.ogc.ows.exception.OwsExceptionReport)

Example 4 with OwsServiceRequest

use of org.n52.shetland.ogc.ows.service.OwsServiceRequest 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 5 with OwsServiceRequest

use of org.n52.shetland.ogc.ows.service.OwsServiceRequest 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)

Aggregations

OwsServiceRequest (org.n52.shetland.ogc.ows.service.OwsServiceRequest)12 DecodingException (org.n52.svalbard.decode.exception.DecodingException)10 XmlObject (org.apache.xmlbeans.XmlObject)7 OwsServiceResponse (org.n52.shetland.ogc.ows.service.OwsServiceResponse)6 XmlException (org.apache.xmlbeans.XmlException)5 OwsExceptionReport (org.n52.shetland.ogc.ows.exception.OwsExceptionReport)5 GetCapabilitiesRequest (org.n52.shetland.ogc.ows.service.GetCapabilitiesRequest)4 OwsServiceCommunicationObject (org.n52.shetland.ogc.ows.service.OwsServiceCommunicationObject)4 IOException (java.io.IOException)3 OwsDecodingException (org.n52.iceland.coding.decode.OwsDecodingException)3 InvalidServiceParameterException (org.n52.iceland.exception.ows.concrete.InvalidServiceParameterException)3 AbstractFeature (org.n52.shetland.ogc.gml.AbstractFeature)3 OperationDecoderKey (org.n52.svalbard.decode.OperationDecoderKey)3 JsonNode (com.fasterxml.jackson.databind.JsonNode)2 LinkedList (java.util.LinkedList)2 Set (java.util.Set)2 GetFeatureOfInterest (net.opengis.sos.x10.GetFeatureOfInterestDocument.GetFeatureOfInterest)2 GetResultTemplateType (net.opengis.sos.x20.GetResultTemplateType)2 Test (org.junit.Test)2 VersionNotSupportedException (org.n52.iceland.exception.ows.concrete.VersionNotSupportedException)2