Justin Deoliveira ha scritto:
> Hi Andrea,
> 
> I think there may be a minor issue with the patch. Is there a patch to
> look at? I am not sure of exactly the change you are proposing but i
> think i ran up against this same issue. If you look at line 1269 on
> JDBC1DataStore there is a comment explaining the problem. Basically it
> boils down to how some of the feature readers and how they copy
> features. Basically some of them just create a null array of attributes
> and then set the objects one by one. However if the feature type says
> that an attribute cannot be null that code will fail. So the workaround
> was to setting minoccurs to > 0 if the attribute was indeed nillable.
> 
> So I think the fix will be cool, but like you say I think we will have
> to fix code in other places too in both geotools and geoserver.

Yeah, the patch follows the directions in that comment (I hope).
Here it is.

----------------------------------------------------------------------------------------

Index: 
C:/progetti/geotools/trunk/modules/plugin/postgis/src/main/java/org/geotools/data/postgis/PostgisDataStore.java
===================================================================
--- 
C:/progetti/geotools/trunk/modules/plugin/postgis/src/main/java/org/geotools/data/postgis/PostgisDataStore.java
 
(revision 24721)
+++ 
C:/progetti/geotools/trunk/modules/plugin/postgis/src/main/java/org/geotools/data/postgis/PostgisDataStore.java
 
(working copy)
@@ -943,13 +943,31 @@
              final int TABLE_NAME = 3;
              final int COLUMN_NAME = 4;
              final int TYPE_NAME = 6;
+            final int NULLABLE = 11;
              String typeName = metadataRs.getString(TYPE_NAME);
-
+
              if (typeName.equals("geometry")) {
                  String tableName = metadataRs.getString(TABLE_NAME);
                  String columnName = metadataRs.getString(COLUMN_NAME);
+
+                // check for nullability
+                int nullCode = metadataRs.getInt( NULLABLE );
+                boolean nillable = true;
+                switch( nullCode ) {
+                    case DatabaseMetaData.columnNoNulls:
+                        nillable = false;
+                        break;
+
+                    case DatabaseMetaData.columnNullable:
+                        nillable = true;
+                        break;
+
+                    case DatabaseMetaData.columnNullableUnknown:
+                        nillable = true;
+                        break;
+                }

-                return getGeometryAttribute(tableName, columnName);
+                return getGeometryAttribute(tableName, columnName, 
nillable);
              } else {
                  return super.buildAttributeType(metadataRs);
              }
@@ -985,6 +1003,7 @@
       *
       * @param tableName The feature table name.
       * @param columnName The geometry column name.
+     * @param nillable
       *
       * @return Geometric attribute.
       *
@@ -995,7 +1014,7 @@
       * @task This should probably take a Transaction, so if things 
mess up then
       *       we can rollback.
       */
-    AttributeType getGeometryAttribute(String tableName, String columnName)
+    AttributeType getGeometryAttribute(String tableName, String 
columnName, boolean nillable)
          throws IOException {
          Connection dbConnection = null;
          Class type = null;
@@ -1095,8 +1114,10 @@
          } catch (FactoryException e) {
              crs = null;
          }
-
-        return AttributeTypeFactory.newAttributeType(columnName, type, 
true, 0, null, crs);
+
+        int min = nillable ? 0 : 1;
+        return AttributeTypeFactory.newAttributeType(columnName, type, 
true, null, null,  crs, min, 1 );
+//        return AttributeTypeFactory.newAttributeType(columnName, 
type, true,  0, null, crs);
      }

      private PostgisAuthorityFactory getPostgisAuthorityFactory() {


----------------------------------------------------------------------------------------

Cheers
Andrea

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to