[Geoserver-devel] getfeature filter to arcsde

Hi there,

I've come across what might be a bug in the ArcSDE data source.

i'm running geoserver 1.2.0 on jakarta 5.0.27 on windows 2000, ArcSDE is
version 8.2

When i do a getfeature with a spatial filter where the spatial filter is in
the bounds of the target datasource such as:

http://beta.landgate.com.au/geoserver/wfs/GetFeature
<wfs:GetFeature service="WFS" version="1.0.0"
  outputFormat="GML2"
  xmlns:topp="http://www.openplans.org/topp&quot;
  xmlns:wfs="http://www.opengis.net/wfs&quot;
  xmlns="http://www.opengis.net/ogc&quot;
  xmlns:ogc="http://www.opengis.net/ogc&quot;
  xmlns:gml="http://www.opengis.net/gml&quot;
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation="http://www.opengis.net/wfs
                      http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd&quot;&gt;
  <wfs:Query typeName="topp:SDE.W_PLANNING_MRSBDRY">
      <ogc:Filter>
      <ogc:Intersects>
        <ogc:PropertyName>the_geom</ogc:PropertyName>
          <gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#4326
">
            <gml:coordinates>116.30,-31.80</gml:coordinates>
          </gml:Point>
        </ogc:Intersects>
      </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>

it works fine, however if i make a modification to the location of the
point so that it is outside of the extent of the dataset (say 126.30,
-31.80) i get a java error:

<?xml version="1.0" ?>
<ServiceExceptionReport
   version="1.2.0"
   xmlns="http://www.opengis.net/ogc&quot;
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
   xsi:schemaLocation="http://www.opengis.net/ogc
http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd&quot;&gt;
   <ServiceException>
      problem with FeatureResults: org.geotools.data.DataSourceException:
Encoder error Error building SeFilter
     at
org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:446)
     at
org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:363)
     at
org.geotools.data.arcsde.ArcSDEDataStore.getCount(ArcSDEDataStore.java:476)
     at
org.geotools.data.AbstractFeatureSource.getCount(AbstractFeatureSource.java:221)
     at
org.geotools.data.DefaultFeatureResults.getCount(DefaultFeatureResults.java:196)
     at
org.vfny.geoserver.responses.wfs.FeatureResponse.execute(FeatureResponse.java:285)
     at
org.vfny.geoserver.responses.wfs.FeatureResponse.execute(FeatureResponse.java:142)
     at
org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:357)
     at
org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:295)
     at
org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:249)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
     at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
     at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
     at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
     at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
     at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
     at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
     at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
     at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
     at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
     at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
     at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
     at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
     at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
     at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
     at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
     at java.lang.Thread.run(Thread.java:534)
Caused by: java.lang.RuntimeException: Error building SeFilter
     at
org.geotools.filter.GeometryEncoderSDE.visit(GeometryEncoderSDE.java:210)
     at
org.geotools.filter.GeometryFilterImpl.accept(GeometryFilterImpl.java:353)
     at
org.geotools.filter.GeometryEncoderSDE.encode(GeometryEncoderSDE.java:144)
     at
org.geotools.data.arcsde.FilterSet.createSpatialFilters(ArcSDEAdapter.java:635)
     at
org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:424)
     ... 37 more
Caused by: java.lang.IllegalArgumentException: no geometry builder is
defined to construct class com.vividsolutions.jts.geom.GeometryCollection
instances.
     at
org.geotools.data.arcsde.GeometryBuilder.builderFor(GeometryBuilder.java:391)
     at
org.geotools.filter.GeometryEncoderSDE.addSpatialFilter(GeometryEncoderSDE.java:258)
     at
org.geotools.filter.GeometryEncoderSDE.visit(GeometryEncoderSDE.java:186)
     ... 41 more
   </ServiceException>
</ServiceExceptionReport>

doing a query to an area in the target dataset that has no feature but is
within the boundings works fine (i.e. a feature set with no features), you
only get this error when the filter request is outside the boundings of the
dataset. Altering the boundings in the WFS config has no effect, i'm
guessing SDE is returning an 'out of bounds' error that is choking
geoserver ? is this because its ArcSDE version 8.2 and not 8.3 ?

Cheers and well done on the excellent work !

-ivan

Ivan Price
Shared Land Services
Department of Land Information
Western Australia
Ivan.Price@anonymised.com
+61 08 9273 7520

This e-mail and any files transmitted with it are intended only for the use
of the addressee(s). It may contain information that is confidential and
privileged. If you are not an intended recipient, any use, interference
with, disclosure, distribution or copying of this material is unauthorised
and prohibited. If you receive this in error, please notify the author by
return e-mail or telephone +61-8-9273 7533. Information in this message
not relating to the official business of DLI shall be understood as neither
given nor endorsed by it. While every care is taken, it is recommended
that you scan any attachments for viruses. DLI liability is limited to
re-supplying affected attachments.

Ok, I just put this fix in to geotools. The precomputation of the
intersection from the spatial filter would lead to a geometry
collection of two if it was completely outside the bounds. So I did a
bit of a hack to fix it, let me know if that introduces other problems
for some reason, but I think it should be fine. You can download the
updated jar file for geoserver from the geotools jira task at:
http://jira.codehaus.org/browse/GEOT-238 Let me know if it works.

Chris

Quoting Ivan.Price@anonymised.com:

Hi there,

I've come across what might be a bug in the ArcSDE data source.

i'm running geoserver 1.2.0 on jakarta 5.0.27 on windows 2000, ArcSDE
is
version 8.2

When i do a getfeature with a spatial filter where the spatial filter
is in
the bounds of the target datasource such as:

http://beta.landgate.com.au/geoserver/wfs/GetFeature
<wfs:GetFeature service="WFS" version="1.0.0"
  outputFormat="GML2"
  xmlns:topp="http://www.openplans.org/topp&quot;
  xmlns:wfs="http://www.opengis.net/wfs&quot;
  xmlns="http://www.opengis.net/ogc&quot;
  xmlns:ogc="http://www.opengis.net/ogc&quot;
  xmlns:gml="http://www.opengis.net/gml&quot;
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation="http://www.opengis.net/wfs

http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd&quot;&gt;
  <wfs:Query typeName="topp:SDE.W_PLANNING_MRSBDRY">
      <ogc:Filter>
      <ogc:Intersects>
        <ogc:PropertyName>the_geom</ogc:PropertyName>
          <gml:Point
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326
">
            <gml:coordinates>116.30,-31.80</gml:coordinates>
          </gml:Point>
        </ogc:Intersects>
      </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>

it works fine, however if i make a modification to the location of
the
point so that it is outside of the extent of the dataset (say
126.30,
-31.80) i get a java error:

<?xml version="1.0" ?>
<ServiceExceptionReport
   version="1.2.0"
   xmlns="http://www.opengis.net/ogc&quot;
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;
   xsi:schemaLocation="http://www.opengis.net/ogc
http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd&quot;&gt;
   <ServiceException>
      problem with FeatureResults:
org.geotools.data.DataSourceException:
Encoder error Error building SeFilter
     at

org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:446)

     at

org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:363)

     at

org.geotools.data.arcsde.ArcSDEDataStore.getCount(ArcSDEDataStore.java:476)

     at

org.geotools.data.AbstractFeatureSource.getCount(AbstractFeatureSource.java:221)

     at

org.geotools.data.DefaultFeatureResults.getCount(DefaultFeatureResults.java:196)

     at

org.vfny.geoserver.responses.wfs.FeatureResponse.execute(FeatureResponse.java:285)

     at

org.vfny.geoserver.responses.wfs.FeatureResponse.execute(FeatureResponse.java:142)

     at

org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:357)

     at

org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:295)

     at

org.vfny.geoserver.servlets.AbstractService.doPost(AbstractService.java:249)

     at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     at

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)

     at

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)

     at

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)

     at

org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

     at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

     at

org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)

     at

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)

     at

org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

     at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

     at

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)

     at

org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

     at

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

     at

org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)

     at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

     at

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

     at

org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)

     at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)

     at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
     at

org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)

     at
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
     at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
     at
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
     at

org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)

     at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
     at

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)

     at java.lang.Thread.run(Thread.java:534)
Caused by: java.lang.RuntimeException: Error building SeFilter
     at

org.geotools.filter.GeometryEncoderSDE.visit(GeometryEncoderSDE.java:210)

     at

org.geotools.filter.GeometryFilterImpl.accept(GeometryFilterImpl.java:353)

     at

org.geotools.filter.GeometryEncoderSDE.encode(GeometryEncoderSDE.java:144)

     at

org.geotools.data.arcsde.FilterSet.createSpatialFilters(ArcSDEAdapter.java:635)

     at

org.geotools.data.arcsde.ArcSDEAdapter.createSeQuery(ArcSDEAdapter.java:424)

     ... 37 more
Caused by: java.lang.IllegalArgumentException: no geometry builder is
defined to construct class
com.vividsolutions.jts.geom.GeometryCollection
instances.
     at

org.geotools.data.arcsde.GeometryBuilder.builderFor(GeometryBuilder.java:391)

     at

org.geotools.filter.GeometryEncoderSDE.addSpatialFilter(GeometryEncoderSDE.java:258)

     at

org.geotools.filter.GeometryEncoderSDE.visit(GeometryEncoderSDE.java:186)

     ... 41 more
   </ServiceException>
</ServiceExceptionReport>

doing a query to an area in the target dataset that has no feature
but is
within the boundings works fine (i.e. a feature set with no
features), you
only get this error when the filter request is outside the boundings
of the
dataset. Altering the boundings in the WFS config has no effect, i'm
guessing SDE is returning an 'out of bounds' error that is choking
geoserver ? is this because its ArcSDE version 8.2 and not 8.3 ?

Cheers and well done on the excellent work !

-ivan

Ivan Price
Shared Land Services
Department of Land Information
Western Australia
Ivan.Price@anonymised.com
+61 08 9273 7520

This e-mail and any files transmitted with it are intended only for
the use
of the addressee(s). It may contain information that is confidential
and
privileged. If you are not an intended recipient, any use,
interference
with, disclosure, distribution or copying of this material is
unauthorised
and prohibited. If you receive this in error, please notify the
author by
return e-mail or telephone +61-8-9273 7533. Information in this
message
not relating to the official business of DLI shall be understood as
neither
given nor endorsed by it. While every care is taken, it is
recommended
that you scan any attachments for viruses. DLI liability is limited
to
re-supplying affected attachments.

-------------------------------------------------------
SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank
Media
100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33
Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift.
http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

----------------------------------------------------------
This mail sent through IMP: https://webmail.limegroup.com/