[Geoserver-devel] [JIRA] (GEOS-7741) External graphics within the data dir do not work with JDBCStore

Torben Barsballe created an issue

GeoServer / ImprovementGEOS-7741

External graphics within the data dir do not work with JDBCStore

Issue Type:

ImprovementImprovement

Affects Versions:

2.9.1

Assignee:

Unassigned

Components:

JDBCStore

Created:

13/Sep/16 11:56 PM

Priority:

MediumMedium

Reporter:

Torben Barsballe

After setting up JDBCStore, I add a graphic to the GeoServer styles directory using

curl -v -u admin:geoserver -XPUT -H "Content-type: image/png" --data-binary @smileyface.png http://localhost:8080/geoserver/rest/resource/styles/smileyface.png

I then create a new style:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
  xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
  xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <NamedLayer>
    <Name>icon</Name>
    <UserStyle>
      <Title>smileyface</Title>
      <FeatureTypeStyle>
        <Rule>
          <Title>smileface</Title>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xlink:type="simple" xlink:href="smileyface.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

If I try to render this style on a layer, I just get grey boxes instead of images. Looking through the debugger, I have traced this issue down to GeoServerDataDirectory line: 1201 . Here, we explicitly convert the resource path into a file path, which causes GeoServer to look in the old data directory (instead of the JDBC Resource Store), which does not contain the image.

Debug stack:

Thread [qtp1472216456-20] (Suspended)	
	owns: HashMap<K,V>  (id=128)	
	GeoServerDataDirectory$1.locateResource(String) line: 1203	
	SLDParser.parseExternalGraphic(Node) line: 1845	
	SLDParser.parseGraphic(Node) line: 1687	
	SLDParser.parsePointSymbolizer(Node) line: 1649	
	SLDParser.parseRule(Node) line: 936	
	SLDParser.parseFeatureTypeStyle(Node) line: 841	
	SLDParser.parseStyle(Node) line: 797	
	SLDParser.parseNamedLayer(Node) line: 668	
	SLDParser.parseDescriptor(Node) line: 459	
	SLDParser.parseSLD() line: 421	
	SLDHandler.parse10(Object, ResourceLocator, EntityResolver) line: 157	
	SLDHandler.parse(Object, Version, ResourceLocator, EntityResolver) line: 141	
	GeoServerDataDirectory.parsedStyle(StyleInfo) line: 1229	
	ResourcePool.getStyle(StyleInfo) line: 1770	
	StyleInfoImpl.getStyle() line: 104	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43	
	Method.invoke(Object, Object...) line: 497	
	ModificationProxy.invoke(Object, Method, Object[]) line: 147	
	$Proxy18.getStyle() line: not available	
	WMS.getStyleByName(String) line: 257	
	GetLegendGraphicKvpReader.parseStyleAndRule(GetLegendGraphicRequest, Object, Map) line: 437	
	GetLegendGraphicKvpReader.parseOptionalParameters(GetLegendGraphicRequest, Object, Map) line: 369	
	GetLegendGraphicKvpReader.read(Object, Map, Map) line: 201	
	GetLegendGraphicKvpReader.read(Object, Map, Map) line: 1	
	Dispatcher.parseRequestKVP(Class, Request) line: 1488	
	Dispatcher.dispatch(Request, Service) line: 674	
	Dispatcher.handleRequestInternal(HttpServletRequest, HttpServletResponse) line: 258	
	Dispatcher(AbstractController).handleRequest(HttpServletRequest, HttpServletResponse) line: 147	
	SimpleControllerHandlerAdapter.handle(HttpServletRequest, HttpServletResponse, Object) line: 50	
	DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse) line: 959	
	DispatcherServlet.doService(HttpServletRequest, HttpServletResponse) line: 893	
	DispatcherServlet(FrameworkServlet).processRequest(HttpServletRequest, HttpServletResponse) line: 968	
	DispatcherServlet(FrameworkServlet).doGet(HttpServletRequest, HttpServletResponse) line: 859	
	DispatcherServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 687	
	DispatcherServlet(FrameworkServlet).service(HttpServletRequest, HttpServletResponse) line: 844	
	DispatcherServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 790	
	ServletHolder.handle(Request, ServletRequest, ServletResponse) line: 808	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1669	
	ThreadLocalsCleanupFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 28	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	SpringDelegatingFilter$Chain.doFilter(ServletRequest, ServletResponse) line: 75	
	AnimatorFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 71	
	SpringDelegatingFilter$Chain.doFilter(ServletRequest, ServletResponse) line: 71	
	SpringDelegatingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 46	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	AdvancedDispatchFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 50	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 316	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 69	
	FilterSecurityInterceptor.invoke(FilterInvocation) line: 126	
	FilterSecurityInterceptor.doFilter(ServletRequest, ServletResponse, FilterChain) line: 90	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 73	
	GeoServerSecurityInterceptorFilter(GeoServerCompositeFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 92	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 330	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 69	
	ExceptionTranslationFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 114	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 73	
	GeoServerExceptionTranslationFilter(GeoServerCompositeFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 92	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 330	
	GeoServerAnonymousAuthenticationFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 54	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 330	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 69	
	BasicAuthenticationFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain) line: 158	
	BasicAuthenticationFilter(OncePerRequestFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 107	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 73	
	GeoServerBasicAuthenticationFilter(GeoServerCompositeFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 92	
	GeoServerBasicAuthenticationFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 84	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 330	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 69	
	GeoServerSecurityContextPersistenceFilter$1(SecurityContextPersistenceFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 91	
	GeoServerSecurityContextPersistenceFilter$1.doFilter(ServletRequest, ServletResponse, FilterChain) line: 53	
	GeoServerCompositeFilter$NestedFilterChain.doFilter(ServletRequest, ServletResponse) line: 73	
	GeoServerSecurityContextPersistenceFilter(GeoServerCompositeFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 92	
	FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest, ServletResponse) line: 330	
	FilterChainProxy.doFilterInternal(ServletRequest, ServletResponse, FilterChain) line: 213	
	FilterChainProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 176	
	GeoServerSecurityFilterChainProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 152	
	DelegatingFilterProxy.invokeDelegate(Filter, ServletRequest, ServletResponse, FilterChain) line: 346	
	DelegatingFilterProxy.doFilter(ServletRequest, ServletResponse, FilterChain) line: 262	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	LoggingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 87	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	GZIPFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 42	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	SessionDebugFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 48	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	FlushSafeFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 44	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	CharacterEncodingFilter.doFilterInternal(HttpServletRequest, HttpServletResponse, FilterChain) line: 121	
	CharacterEncodingFilter(OncePerRequestFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 107	
	ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse) line: 1652	
	ServletHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 585	
	ServletHandler(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 143	
	ConstraintSecurityHandler(SecurityHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 577	
	SessionHandler.doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 223	
	WebAppContext(ContextHandler).doHandle(String, Request, HttpServletRequest, HttpServletResponse) line: 1127	
	ServletHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 515	
	SessionHandler.doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 185	
	WebAppContext(ContextHandler).doScope(String, Request, HttpServletRequest, HttpServletResponse) line: 1061	
	WebAppContext(ScopedHandler).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 141	
	Server(HandlerWrapper).handle(String, Request, HttpServletRequest, HttpServletResponse) line: 97	
	Server.handle(HttpChannel<?>) line: 499	
	HttpConnection$HttpChannelOverHttp(HttpChannel<T>).handle() line: 310	
	HttpConnection.onFillable() line: 257	
	AbstractConnection$2.run() line: 540	
	QueuedThreadPool.runJob(Runnable) line: 635	
	QueuedThreadPool$3.run() line: 555	
	Thread.run() line: 745	

Add Comment

Add Comment

This message was sent by Atlassian JIRA (v1000.319.1#100012-sha1:913341f)

Atlassian logo