[Geoserver-devel] duplicate attribute types error when adding oracle spatial layer

Hi there,

we're getting the following stack trace when trying to add a layer from
an Oracle Spatial 10g server.

other oracle layers from this database are working fine, but a decent
number .. are giving this error.

running geoserver 1.3.0 on windows 2000...
Version of JVM: Sun Microsystems Inc. : 1.4.2; Apache Tomcat/4.1.27

any ideas ?

cheers,

-ivan

Ivan Price
Spatial Systems Manager
Northern Territory Land Information System
Department of Planning and Infrastructure
Northern Territory Government
Tel: (08) 8924 4024
Fax: (08) 8924 4045
Email: ivan.price@anonymised.com

SQL> describe cadastre;
Name Null? Type
----------------------------------------- --------
----------------------------
LAISKEY NOT NULL CHAR(15)
LOCATION VARCHAR2(3)
LTOCODE CHAR(5)
PARCEL VARCHAR2(5)
PART_PARCEL CHAR(2)
PARCEL_TYPE CHAR(20)
AREA_M2 NUMBER(20)
ST_NUMBER NUMBER(10)
ST_PART CHAR(20)
ST_NAME VARCHAR2(20)
ST_TYPE CHAR(4)
ST_SUBURB VARCHAR2(20)
SURVEY VARCHAR2(10)
TEN_REF_TYPE CHAR(4)
TEN_REF_NUM NUMBER(20)
TEN_STATUS CHAR(1)
TEN_VOL_TYPE CHAR(4)
TEN_VOLUME NUMBER(20)
TEN_FOLIO NUMBER(20)
TP_ZONE CHAR(6)
GEOMETRY MDSYS.SDO_GEOMETRY
STATUS_CODE CHAR(1)
PFI NOT NULL NUMBER(8)
UFI NOT NULL NUMBER(10)
FEAT_NAME CHAR(8)

SQL>

javax.servlet.ServletException: Duplicate AttributeTypes
DefaultAttributeType [name=LAISKEY , type=class java.lang.String ,
nillable=true, min=1, max=1]
  at
org.apache.struts.action.RequestProcessor.processException(RequestProces
sor.java:545)
  at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:486)
  at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
  at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:247)
  at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
  at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharac
terEncodingFilter.java:122)
  at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:213)
  at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
  at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:256)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:191)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:241
6)
  at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:180)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherVa
lve.java:171)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
  at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:172)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:174)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
  at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:60
1)
  at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:392)
  at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:56
5)
  at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:619)
  at java.lang.Thread.run(Thread.java:534)

root cause

java.lang.IllegalArgumentException: Duplicate AttributeTypes
DefaultAttributeType [name=LAISKEY , type=class java.lang.String ,
nillable=true, min=1, max=1]
  at
org.geotools.feature.FeatureTypeBuilder.check(FeatureTypeBuilder.java:60
2)
  at
org.geotools.feature.FeatureTypeBuilder.addType(FeatureTypeBuilder.java:
349)
  at
org.geotools.feature.FeatureTypeBuilder.addTypes(FeatureTypeBuilder.java
:329)
  at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:219)
  at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:169)
  at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:248)
  at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:264)
  at
org.geotools.data.jdbc.JDBC1DataStore.buildSchema(JDBC1DataStore.java:11
71)
  at
org.geotools.data.jdbc.FeatureTypeHandler.getFeatureTypeInfo(FeatureType
Handler.java:200)
  at
org.geotools.data.jdbc.FeatureTypeHandler.getSchema(FeatureTypeHandler.j
ava:168)
  at
org.geotools.data.jdbc.JDBC1DataStore.getSchema(JDBC1DataStore.java:388)
  at
org.vfny.geoserver.action.data.DataFeatureTypesNewAction.execute(DataFea
tureTypesNewAction.java:86)
  at
org.vfny.geoserver.action.ConfigAction.execute(ConfigAction.java:98)
  at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:484)
  at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
  at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
  at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:247)
  at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
  at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharac
terEncodingFilter.java:122)
  at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:213)
  at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
  at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:256)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:191)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:241
6)
  at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:180)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherVa
lve.java:171)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
  at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:172)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:174)
  at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
  at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
  at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
  at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:60
1)
  at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:392)
  at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:56
5)
  at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:619)
  at java.lang.Thread.run(Thread.java:534)

Ivan,

I believe that I may have seen his before, or at least something like it. From what I remember, the duplicate attribute error resulted from having two instances of the same table in Oracle owned by different schemas and the user connecting from GeoServer having access to both. For example, if two users have the same table defined and the user configured for GeoServer has the DBA Oracle role defined, the user will be able to see both tables and the error may occur. I could be completely incorrect as this being the problem, but I thought I would pass it along just in case it was. It should be easy to test by just changing the Oracle permissions in the user connecting from GeoServer.

Regards,
Matt

Matthew White
mgwhite@anonymised.com

Ivan Price Ivan.Price@anonymised.com wrote:

Hi there,

we’re getting the following stack trace when trying to add a layer from
an Oracle Spatial 10g server.

other oracle layers from this database are working fine, but a decent
number … are giving this error.

running geoserver 1.3.0 on windows 2000…
Version of JVM: Sun Microsystems Inc. : 1.4.2; Apache Tomcat/4.1.27

any ideas ?

cheers,

-ivan

Ivan Price
Spatial Systems Manager
Northern Territory Land Information System
Department of Planning and Infrastructure
Northern Territory Government
Tel: (08) 8924 4024
Fax: (08) 8924 4045
Email: ivan.price@anonymised.com

SQL> describe cadastre;
Name Null? Type



LAISKEY NOT NULL CHAR(15)
LOCATION VARCHAR2(3)
LTOCODE CHAR(5)
PARCEL VARCHAR2(5)
PART_PARCEL CHAR(2)
PARCEL_TYPE CHAR(20)
AREA_M2 NUMBER(20)
ST_NUMBER NUMBER(10)
ST_PART CHAR(20)
ST_NAME VARCHAR2(20)
ST_TYPE CHAR(4)
ST_SUBURB VARCHAR2(20)
SURVEY VARCHAR2(10)
TEN_REF_TYPE CHAR(4)
TEN_REF_NUM NUMBER(20)
TEN_STATUS CHAR(1)
TEN_VOL_TYPE CHAR(4)
TEN_VOLUME NUMBER(20)
TEN_FOLIO NUMBER(20)
TP_ZONE CHAR(6)
GEOMETRY MDSYS.SDO_GEOMETRY
STATUS_CODE CHAR(1)
PFI NOT NULL NUMBER(8)
UFI NOT NULL NUMBER(10)
FEAT_NAME CHAR(8)

SQL>

javax.servlet.ServletException: Duplicate AttributeTypes
DefaultAttributeType [name=LAISKEY , type=class java.lang.String ,
nillable=true, min=1, max=1]
at
org.apache.struts.action.RequestProcessor.processException(RequestProces
sor.java:545)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:486)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharac
terEncodingFilter.java:122)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:241
6)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherVa
lve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:60
1)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:392)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:56
5)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:619)
at java.lang.Thread.run(Thread.java:534)

root cause

java.lang.IllegalArgumentException: Duplicate AttributeTypes
DefaultAttributeType [name=LAISKEY , type=class java.lang.String ,
nillable=true, min=1, max=1]
at
org.geotools.feature.FeatureTypeBuilder.check(FeatureTypeBuilder.java:60
2)
at
org.geotools.feature.FeatureTypeBuilder.addType(FeatureTypeBuilder.java:
349)
at
org.geotools.feature.FeatureTypeBuilder.addTypes(FeatureTypeBuilder.java
:329)
at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:219)
at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:169)
at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:248)
at
org.geotools.feature.FeatureTypes.newFeatureType(FeatureTypes.java:264)
at
org.geotools.data.jdbc.JDBC1DataStore.buildSchema(JDBC1DataStore.java:11
71)
at
org.geotools.data.jdbc.FeatureTypeHandler.getFeatureTypeInfo(FeatureType
Handler.java:200)
at
org.geotools.data.jdbc.FeatureTypeHandler.getSchema(FeatureTypeHandler.j
ava:168)
at
org.geotools.data.jdbc.JDBC1DataStore.getSchema(JDBC1DataStore.java:388)
at
org.vfny.geoserver.action.data.DataFeatureTypesNewAction.execute(DataFea
tureTypesNewAction.java:86)
at
org.vfny.geoserver.action.ConfigAction.execute(ConfigAction.java:98)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:484)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharac
terEncodingFilter.java:122)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:213)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:241
6)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherVa
lve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:641)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.i
nvokeNext(StandardPipeline.java:643)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:4
80)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:60
1)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:392)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:56
5)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:619)
at java.lang.Thread.run(Thread.java:534)


This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642


Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Yahoo! Mail
Bring photos to life! New PhotoMail makes sharing a breeze.