[kaffe] java.lang.ClassCastException

Jim White jim at pagesmiths.com
Sat Dec 16 07:27:07 PST 2006


Lam King Tin wrote:

> Dear Jim,
> 
> Thank you very much for your reply. 
> 
> I have tried to replace the method with the fixed version from Connector/J 5.0 
> as follows. The casting exception has disappeared. However, now I always 
> encounter below. This encoding should be the most common, right? But why this 
> happens. Thanks.
> 
> SQL Exception:  Unsupported character encoding 'ISO8859_1'.
> ...

Well, more debugging shows that Connection has tried all of the 
configurable character encodings it knows on tests that look like this:

mysql-connector-java-3.0.17-ga/com/mysql/jdbc/Connection.java

    private void configureCharsetProperties(Properties info) throws 
SQLException {
...
    try {
       String testString = "abc";
       testString.getBytes(this.encoding);
    } catch (UnsupportedEncodingException encodingEx) {
       throw new SQLException("Unsupported character "
             + "encoding '" + this.encoding + "'.",
          SQLError.SQL_STATE_INVALID_CONNECTION_ATTRIBUTE);
    }

And the last try must be from this:

     private boolean configureClientCharacterSet() throws SQLException {
         String realJavaEncoding = getEncoding();
         boolean characterSetAlreadyConfigured = false;

...

          if (this.encoding == null) {
              // punt?
              this.encoding = "ISO8859_1";
          }

So I look into Kaffe 1.0.6 to find out how character encodings are 
configured (fortunately or unfortunately depending on how you look at 
it, I've done a fair bit of this sort of thing before...) and we see this:

kaffe-1.0.6/libraries/javalib/kaffe/io/CharToByteConverter.java

private static CharToByteConverter getConverterInternal(String enc)
{
...
    String realenc = encodingRoot + ".CharToByte" + 
ConverterAlias.alias(enc);

kaffe-1.0.6/libraries/javalib/kaffe/io/ConverterAlias.java

public class ConverterAlias {
     private static final Hashtable alias = new Hashtable();

     // All aliases should be upper case
     static {
    alias.put("DEFAULT",    "Default");
    alias.put("ISO-8859-1",    "8859_1");
    alias.put("ISO_8859_1",    "8859_1");
    alias.put("ISO 8859-1",    "8859_1");
    alias.put("ISO 8859_1",    "8859_1");
    alias.put("ISO_8859-1",    "8859_1");
    alias.put("ISO8859_1",     "8859_1");
    alias.put("ISO-IR-100",    "8859_1");
    alias.put("LATIN1",     "8859_1");
    alias.put("L1",         "8859_1");
    alias.put("IBM819",     "8859_1");
    alias.put("CP819",      "8859_1");
    alias.put("CSISOLATIN1",   "8859_1");
    alias.put("ISO-8859-2",    "8859_2");
    alias.put("ISO-8859-3",    "8859_3");
    alias.put("ISO-8859-4",    "8859_4");
    alias.put("ISO-8859-5",    "8859_5");
    alias.put("ISO-8859-6",    "8859_6");
    alias.put("ISO-8859-7",    "8859_7");
    alias.put("ISO-8859-8",    "8859_8");
    alias.put("ISO-8859-9",    "8859_9");
    alias.put("ISO-2022-JP",   "EUC_JP");
    alias.put("EBCDIC",     "CP1046");
    alias.put("UTF-8",      "UTF8");
    alias.put("KOI8-R",     "KOI8_R");
    /* add more here */
     }

So we see that "ISO8859_1" is not an alias kno.  Try changing that line 
in Connector.java to use one like "ISO-8859-1".  That should get you 
past the initial failure, but whether you'll have a working 
configuration may a bit doubtful.

Jim





More information about the kaffe mailing list