Hi,
some days ago I sent a mail complaining about lack of significant error
messages when a non existent attribute is used in a filter.
In that case, it was the filter splitting and econding into sql.

This time is direct in memory filter application, which happens
when we filter against a shapefile.

The stack trace I get is the following:

-----------------------------------------------------------------------

javax.xml.transform.TransformerException: Translator error
        at
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:130)
        at
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:105)
        at
org.vfny.geoserver.wfs.responses.GML2FeatureResponseDelegate.encode(GML2FeatureResponseDelegate.java:212)
        at
org.vfny.geoserver.wfs.responses.FeatureResponse.writeTo(FeatureResponse.java:127)
        at
org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:582)
        at
org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:447)
        at org.geoserver.request.Dispatcher.post(Dispatcher.java:301)
        at org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:181)
        at
org.geoserver.request.Dispatcher.handleRequestInternal(Dispatcher.java:52)
        at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
        at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
        at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
        at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
        at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
        at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:357)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
        at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050)
        at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
        at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
        at org.mortbay.jetty.Server.handle(Server.java:269)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:701)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:617)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:193)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
        at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:208)
        at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
Caused by: java.lang.NullPointerException
        at
org.geotools.filter.BetweenFilterImpl.evaluate(BetweenFilterImpl.java:181)
        at org.geotools.filter.AbstractFilter.contains(AbstractFilter.java:64)
        at
org.geotools.data.FilteringFeatureReader.hasNext(FilteringFeatureReader.java:120)
        at
org.geotools.data.ReTypeFeatureReader.hasNext(ReTypeFeatureReader.java:164)
        at org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:78)
        at org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:78)
        at
org.geotools.data.DefaultFeatureResults.getBounds(DefaultFeatureResults.java:222)
        at
org.geotools.gml.producer.FeatureTransformer$FeatureTranslator.encode(FeatureTransformer.java:407)
        at
org.geotools.xml.transform.TransformerBase$XMLReaderSupport.parse(TransformerBase.java:677)
        at
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at
org.geotools.xml.transform.TransformerBase$Task.run(TransformerBase.java:293)
        at
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:126)
        ... 32 more
---------
java.lang.NullPointerException
        at
org.geotools.filter.BetweenFilterImpl.evaluate(BetweenFilterImpl.java:181)
        at org.geotools.filter.AbstractFilter.contains(AbstractFilter.java:64)
        at
org.geotools.data.FilteringFeatureReader.hasNext(FilteringFeatureReader.java:120)
        at
org.geotools.data.ReTypeFeatureReader.hasNext(ReTypeFeatureReader.java:164)
        at org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:78)
        at org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:78)
        at
org.geotools.data.DefaultFeatureResults.getBounds(DefaultFeatureResults.java:222)
        at
org.geotools.gml.producer.FeatureTransformer$FeatureTranslator.encode(FeatureTransformer.java:407)
        at
org.geotools.xml.transform.TransformerBase$XMLReaderSupport.parse(TransformerBase.java:677)
        at
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at
org.geotools.xml.transform.TransformerBase$Task.run(TransformerBase.java:293)
        at
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:126)
        at
org.geotools.xml.transform.TransformerBase.transform(TransformerBase.java:105)
        at
org.vfny.geoserver.wfs.responses.GML2FeatureResponseDelegate.encode(GML2FeatureResponseDelegate.java:212)
        at
org.vfny.geoserver.wfs.responses.FeatureResponse.writeTo(FeatureResponse.java:127)
        at
org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:582)
        at
org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:447)
        at org.geoserver.request.Dispatcher.post(Dispatcher.java:301)
        at org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:181)
        at
org.geoserver.request.Dispatcher.handleRequestInternal(Dispatcher.java:52)
        at
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
        at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
        at
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
        at
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
        at
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
        at
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:357)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
        at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050)
        at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
        at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
        at org.mortbay.jetty.Server.handle(Server.java:269)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:701)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:617)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:193)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
        at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:208)
        at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

-----------------------------------------------------------------------

Now, this stack trace and error message are close to useless... I used
an attribute it's not there, I need the exception to tell me so.

Now, this happens because AttributeImpl does return 
feature.getAttribute(attPath);, and this can be null. Yet no code
I can see guards against this null return value, and thus the NPE.

I think I wish to change the AttributeImpl so that it does throw
an exception if the attribute is not found, not return null... but
would this break code around? What do you suggest?

An alternative solution would be to use the attribute extractor filter
visitor and compare against the feature type, but that would have to
be done in each place a filter is used.. an extensive change, too.

Suggestions?
Cheers
Andrea

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to