Hi,
I currently have some tiff(tagged image files) and jp2000 images which i would like to create a data coverage store for. The initial dataset is 200+ maps, and I'm not really wanting to
configure these individually by hand. I would like to implement some
functionality in Geoserver which automatically configures Geoservers
coverage store (as much a possible without human intervention) when new
data is added to the coverages repository (initially tifs/jp2's but will
allow for extension of course). Pretty much what these tickets are
related to:
http://jira.codehaus.org/browse/GEOS-2287
http://jira.codehaus.org/browse/GEOS-2289
http://jira.codehaus.org/browse/GEOS-340 - this one to a lesser degree,
but i think it is realted
I thought I would be able to initially do this as a plugin/extension, so
I checked out the latest code from the Geoserver trunk, and followed
this guide to writing plugins -
http://geoserver.org/display/GEOSDOC/3+A+Simple+PlugIn. I have followed
this guide but was unable to get it working. I tried installing the
community/hello extension aswell, but still no cigar.
When i provide my URL
(http://localhost:8080/geoserver/ows?request=autoConfigure&service=coverageStoreAutoConfigureService)
the stack trace that follows is:
29 Oct 11:35:50 ERROR [geoserver.ows] -
org.geoserver.platform.ServiceException: No service: (
coverageStoreAutoConfigureService )
at org.geoserver.ows.Dispatcher.findService(Dispatcher.java:679)
at org.geoserver.ows.Dispatcher.service(Dispatcher.java:331)
at
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:182)
at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:178)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
at
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
at
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:163)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
and the ouput in the browser is:
<?xml version="1.0" encoding="UTF-8"?>
<ows:ExceptionReport version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/ows http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows">
<ows:Exception exceptionCode="InvalidParameterValue" locator="service">
<ows:ExceptionText>No service: (
coverageStoreAutoConfigureService )</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>
So, it cant find my service. I went into the code a put in some print
statements to see if i could access my new AutoConfigure service (which
extends AbstractService) bean from the Spring context, which I could.
So, I know that my bean does exist, and it is being loaded by the Spring
context. I am pretty sure the reason it cannot find my service is
because it is of type AbstractService. In org.geoserver.ows.Dispatcher
line 653, the loadServices() method requests services/extensions from
the spring context based on the Service type:
Collection services = GeoServerExtensions.extensions(Service.class);
The question to whoever might be able to help me is: Is the tutorial for
extensions/plugins still relevant/uptodate? or have a made a
simple/critical mistake somewhere? Also in this page -
http://geoserver.org/display/GEOSDOC/Operation - the sequence diagram
depicts the Dispatcher instantiating the AbstractService, this does not
reflect what is happening in the code...
Also, is a plugin/extension approach a good one for what I would like to
achieve?
Thanks in advance.
Mat
--
Mathew Wyatt
Software Engineer, CSIRO Exploration and Mining
Australian Resources Research Centre
26 Dick Perry Ave, Kensington WA 6151, Australia