[gdal-dev] SWIG JNI binding question with GetMetadataItem function

Jim Pendleton jimp at ittvis.com
Wed Aug 10 19:34:53 EDT 2011

In GDAL 1.8.1 I'm attempting to call GetMetadataItem() within the
context of an Android 2.2 Java app, but I'm getting an error,


08-10 22:13:41.750: WARN/dalvikvm(546): JNI WARNING: jstring 0x40569100
points to non-string object (Check_GetStringUTFChars)


An access violation error follows this.


I've successfully opened the image and have a valid Dataset object.
I've debugged my way through the JPIPKAKDataset initialization method so
I'm pretty confident that much is working properly.


I don't know if this is a problem with the swig bindings or something
else.  I hope someone's run into this one before.


My Java code is really straightforward:

      public int getDecompositionLevels() {

            if (gdalDataset != null)


                  String key = "JPIP_NRESOLUTIONLEVELS";

                  String domain = "JPIP";

Integer.parseInt(gdalDataset.GetMetadataItem(key, domain));

            } else {

                  return -1;



This corresponds to the API definition found here:


.lang.String, java.lang.String)


I've also tried the variant that uses a default domain string with the
same error as a result.


I'm using the gdal_wrap.cpp generated in the swig/java directory along
with corresponding gdal.jar file.


The org.gdal.gdal.MajorObject.java class defines the interface as


  public String GetMetadataItem(String pszName, String pszDomain) {

    return gdalJNI.MajorObject_GetMetadataItem__SWIG_0(swigCPtr, this,
pszName, pszDomain);



The swig interface file MajorObject.i defines this as



 * GetMetadataItem


  %apply Pointer NONNULL {const char * pszName};

  const char *GetMetadataItem( const char *pszName, const char
*pszDomain = "" ) {

    return GDALGetMetadataItem( self, pszName, pszDomain);



While the generated gdal_wrap.cpp is


SWIGINTERN char const
*self,char const *pszName,char const *pszDomain=""){

    return GDALGetMetadataItem( self, pszName, pszDomain);



I've found a thread discussing a similar issue under the android-ndk
group, but without the swig component:




I infer from that discussion that either the GDAL interface definition
file needs to be tweaked or I need to use javah instead of swig.


I'm still new to all of this (including GDAL) so assume I'm missing
something blatantly obvious.


Thanks for any help,

Jim P.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20110810/35f4292e/attachment.html

More information about the gdal-dev mailing list