[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