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"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns="http://www.opengis.net/ogc"
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.0.0/WFS-basic.xsd">
<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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/ogc
http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd">
<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.