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
|