Hello devs,

I'm currently migrating a WFS service to Geoserver 2.20 (from 2.7) and ran into 
a mapping issue. The exception presented was "java.lang.ClassCastException: 
class java.math.BigDecimal cannot be cast to class java.lang.Boolean".

After some digging I found that Oracle JDBC driver always returns BigDecimal 
for its database number types where boolean fields are modeled as "number(1)". 
This is the oracle convention.
The way mapping can be leveraged in GeoTools seems to be by registering a 
ConverterFactory using the ServiceLoader in Java.

The quick fix in my case was to add a custom converter to the classpath.

I realize there's an existing factory doing Boolean conversion which might be a 
natural candidate.
I am wondering if GT would welcome such a change: 
https://github.com/lislei/geotools/commits/GML_BigDecimal_to_Boolean



Best regards,
Leif Lislegård
java.lang.RuntimeException: java.lang.ClassCastException: class 
java.math.BigDecimal cannot be cast to class java.lang.Boolean 
(java.math.BigDecimal and java.lang.Boolean are in module java.base of loader 
'bootstrap')
        at org.geotools.xsd.Encoder.processChildren(Encoder.java:1024)
        at org.geotools.xsd.Encoder.encode(Encoder.java:651)
        at org.geotools.xsd.Encoder.encode(Encoder.java:551)
        at 
org.geoserver.wfs.xml.GML3OutputFormat.encode(GML3OutputFormat.java:392)
        at 
org.geoserver.wfs.xml.GML3OutputFormat.write(GML3OutputFormat.java:318)
        at 
org.geoserver.wfs.WFSGetFeatureOutputFormat.write(WFSGetFeatureOutputFormat.java:199)
        at org.geoserver.ows.Dispatcher.response(Dispatcher.java:1020)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:275)
        at 
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
        at 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
        at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
        at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
        at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
        at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
        at 
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:295)
        at 
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
        at 
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
        at 
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:353)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:73)
        at 
org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
        at 
org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
        at 
org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:102)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:48)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
        at 
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:82)
        at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at ...
Caused by: java.lang.ClassCastException: class java.math.BigDecimal cannot be 
cast to class java.lang.Boolean (java.math.BigDecimal and java.lang.Boolean are 
in module java.base of loader 'bootstrap')
        at 
org.geotools.xs.bindings.XSBooleanBinding.encode(XSBooleanBinding.java:113)
        at 
org.geotools.gml2.simple.FeatureCollectionEncoderDelegate.encodeSimpleBinding(FeatureCollectionEncoderDelegate.java:292)
        at 
org.geotools.gml2.simple.FeatureCollectionEncoderDelegate.encodeValue(FeatureCollectionEncoderDelegate.java:221)
        at 
org.geotools.gml2.simple.FeatureCollectionEncoderDelegate.encodeFeature(FeatureCollectionEncoderDelegate.java:183)
        at 
org.geotools.gml2.simple.FeatureCollectionEncoderDelegate.encode(FeatureCollectionEncoderDelegate.java:137)
        at org.geotools.xsd.Encoder.processChildren(Encoder.java:1022)
        ... 66 common frames omitted 
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to