org.deegree.services.controller
Class AbstractOWS

java.lang.Object
  extended by org.deegree.services.controller.AbstractOWS
All Implemented Interfaces:
Resource, OWS
Direct Known Subclasses:
CSWController, SOSController, WCSController, WebFeatureService, WMSController, WPService, WPVSController

public abstract class AbstractOWS
extends Object
implements OWS

Each concrete extension of this class is responsible for handling requests to a specific OGC web service (WPS, WMS, WFS, CSW,...).

Version:
$Revision:$, $Date:$
Author:
Markus Schneider , Rutger Bezema , last edited by: $Author:$
See Also:
OGCFrontController, ImplementationMetadata

Field Summary
protected  DeegreeServiceControllerType mainControllerConf
           
protected  DeegreeServicesMetadataType mainMetadataConf
          Common configuration (metadata) of parent OGCFrontController.
protected  SortedSet<Version> offeredVersions
          Versions offered by the AbstractOWS instance (depends on configuration).
protected  ImplementationMetadata<?> serviceInfo
           
protected  DeegreeWorkspace workspace
           
 
Constructor Summary
protected AbstractOWS(URL configURL, ImplementationMetadata<?> serviceInfo)
           
 
Method Summary
protected  void beginSOAPResponse(HttpResponseBuffer response)
          Convenience method that may be used by controller implementations to produce OGC-SOAP responses.
protected  void checkConfigVersion(String confFileURL, String configVersionString)
           
protected  Version checkVersion(Version requestedVersion)
          Checks if a request version can be handled by this controller (i.e. if is supported by the implementation *and* offered by the current configuration).
 void doSOAP(org.apache.axiom.soap.SOAPEnvelope soapDoc, javax.servlet.http.HttpServletRequest request, HttpResponseBuffer response, List<org.apache.commons.fileupload.FileItem> multiParts, org.apache.axiom.soap.SOAPFactory factory)
          Called by the OGCFrontController to allow this AbstractOGCServiceController to handle a SOAP request.
protected  void endSOAPResponse(HttpResponseBuffer response)
          Finishes an OGC-SOAP response that has been initiated by beginSOAPResponse(HttpResponseBuffer).
 Pair<XMLExceptionSerializer<OWSException>,String> getExceptionSerializer(Version requestVersion)
          Returns the ExceptionSerializer and mime-type suitable for the given request version.
 Set<String> getHandledNamespaces()
          Returns all namespaces that are handled by this controller.
 Set<String> getHandledRequests()
          Returns the names of all requests that are handled by this controller.
 ImplementationMetadata<?> getImplementationMetadata()
           
 List<String> getOfferedVersions()
          Returns the offered protocol versions.
 String getOfferedVersionsString()
          Returns the offered protocol versions.
protected  void init(DeegreeServicesMetadataType mainMetadataConf, DeegreeServiceControllerType mainControllerConf, ImplementationMetadata<?> serviceInformation, XMLAdapter controllerConfig)
          Initializes the AbstractOWS instance.
 void init(DeegreeWorkspace workspace)
          Usually called by the ResourceManager upon workspace startup.
protected  Version negotiateVersion(GetCapabilities request)
          Generic version negotiation algorithm for GetCapabilities requests according to OWS Common Specification 1.1.0 (OGC 06-121r3), section 7.3.2 and D.11.
<E extends OWSException>
void
sendException(String contentType, String encoding, Map<String,String> additionalHeaders, int httpStatusCode, ExceptionSerializer<E> serializer, E exception, javax.servlet.http.HttpServletResponse response)
           
static
<E extends OWSException>
void
sendException(String contentType, String encoding, Map<String,String> additionalHeaders, int httpStatusCode, ExceptionSerializer<E> serializer, ImplementationMetadata<?> md, E exception, javax.servlet.http.HttpServletResponse response)
          Sends an exception to the client.
 void sendSOAPException(org.apache.axiom.soap.SOAPHeader header, org.apache.axiom.soap.SOAPFactory factory, HttpResponseBuffer response, OWSException exception, XMLExceptionSerializer<OWSException> serializer, String SOAPFaultCode, String SOAPMessage, String SOAPaction, String characterEncoding)
          Encapsulates the given OWSException into a SOAP environment for which the given factory will be used.
protected  ServiceIdentificationType synchronizeServiceIdentificationWithMainController(ServiceIdentificationType serviceIdentification)
           
protected  ServiceProviderType synchronizeServiceProviderWithMainControllerConf(ServiceProviderType configuredServiceProvider)
           
protected  Object unmarshallConfig(String jaxbPackage, String schemaLocation, org.apache.axiom.om.OMElement element)
           
protected  Object unmarshallConfig(String jaxbPackage, String schemaLocation, XMLAdapter xmlAdapter)
           
protected  void validateAndSetOfferedVersions(Collection<String> requestedVersions)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.deegree.services.OWS
doKVP, doXML
 
Methods inherited from interface org.deegree.commons.config.Resource
destroy
 

Field Detail

mainMetadataConf

protected DeegreeServicesMetadataType mainMetadataConf
Common configuration (metadata) of parent OGCFrontController.


mainControllerConf

protected DeegreeServiceControllerType mainControllerConf

offeredVersions

protected SortedSet<Version> offeredVersions
Versions offered by the AbstractOWS instance (depends on configuration).

Versions are sorted from lowest to highest in order to support the (old-style) version negotiation algorithm.


workspace

protected DeegreeWorkspace workspace

serviceInfo

protected ImplementationMetadata<?> serviceInfo
Constructor Detail

AbstractOWS

protected AbstractOWS(URL configURL,
                      ImplementationMetadata<?> serviceInfo)
Method Detail

init

public void init(DeegreeWorkspace workspace)
          throws ResourceInitException
Description copied from interface: Resource
Usually called by the ResourceManager upon workspace startup.

Specified by:
init in interface Resource
Parameters:
workspace - the workspace the resource belongs to, may be null
Throws:
ResourceInitException

getImplementationMetadata

public ImplementationMetadata<?> getImplementationMetadata()
Specified by:
getImplementationMetadata in interface OWS
Returns:
the same implementation metadata that the accompanying (if available) OWSProvider would return (it's here for backward compatibility regarding custom controller classes)

init

protected void init(DeegreeServicesMetadataType mainMetadataConf,
                    DeegreeServiceControllerType mainControllerConf,
                    ImplementationMetadata<?> serviceInformation,
                    XMLAdapter controllerConfig)
             throws ResourceInitException
Initializes the AbstractOWS instance.

Parameters:
mainMetadataConf -
serviceInformation -
controllerConfig - controller configuration, must not be null
Throws:
ControllerInitException - if the config version does not match one of the supported versions
ResourceInitException

getHandledRequests

public final Set<String> getHandledRequests()
Returns the names of all requests that are handled by this controller.

Returns:
names of handled requests

getHandledNamespaces

public final Set<String> getHandledNamespaces()
Returns all namespaces that are handled by this controller.

Returns:
handled namespaces

validateAndSetOfferedVersions

protected final void validateAndSetOfferedVersions(Collection<String> requestedVersions)
                                            throws ResourceInitException
Parameters:
requestedVersions -
Throws:
ResourceInitException

doSOAP

public void doSOAP(org.apache.axiom.soap.SOAPEnvelope soapDoc,
                   javax.servlet.http.HttpServletRequest request,
                   HttpResponseBuffer response,
                   List<org.apache.commons.fileupload.FileItem> multiParts,
                   org.apache.axiom.soap.SOAPFactory factory)
            throws javax.servlet.ServletException,
                   IOException,
                   SecurityException
Called by the OGCFrontController to allow this AbstractOGCServiceController to handle a SOAP request.

Specified by:
doSOAP in interface OWS
Parameters:
soapDoc - XMLAdapter for parsing the SOAP request document
request - provides access to all information of the original HTTP request (NOTE: may be GET or POST)
response - response that is sent to the client
multiParts - A list of multiparts contained in the request. If the request was not a multipart request the list will be null. If multiparts were found, the requestDoc will be the first (xml-lized) FileItem in the list.
factory - initialized to the soap version of the request.
Throws:
javax.servlet.ServletException
IOException - if an IOException occurred
SecurityException

beginSOAPResponse

protected void beginSOAPResponse(HttpResponseBuffer response)
                          throws XMLStreamException,
                                 IOException
Convenience method that may be used by controller implementations to produce OGC-SOAP responses.

Performs the following actions using the given HttpResponseBuffer:

After calling this method, the controller may simply write the normal OGC-XML response using the HttpResponseBuffer.getXMLWriter() object and call endSOAPResponse(HttpResponseBuffer) afterwards.

Parameters:
response -
Throws:
XMLStreamException
IOException
See Also:
endSOAPResponse(HttpResponseBuffer)

endSOAPResponse

protected void endSOAPResponse(HttpResponseBuffer response)
                        throws IOException,
                               XMLStreamException
Finishes an OGC-SOAP response that has been initiated by beginSOAPResponse(HttpResponseBuffer).

Parameters:
response -
Throws:
IOException
XMLStreamException
See Also:
beginSOAPResponse(HttpResponseBuffer)

checkVersion

protected Version checkVersion(Version requestedVersion)
                        throws OWSException
Checks if a request version can be handled by this controller (i.e. if is supported by the implementation *and* offered by the current configuration).

NOTE: This method does use exception code OWSException.INVALID_PARAMETER_VALUE, not OWSException.VERSION_NEGOTIATION_FAILED -- the latter should only be used for failed GetCapabilities requests.

Parameters:
requestedVersion - version to be checked, may be null (causes exception)
Returns:
requestedVersion (if it is not null), or highest version supported
Throws:
OWSException - if the requested version is not available

getOfferedVersionsString

public String getOfferedVersionsString()
Returns the offered protocol versions.

Returns:
the offered protocol versions

getOfferedVersions

public List<String> getOfferedVersions()
Returns the offered protocol versions.

Returns:
the offered protocol versions

checkConfigVersion

protected void checkConfigVersion(String confFileURL,
                                  String configVersionString)
                           throws ResourceInitException
Parameters:
confFileURL -
configVersionString -
Throws:
ResourceInitException

unmarshallConfig

protected Object unmarshallConfig(String jaxbPackage,
                                  String schemaLocation,
                                  org.apache.axiom.om.OMElement element)
                           throws ResourceInitException
Throws:
ResourceInitException

unmarshallConfig

protected Object unmarshallConfig(String jaxbPackage,
                                  String schemaLocation,
                                  XMLAdapter xmlAdapter)
                           throws ResourceInitException
Throws:
ResourceInitException

negotiateVersion

protected Version negotiateVersion(GetCapabilities request)
                            throws OWSException
Generic version negotiation algorithm for GetCapabilities requests according to OWS Common Specification 1.1.0 (OGC 06-121r3), section 7.3.2 and D.11.

Parameters:
request - GetCapabilities request
Returns:
agreed version (used for response)
Throws:
OWSException - if new-style version negotiation is used and no common version exists

sendException

public <E extends OWSException> void sendException(String contentType,
                                                   String encoding,
                                                   Map<String,String> additionalHeaders,
                                                   int httpStatusCode,
                                                   ExceptionSerializer<E> serializer,
                                                   E exception,
                                                   javax.servlet.http.HttpServletResponse response)
                   throws javax.servlet.ServletException
Throws:
javax.servlet.ServletException

sendException

public static <E extends OWSException> void sendException(String contentType,
                                                          String encoding,
                                                          Map<String,String> additionalHeaders,
                                                          int httpStatusCode,
                                                          ExceptionSerializer<E> serializer,
                                                          ImplementationMetadata<?> md,
                                                          E exception,
                                                          javax.servlet.http.HttpServletResponse response)
                          throws javax.servlet.ServletException
Sends an exception to the client.

Type Parameters:
E - the type of the Exception, which should be subtype of controller exception
Parameters:
contentType - of the exception response
encoding - of the exception response
additionalHeaders - to add to the response.
httpStatusCode - of the exception response
serializer - responsible for creating the appropriate response format of the exception. Could be overridden by a matching SerializerProvider on the classpath.
exception - the cause, holding relevant information.
response - to write to.
Throws:
javax.servlet.ServletException - if the exception could not be sent.

sendSOAPException

public void sendSOAPException(org.apache.axiom.soap.SOAPHeader header,
                              org.apache.axiom.soap.SOAPFactory factory,
                              HttpResponseBuffer response,
                              OWSException exception,
                              XMLExceptionSerializer<OWSException> serializer,
                              String SOAPFaultCode,
                              String SOAPMessage,
                              String SOAPaction,
                              String characterEncoding)
                       throws javax.servlet.ServletException
Encapsulates the given OWSException into a SOAP environment for which the given factory will be used.

Parameters:
header - SOAPheaders to be set in the envelope, if missing no headers will be set.
factory - to create the soap elements.
response - to write to.
exception - to write in the 'fault/detail' section
serializer - to use for writing the OWSException.
SOAPFaultCode - optional (see SOAPException for valid once. If missing SOAPException.SENDER will be used.
SOAPMessage - optional message to explicitly set. If missing the owsException message will be used.
SOAPaction - to set, optional.
characterEncoding - of the response.
Throws:
javax.servlet.ServletException

synchronizeServiceProviderWithMainControllerConf

protected ServiceProviderType synchronizeServiceProviderWithMainControllerConf(ServiceProviderType configuredServiceProvider)
Parameters:
configuredServiceProvider - to be synchronized with the main configuration
Returns:
the configured service provider, with missing values filled from the main configuration.

synchronizeServiceIdentificationWithMainController

protected ServiceIdentificationType synchronizeServiceIdentificationWithMainController(ServiceIdentificationType serviceIdentification)
Parameters:
serviceIdentification - to be synchronized with the configuration of the main controller.
Returns:
the service identification with all missing values filled in from the main controller service identification.

getExceptionSerializer

public Pair<XMLExceptionSerializer<OWSException>,String> getExceptionSerializer(Version requestVersion)
Returns the ExceptionSerializer and mime-type suitable for the given request version.

Specified by:
getExceptionSerializer in interface OWS
Parameters:
requestVersion - version of the request for which the exception has to be produced, may be null (implies that the serializer and mime type for the highest supported version shall be returned)
Returns:
an OWSCommon 1.1.0 XML adapter by default, never null


Copyright © 2011. All Rights Reserved.