Hi App-Schema experts,

I'm trying to map a PostGIS table with columns

    ...
    point      GEOMETRY NOT NULL,
    height     INTEGER  NOT NULL,
    height_uom TEXT     NOT NULL

to the following XML structure:

    <myns:MyFeature gml:id="...">
      <myns:myPoint>
        <myns:MyPoint gml:id="..." 
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326";>
          <gml:pos>10.4721897381 43.2874901353</gml:pos>
          <myns:height uom="FT">3</myns:height>
        </myns:MyPoint>
      </myns:myPoint>
    </myns:MyFeature>

That is, the type of myns:MyPoint is an extension of gml:Point with
an additional element. The corresponding part of the XML schema is:

    <complexType name="MyPointType">
      <complexContent>
        <extension base="gml:PointType">
          <sequence>
            <element name="height" type="gml:MeasureType"/>
          </sequence>
        </extension>
      </complexContent>
    </complexType>

I've tried lots of variants of the following mapping:

    <AttributeMapping>
      <targetAttribute>myns:myPoint</targetAttribute>
      <sourceExpression>
        <OCQL>point</OCQL>
      </sourceExpression>
    </AttributeMapping>
    <AttributeMapping>
      <targetAttribute>myns:myPoint/myns:MyPoint/myns:height</targetAttribute>
      <sourceExpression>
        <OCQL>height</OCQL>
      </sourceExpression>
      <ClientProperty>
        <name>uom</name>
        <value>height_uom</value>
      </ClientProperty>
    </AttributeMapping>

But I always got the following exception:

    java.lang.RuntimeException: Failed to get property: gid
    Failed to get property: gid
    org.geotools.feature.ComplexAttributeImpl cannot be cast to 
com.vividsolutions.jts.geom.Geometry
    ... [1]

Note that the "gid" attribute is optional and even deprecated!
Nevertheless, I added it via the following mapping rule:

    <AttributeMapping>
        <targetAttribute>myns:myPoint/myns:MyPoint</targetAttribute>
        <ClientProperty>
          <name>gid</name>
          <value>'DUMMY'</value>
        </ClientProperty>
    </AttributeMapping>

Then, I got the same error message regarding many other optional(!)
attributes. After providing dummy mappings for them, GeoServer finally
produced an output, but that output didn't contain the geometry data:

    <myns:MyFeature gml:id="...">
      <myns:myPoint>
        <myns:MyPoint axisLabels="DUMMY" gid="DUMMY" gml:id="DUMMY" 
srsDimension="DUMMY" srsName="DUMMY" uomLabels="DUMMY">
          <myns:height uom="FT">3</myns:height>
        </myns:MyPoint>
      </myns:myPoint>
    </myns:MyFeature>

I also tried to map the geometry to the MyPoint sub element:

    <AttributeMapping>
      <targetAttribute>myns:myPoint/myns:MyPoint</targetAttribute>
      <sourceExpression>
        <OCQL>point</OCQL>
      </sourceExpression>
      ...
    </AttributeMapping>

Although the "point" column was not NULL, it produced the following
strange exception:

    
org.geotools.feature.IllegalAttributeException:http://example.com/myns:MyPointType
 not nillable:null value:null
    ... [2]

What am I doing wrong here?


Greets,
Volker



[1] Full trace:

    org.geoserver.platform.ServiceException: java.lang.RuntimeException: Failed 
to get property: gid
        at org.geoserver.ows.Dispatcher.exception(Dispatcher.java:1304)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:240)
        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:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
        at 
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        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)
        at 
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
        at 
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at 
org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at 
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at 
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at 
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at 
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at 
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at 
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
    Caused by: java.lang.RuntimeException: Failed to get property: gid
        at 
org.geotools.xml.impl.GetPropertyExecutor.visit(GetPropertyExecutor.java:93)
        at 
org.geotools.xml.impl.BindingWalker$BindingExecutionChain.execute(BindingWalker.java:215)
        at org.geotools.xml.impl.BindingWalker.walk(BindingWalker.java:181)
        at 
org.geotools.xml.impl.BindingVisitorDispatch.walk(BindingVisitorDispatch.java:44)
        at 
org.geotools.xml.impl.BindingVisitorDispatch.walk(BindingVisitorDispatch.java:29)
        at org.geotools.xml.Encoder.encode(Encoder.java:854)
        at org.geotools.xml.Encoder.encode(Encoder.java:561)
        at 
org.geoserver.wfs.xml.GML3OutputFormat.write(GML3OutputFormat.java:190)
        at 
org.geoserver.wfs.WFSGetFeatureOutputFormat.write(WFSGetFeatureOutputFormat.java:137)
        at org.geoserver.ows.Dispatcher.response(Dispatcher.java:726)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:234)
        ... 49 more
    Caused by: java.lang.ClassCastException: 
org.geotools.feature.ComplexAttributeImpl cannot be cast to 
com.vividsolutions.jts.geom.Geometry
        at 
org.geotools.gml3.bindings.PointTypeBinding.getProperty(PointTypeBinding.java:137)
        at 
org.geotools.xml.impl.GetPropertyExecutor.visit(GetPropertyExecutor.java:91)
        ... 59 more


[2] Full trace:

    org.geoserver.platform.ServiceException: 
org.geotools.feature.IllegalAttributeException:http://example.com/myns:MyPointType
 not nillable:null value:null
        at org.geoserver.ows.Dispatcher.exception(Dispatcher.java:1304)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:240)
        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:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at 
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
        at 
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        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)
        at 
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
        at 
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
        at 
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
        at 
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:73)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at 
org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:183)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at 
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at 
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
        at 
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:324)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
        at 
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
        at 
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
        at 
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
    Caused by: 
org.geotools.feature.IllegalAttributeException:http://example.com/myns:MyPointType
 not nillable:null value:null
        at org.geotools.feature.type.Types.validate(Types.java:112)
        at org.geotools.feature.type.Types.validate(Types.java:80)
        at 
org.geotools.feature.AttributeImpl.&lt;init&gt;(AttributeImpl.java:52)
        at 
org.geotools.feature.GeometryAttributeImpl.&lt;init&gt;(GeometryAttributeImpl.java:66)
        at 
org.geotools.feature.AppSchemaFeatureFactoryImpl.createGeometryAttribute(AppSchemaFeatureFactoryImpl.java:73)
        at 
org.geotools.feature.AttributeBuilder.create(AttributeBuilder.java:571)
        at org.geotools.feature.AttributeBuilder.add(AttributeBuilder.java:486)
        at org.geotools.data.complex.filter.XPath.setValue(XPath.java:730)
        at org.geotools.data.complex.filter.XPath.set(XPath.java:646)
        at org.geotools.data.complex.filter.XPath.set(XPath.java:529)
        at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.setAttributeValue(DataAccessMappingFeatureIterator.java:432)
        at 
org.geotools.data.complex.DataAccessMappingFeatureIterator.computeNext(DataAccessMappingFeatureIterator.java:704)
        at 
org.geotools.data.complex.AbstractMappingFeatureIterator.next(AbstractMappingFeatureIterator.java:193)
        at 
org.geotools.data.complex.MappingFeatureCollection.size(MappingFeatureCollection.java:300)
        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:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        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 $Proxy15.getFeature(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:599)
        at 
org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:230)
        ... 49 more


------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Geoserver-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to