[ http://issues.apache.org/jira/browse/XERCESJ-1024?page=comments#action_54658 ] Juergen Birkle commented on XERCESJ-1024: -----------------------------------------
Sorry, found a "System.out.println(...)" in my code, this must be removed!!! Best regards, Juergen Birkle > DOMSerializerImpl.writeToString() generates bugy XML due to implementation error in > sun.io.CharToByteConverter > -------------------------------------------------------------------------------------------------------------- > > Key: XERCESJ-1024 > URL: http://issues.apache.org/jira/browse/XERCESJ-1024 > Project: Xerces2-J > Type: Bug > Components: DOM, Serialization > Versions: 2.6.2 > Environment: Linux, Xerces 2.6.2 from CVS, JDK1.3.1 and JDK1.4.2 > Reporter: Juergen Birkle > Priority: Critical > > There is a major bug in the class sun.io.CharToByteConverter !!! > The following code can be used to reproduce this error: > ----- > public class Test { > public static void main(String[] args) > { > try { > sun.io.CharToByteConverter ctbc = > sun.io.CharToByteConverter.getConverter("UTF-16"); > boolean result = ctbc.canConvert('a'); > System.out.println("Result1 = " + result); > result = ctbc.canConvert('a'); > System.out.println("Result2 = " + result); > result = ctbc.canConvert('a'); > System.out.println("Result3 = " + result); > } > catch(Exception e) { > System.err.println("Error\n" + e); > } > } > } > ----- > The output of this code is: > ----- > Result1 = false > Result2 = true > Result3 = true > ----- > As you can see, the first call to the method failed! > Because of this Bug the method writeToString(Node) from class DOMSerializerImpl > generates bugy XML code! > The class "sun.io.CharToByteConverter" is used in the class "EncodingInfo". I fixed > the bug by rewriting the method "isPrintable(char ch)": > ----- > public boolean isPrintable(char ch) { > if(ch <= this.lastPrintable) > return true; > if(fCharToByteConverter == null) { > if(fHaveTriedCToB || !fgConvertersAvailable) { > // forget it; nothing we can do... > return false; > } > if (fArgsForMethod == null) { > fArgsForMethod = new Object [1]; > } > // try and create it: > try { > fArgsForMethod[0] = javaName; > fCharToByteConverter = fgGetConverterMethod.invoke(null, > fArgsForMethod); > } > catch(Exception e) { > // don't try it again... > fHaveTriedCToB = true; > return false; > } > // > --------------------------------------------------------------------------------- > // NO FUNCTION - ONLY BUG WORKAROUND > // > // There is a bug in the implementation of sun.io.CharToByteConverter!!! > // Because of this it is necessary to call the method once before > // it can be used correct! > try { > fArgsForMethod[0] = new Character('a'); > fgCanConvertMethod.invoke(fCharToByteConverter, fArgsForMethod); > } > catch(Exception e) { > // obviously can't use this converter; probably some kind of > // security restriction > fCharToByteConverter = null; > fHaveTriedCToB = false; > return false; > } > // > --------------------------------------------------------------------------------- > } > try { > fArgsForMethod[0] = new Character(ch); > Boolean tmp = (Boolean)fgCanConvertMethod.invoke(fCharToByteConverter, > fArgsForMethod); > boolean result = tmp.booleanValue(); > System.out.println("Result = " + result); > return result; > } > catch (Exception e) { > // obviously can't use this converter; probably some kind of > // security restriction > fCharToByteConverter = null; > fHaveTriedCToB = false; > return false; > } > } > ----- > I don't know where else in Xerces the class sun.io.CharToByteConverter is used, but > all occurrences must be checked and fixed with a workaround! > Best regards, > Juergen Birkle -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
