[ 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]

Reply via email to