"Seegrid will be due for a migration to confluence on the 1st of August. Any update on or after the 1st of August will NOT be migrated"

GeoServer Webservice Module Architecture


Related pages

Overview of the webservice module

The logic of the webservice module is:

  • It takes a query from geoserver as input
  • It splits the query into two parts, depending upon what the capabilities of the backend service are
  • Builds a request using a template file and the first part of the split query
  • Sends the request via POST over HTTP
  • Filters the xml response if necessary, using the second part of the split query
  • Returns the xml

  • Spliting the query into two parts uses standard geotools code. It is not implemented in the webservice module.
  • The 'pre' filter can be handled by the backend datasource, but we might get too many features back.
  • In building the request, the template engine freemarker is used.
  • The full xml is returned in the response, but the valid features (after applying the post filter) are marked by numbers in a list, which is also returned. eg if three features were returned by the webservice, we might then find only the first and third features actually pass the post filter. The list would then contain the numbers 1 and 3. (Note: we index from 1 rather than 0 as this is how xpaths index things.)
  • We use the xpath value in the itemXpath tag in the configuration to identify different features,
  • The code implements and extends the DataStore interface. This makes the module available for use by the app-schema code. (As it automatically detects objects implementing this interface.) The name of the extended interface is XmlDataStore, which has a couple of extra methods defined which are needed for xml processing. Also, several of the methods that come with the DataStore interface are not appropriate and an unsupportedOperationException is thrown if they are called.

Topic revision: r5 - 15 Oct 2010, UnknownUser

Current license: All material on this collaboration platform is licensed under a Creative Commons Attribution 3.0 Australia Licence (CC BY 3.0).