[Geoserver-users] imagemosaic.jdbc : an explanation for "Could not list layers for this store"

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`, maxyfloat8, 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

Hi Ernest

XML names are case sensitive.

Different databases have different defaults.

PostGres converts DB names to lowercase
DB2 or Oracle convert DB names to uppercase

Cheers
Christian

···

On Mon, Jan 25, 2016 at 11:19 AM, Ernest CHIARELLO <ernest.chiarello@anonymised.com> wrote:

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`, maxyfloat8, 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


Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140


Geoserver-users mailing list
Geoserver-users@anonymised.comsts.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

DI Christian Mueller MSc (GIS), MSc (IT-Security)
OSS Open Source Solutions GmbH