Hello everybody,
i recently experimented a geoserver failure when i tried to use the imagemosaic-jdbc plugin.
the catalina.out file contained the following lines :
Caused by: java.lang.NullPointerException
at org.geotools.gce.imagemosaic.jdbc.Config.readNameAttribute(Config.java:329)
at org.geotools.gce.imagemosaic.jdbc.Config.readNameString(Config.java:298)
at org.geotools.gce.imagemosaic.jdbc.Config.readMapping(Config.java:201)
at org.geotools.gce.imagemosaic.jdbc.Config.readFrom(Config.java:189)
at org.geotools.gce.imagemosaic.jdbc.ImageMosaicJDBCReader.<init>(ImageMosaicJDBCReader.java:133)
... 133 more
25 janv. 09:41:35 INFO [geoserver.web] - Getting list of coverages for saved store file:coverages/france_pgraster.xml
java.lang.RuntimeException: Could not list layers for this store, an error occurred retrieving them: Failed to create reader from file:coverages/france_pgraster.xml and hints null
whereas the mapping.pgraster.xml.inc file contained the following xml statement :
<spatialextension name="pgraster"/>
<mapping>
<mastertable name="mosaic" >
<coveragenameattribute name="name"/>
<maxxattribute name="maxx"/>
<maxyattribute name="maxy"/>
<minxattribute name="minx"/>
<minyattribute name="miny"/>
<resxattribute name="resx"/>
<resyattribute name="resy"/>
<tiletablenameatribute name="tiletable" />
</mastertable>
<tiletable>
<blobattributename name="rast" />
</tiletable>
</mapping>
why did geoserver failed ?
because it expects the string “maxXAttribute” and not “maxxattribute”… !
i made this mistake because i prefer using only lower case when i work with postgresql, and consequently,
i used the bash command “tr [A-Z] [a-z]” to transform the original mapping.pgraster.xml.inc file, proposed here :
http://docs.geotools.org/latest/userguide/library/coverage/pgraster.html
it was stupid, i was too hasty !
indeed, the original file in the documentation proposes this XML statement :
<spatialExtension name="pgraster"/>
<mapping>
<masterTable name="MOSAIC" >
<coverageNameAttribute name="NAME"/>
<maxXAttribute name="maxX"/>
<maxYAttribute name="maxY"/>
<minXAttribute name="minX"/>
<minYAttribute name="minY"/>
<resXAttribute name="resX"/>
<resYAttribute name="resY"/>
<tileTableNameAtribute name="TileTable" />
</masterTable>
<tileTable>
<blobAttributeName name="rast" />
</tileTable>
</mapping>
you can see that according to this XML code, the table should be named “MOSAIC” and not “mosaic”.
but PostgreSQL will not do that !
look at this create table query :
create table MOSAIC (NAME varchar(254) not null, TileTable varchar(254)not null, minX FLOAT8,minY FLOAT8, maxX FLOAT8, maxY FLOAT8,resX FLOAT8, resY FLOAT8, primary key (NAME,TileTable));
the resulting table is :
geoserver=> \d mosaic;
Table « public.mosaic »
Colonne | Type | Modificateurs
-----------+------------------------+---------------
name | character varying(254) | non NULL
tiletable | character varying(254) | non NULL
minx | double precision |
miny | double precision |
maxx | double precision |
maxy | double precision |
resx | double precision |
resy | double precision |
Index :
"mosaic_pkey" PRIMARY KEY, btree (name, tiletable)
where you can see that all strings are lower case. consequently, i think it is better to write everything in lower case, like that :
create table mosaic (name varchar(254) not null, tiletable varchar(254) not null, minx float8, miny ```float8
, maxx float8`, maxy
float8, resx ```float8
, resy ```float8, primary key (name, tiletable));
and finally, you will use the following XML statement in the mapping.pgraster.xml.inc file :
<spatialExtension name="pgraster"/>
<mapping>
<masterTable name="mosaic" >
<coverageNameAttribute name="name"/>
<maxXAttribute name="maxx"/>
<maxYAttribute name="maxy"/>
<minXAttribute name="minx"/>
<minYAttribute name="miny"/>
<resXAttribute name="resx"/>
<resYAttribute name="resy"/>
<tileTableNameAtribute name="tiletable" />
</masterTable>
<tileTable>
<blobAttributeName name="rast" />
</tileTable>
</mapping>
hope this helps…
Ernest.
···
--
Ernest CHIARELLO - [Ernest.Chiarello@anonymised.com](mailto:Ernest.Chiarello@anonymised.com)
UMR6049 ThéMA - Théoriser et Modiliser pour Aménager
CNRS / université de Bourgogne Franche-Comté
32 rue Mégevand 25030 BESANÇON Cedex
Tel : 03 81 66 54 80 Mob : 07 82 99 11 08