I've seen that kind of error happen when the filter functions get a null value... sometimes it's really the data itself that's null, and the filter functions do not care for it. David provided a patch for it on the GeoServer jira but I still haven't had the time to apply it. There is only one thing that bugs me a little about the patch, in some functions you insert a null and get back an empty string, imho it should return null again instead
Cheers Andrea On Mon, Oct 4, 2010 at 5:00 PM, Justin Deoliveira <[email protected]> wrote: > Hi Frank, > Strange... I can't think why the combination fo the filters would fail. The > stack trace indicates that the failure is occuring due to one of the > operands to the islike function being null. The literal should be no problem > because internally it is converted to a string and any value can be > converted to a string. So my guess would be the PropertyName. Are you sure > "NAME" is the correct attribute name including case? > When i get a minute I will see if i can replicate the issue with another > dataset. > -Justin > On Mon, Oct 4, 2010 at 1:28 AM, Frank Gasdorf <[email protected]> > wrote: >> >> Hi Justin, >> >> the last two days I tried to get the combination of isLike and BBOX filter >> running but with the configuration described before (geoserver 2.0.2 and >> udig 1.2) it failed always with an NPE: >> >> at >> org.geotools.filter.function.StaticGeometry.isLike(StaticGeometry.java:644) >> at >> org.geotools.filter.function.FilterFunction_isLike.evaluate(FilterFunction_isLike.java:61) >> at org.geotools.filter.FilterAbstract.eval(FilterAbstract.java:96) >> at >> org.geotools.filter.IsEqualsToImpl.evaluate(IsEqualsToImpl.java:52) >> at org.geotools.filter.AndImpl.evaluate(AndImpl.java:55) >> at >> org.geotools.data.FilteringFeatureReader.hasNext(FilteringFeatureReader.java:130) >> at >> org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:84) >> at >> org.geotools.data.MaxFeatureReader.hasNext(MaxFeatureReader.java:84) >> at >> org.geotools.data.DefaultFeatureResults.getCount(DefaultFeatureResults.java:329) >> at >> org.geotools.data.store.DataFeatureCollection.size(DataFeatureCollection.java:265) >> at >> org.geotools.feature.collection.DecoratingFeatureCollection.size(DecoratingFeatureCollection.java:168) >> at >> org.geotools.data.crs.ReprojectFeatureResults.size(ReprojectFeatureResults.java:120) >> at org.geoserver.wfs.GetFeature.run(GetFeature.java:371) >> at >> org.geoserver.wfs.DefaultWebFeatureService.getFeature(DefaultWebFeatureService.java:115) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> at java.lang.reflect.Method.invoke(Method.java:597) >> at >> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) >> at >> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) >> at >> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) >> at org.geoserver.ows.util.EMFLogger.invoke(EMFLogger.java:51) >> at >> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) >> at >> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) >> at $Proxy19.getFeature(Unknown Source) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> at java.lang.reflect.Method.invoke(Method.java:597) >> at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:599) >> at >> org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:230) >> 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.doPost(FrameworkServlet.java:511) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) >> 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:265) >> 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:275) >> >> The getFeature Request looks like that: >> >> <?xml version="1.0" encoding="UTF-8"?> >> <wfs:GetFeature handle="GeoTools 2.6-3 WFS DataStore" >> outputFormat="text/xml; subtype=gml/3.1.1" resultType="results" >> service="WFS" version="1.1.0" xmlns:ogc="http://www.opengis.net/ogc" >> xmlns:gml="http://www.opengis.net/gml" >> xmlns:xlink="http://www.w3.org/1999/xlink" >> xmlns:ows="http://www.opengis.net/ows" >> xmlns:wfs="http://www.opengis.net/wfs"> >> <wfs:Query typeName="naturalEarth:ne-10m-populated-places"> >> <ogc:Filter> >> <ogc:And> >> <ogc:PropertyIsEqualTo matchCase="true"> >> <ogc:Literal>true</ogc:Literal> >> <ogc:Function name="isLike"> >> <ogc:PropertyName>NAME</ogc:PropertyName> >> <ogc:Literal>(?i)Hamburg(.)*</ogc:Literal> >> </ogc:Function> >> </ogc:PropertyIsEqualTo> >> <ogc:BBOX> >> <ogc:PropertyName>the_geom</ogc:PropertyName> >> <gml:Envelope> >> <gml:lowerCorner>-8.12030075187971 >> 38.584213720391205</gml:lowerCorner> >> <gml:upperCorner>31.57894736842104 >> 61.02075620442082</gml:upperCorner> >> </gml:Envelope> >> </ogc:BBOX> >> </ogc:And> >> </ogc:Filter> >> </wfs:Query> >> </wfs:GetFeature> >> >> Like you can see, I added a free dataset from natural-earth to the >> workspace as a Shapefile-Datastore. The geometry filter describes a region >> in Europe and the isLike Filter should return all populated places where the >> name starts with hamburg (case insensitive ;o)) >> >> If using the PropertyIsEqualTo Filter or the BBOX Filter as standalone >> request it works quite well. Only the AND Filter results into the NPE. Do >> you have any ideas? I'm a bit confused ... >> >> Thanks a lot and sorry for my delayed feedback. >> >> Frank >> >> 2010/10/1 Justin Deoliveira <[email protected]> >>> >>> So if I understand correctly you just want to create the filter object >>> directly and not go through xml? >>> The following geotools code should do the trick: >>> FilterFactory ff = CommonFactoryFinder.getFilterFactory(null); >>> PropertyIsEqualTo filter = ff.bbox("the_geom", -75.102613 >>> 40.212597, -72.361859 41.512517); >>> If you need FilterFactory2 you can safely cast to it... although usually >>> FilterFactory itself does the trick. >>> Hope that answers your question. >>> -Justin >>> >>> On Fri, Oct 1, 2010 at 6:58 AM, Frank Gasdorf >>> <[email protected]> wrote: >>>> >>>> Hello again Justin, >>>> >>>> Great, got it running. I also unsuccessfully tried to use FilterFactor2 >>>> to create a filter like that. What I've done is: Parse the xml with the >>>> following created parser object and substitute the attribute with >>>> MessageFormat. >>>> >>>> org.geotools.xml.Configuration configuration = new >>>> org.geotools.filter.v1_1.OGCConfiguration(); >>>> Parser parser = new org.geotools.xml.Parser(configuration); >>>> >>>> That code is quite ugly and I would like to transform it to >>>> FilterFactory2. >>>> >>>> Second: I also combine this "isLike" filter with a spatial filter (bbox, >>>> envelope or whatever) to add gazetteer support for the LocationView in >>>> udig. >>>> But I get a lot of NullPointerExceptions if I create bbox-Filters >>>> (FilterFactory2.bbox(...) or FilterFactory2.intersect(...)) >>>> >>>> I had a look at the demo requests and got the following filter running >>>> (no NPE occured) but I have no idea how to define it with filter factory's: >>>> >>>> <wfs:GetFeature service="WFS" version="1.1.0" >>>> xmlns:topp="http://www.openplans.org/topp" >>>> xmlns:wfs="http://www.opengis.net/wfs" >>>> xmlns:ogc="http://www.opengis.net/ogc" >>>> xmlns:gml="http://www.opengis.net/gml" >>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>> xsi:schemaLocation="http://www.opengis.net/wfs >>>> http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> >>>> <wfs:Query typeName="naturalEarth:ne-10m-populated-places"> >>>> <wfs:PropertyName>topp:NAME</wfs:PropertyName> >>>> <ogc:Filter> >>>> <ogc:BBOX> >>>> <ogc:PropertyName>the_geom</ogc:PropertyName> >>>> <gml:Envelope >>>> srsName="http://www.opengis.net/gml/srs/epsg.xml#4326"> >>>> <gml:lowerCorner>-75.102613 40.212597</gml:lowerCorner> >>>> <gml:upperCorner>-72.361859 41.512517</gml:upperCorner> >>>> </gml:Envelope> >>>> </ogc:BBOX> >>>> </ogc:Filter> >>>> </wfs:Query> >>>> </wfs:GetFeature> >>>> >>>> Do you have any suggestions? >>>> >>>> Cheers >>>> Frank >>>> >>>> 2010/10/1 Justin Deoliveira <[email protected]> >>>>> >>>>> Hi Frank, >>>>> Good to hear from you! >>>>> >>>>> Well the regular expression is just a java regex, so anything that >>>>> works with java.util.Pattern should work as an argument to the isLike >>>>> function. >>>>> -Justin >>>>> >>>>> On Thu, Sep 30, 2010 at 2:22 PM, Frank Gasdorf >>>>> <[email protected]> wrote: >>>>>> >>>>>> Hi Justin! >>>>>> Thanks a lot for the fast response and the link to the discussion! I >>>>>> just checked it out and it works quite well! Could you point me to the >>>>>> syntax documentation of the isLike function. I guess some chars in the >>>>>> search string are for escape, single and multi wildcard characters but >>>>>> I've >>>>>> no idea which one. >>>>>> >>>>>> Thanks >>>>>> Frank >>>>>> 2010/9/30 Justin Deoliveira <[email protected]> >>>>>>> >>>>>>> Hi Frank! >>>>>>> This has been a popular topic lately :) See this >>>>>>> recent discussion from the users list: >>>>>>> http://old.nabble.com/case-insensitive-LIKE-filter..-td29820164.html >>>>>>> -Justin >>>>>>> >>>>>>> On Thu, Sep 30, 2010 at 5:07 AM, Frank Gasdorf >>>>>>> <[email protected]> wrote: >>>>>>>> >>>>>>>> found an interesting discussion right here >>>>>>>> http://getsatisfaction.com/opengeo/topics/cql_reference >>>>>>>> about default upper usage of the property Expression if using LIKE >>>>>>>> filters : >>>>>>>> >>>>>>>> What I try to do is using WFS to implement a gazetteer like search >>>>>>>> for point of interests. But the user typing the search text doesn't >>>>>>>> know >>>>>>>> about the type of storage (upper or lower case or even Camel Style or >>>>>>>> whatever). >>>>>>>> >>>>>>>> So is there a solution in geoserver 2.1.x to get results from a like >>>>>>>> query? >>>>>>>> >>>>>>>> Cheers >>>>>>>> Frank >>>>>>>> >>>>>>>> 2010/9/30 Frank Gasdorf <[email protected]> >>>>>>>>> >>>>>>>>> Hello everybody! >>>>>>>>> >>>>>>>>> I enabled the WFS service for my local geoserver installation and >>>>>>>>> tried to request features with a LIKE Filter to find features with a >>>>>>>>> special >>>>>>>>> name attribute. But I couldn't create a case insensitive filter, where >>>>>>>>> attribute values and the filter criteria is uppercase. >>>>>>>>> >>>>>>>>> >>>>>>>>> FilterFactory2 filterFactory = >>>>>>>>> CommonFactoryFinder.getFilterFactory2( GeoTools.getDefaultHints() ); >>>>>>>>> String attributeName = "nam"; >>>>>>>>> String text = "hamburg*" >>>>>>>>> Expression upperAttribute = >>>>>>>>> filterFactory.function("strToUpperCase", >>>>>>>>> filterFactory.property(attributeName)); >>>>>>>>> Filter attributeFilter = filterFactory.like(upperAttribute, >>>>>>>>> text.toUpperCase(), "*", "?", "\\", false); >>>>>>>>> >>>>>>>>> the resulting filter looks like that: >>>>>>>>> [ strToUpperCase([nam]) is like HAMBURG* ] >>>>>>>>> >>>>>>>>> But I got no results back from the geoserver 2.0.2 WFS service. >>>>>>>>> >>>>>>>>> Could you give any hints to solve this problem? Any suggestions? >>>>>>>>> Which filters are supported by geoserver >>>>>>>>> >>>>>>>>> Thanks a lot, >>>>>>>>> >>>>>>>>> Frank >>>>>>>>> >>>>>>>>> PS: code snippet is used witth udig 1.2 on geotools 2.6.3 >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------------ >>>>>>>> Start uncovering the many advantages of virtual appliances >>>>>>>> and start using them to simplify application deployment and >>>>>>>> accelerate your shift to cloud computing. >>>>>>>> http://p.sf.net/sfu/novell-sfdev2dev >>>>>>>> _______________________________________________ >>>>>>>> Geoserver-devel mailing list >>>>>>>> [email protected] >>>>>>>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Justin Deoliveira >>>>>>> OpenGeo - http://opengeo.org >>>>>>> Enterprise support for open source geospatial. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Justin Deoliveira >>>>> OpenGeo - http://opengeo.org >>>>> Enterprise support for open source geospatial. >>>> >>> >>> >>> >>> -- >>> Justin Deoliveira >>> OpenGeo - http://opengeo.org >>> Enterprise support for open source geospatial. >> > > > > -- > Justin Deoliveira > OpenGeo - http://opengeo.org > Enterprise support for open source geospatial. > > ------------------------------------------------------------------------------ > Virtualization is moving to the mainstream and overtaking non-virtualized > environment for deploying applications. Does it make network security > easier or more difficult to achieve? Read this whitepaper to separate the > two and get a better understanding. > http://p.sf.net/sfu/hp-phase2-d2d > _______________________________________________ > Geoserver-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/geoserver-devel > > -- ----------------------------------------------------- Ing. Andrea Aime Senior Software Engineer GeoSolutions S.A.S. Via Poggio alle Viti 1187 55054 Massarosa (LU) Italy phone: +39 0584962313 fax: +39 0584962313 http://www.geo-solutions.it http://geo-solutions.blogspot.com/ http://www.linkedin.com/in/andreaaime http://twitter.com/geowolf ----------------------------------------------------- ------------------------------------------------------------------------------ Virtualization is moving to the mainstream and overtaking non-virtualized environment for deploying applications. Does it make network security easier or more difficult to achieve? Read this whitepaper to separate the two and get a better understanding. http://p.sf.net/sfu/hp-phase2-d2d _______________________________________________ Geoserver-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geoserver-devel
