Re: ReaderInputStream vs XmlParser declared and detected encodings

Mark Wielaard <[email protected]>
Newsgroups gmane.comp.java.classpath.extensions.xml
Message-ID <[email protected]>
Hi,

On Sun, 2004-12-05 at 16:46, Mark Wielaard wrote:
> But this seems a deeper problem with handling InputStream <-> Reader
> interaction combined with XML documents that declare their own encoding.
> I don't have a clue how to handle it properly though since when you use
> a Reader you do that to hide the underlying encoding in the first place,
> so it doesn't mix well with documents declaring their own encoding
> format...

Sigh. And indeed I ran into some more problems like these.
Attached is a patch that got me a little further.

There is one bugfix not related to Readers/InputStreams, encoders and
friends in gnu/xml/libxmlj/transform/GnomeTransformer.java for the case
source == null (plus some extra code to make debugging easier).

Cheers,

Mark

_______________________________________________
Classpathx-xml mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpathx-xml
xml.patch (text/x-patch, 4.9 KB)
Index: gnu/xml/dom/ls/ReaderInputStream.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/gnu/xml/dom/ls/ReaderInputStream.java,v
retrieving revision 1.1
diff -u -r1.1 ReaderInputStream.java
--- gnu/xml/dom/ls/ReaderInputStream.java	4 Dec 2004 21:12:26 -0000	1.1
+++ gnu/xml/dom/ls/ReaderInputStream.java	5 Dec 2004 22:36:30 -0000
@@ -47,17 +47,17 @@
  *
  * @author <a href='mailto:[email protected]'>Chris Burdess</a>
  */
-class ReaderInputStream
+public class ReaderInputStream
   extends InputStream
 {
 
   private Reader reader;
   private String encoding;
 
-  ReaderInputStream(Reader reader)
+  public ReaderInputStream(Reader reader)
   {
     this.reader = reader;
-    encoding = "UTF16";
+    encoding = "UTF-8";
   }
 
   void setEncoding(String encoding)
Index: gnu/xml/dom/ls/WriterOutputStream.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/gnu/xml/dom/ls/WriterOutputStream.java,v
retrieving revision 1.1
diff -u -r1.1 WriterOutputStream.java
--- gnu/xml/dom/ls/WriterOutputStream.java	4 Dec 2004 21:12:26 -0000	1.1
+++ gnu/xml/dom/ls/WriterOutputStream.java	5 Dec 2004 22:36:30 -0000
@@ -47,17 +47,17 @@
  *
  * @author <a href='mailto:[email protected]'>Chris Burdess</a>
  */
-class WriterOutputStream
+public class WriterOutputStream
   extends OutputStream
 {
 
   private Writer writer;
   private String encoding;
 
-  WriterOutputStream(Writer writer)
+  public WriterOutputStream(Writer writer)
   {
     this.writer = writer;
-    this.encoding = "UTF16";
+    this.encoding = "UTF-8";
   }
 
   void setEncoding(String encoding)
Index: gnu/xml/libxmlj/transform/GnomeTransformer.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/gnu/xml/libxmlj/transform/GnomeTransformer.java,v
retrieving revision 1.8
diff -u -r1.8 GnomeTransformer.java
--- gnu/xml/libxmlj/transform/GnomeTransformer.java	4 Dec 2004 21:12:27 -0000	1.8
+++ gnu/xml/libxmlj/transform/GnomeTransformer.java	5 Dec 2004 22:36:30 -0000
@@ -141,7 +141,7 @@
       {
         stylesheet = newStylesheet ();
       } 
-    if (source instanceof StreamSource)
+    else if (source instanceof StreamSource)
       {
         try
           {
@@ -180,7 +180,7 @@
       }
     else
       {
-        String msg = "Source type not supported";
+        String msg = "Source type not supported (" + source + ")";
         throw new TransformerConfigurationException (msg);
       }
   }
@@ -344,7 +344,7 @@
               }
             else
               {
-                String msg = "Result type not supported";
+                String msg = "Result type not supported (" + result + ")";
                 throw new TransformerConfigurationException (msg);
               }
           }
@@ -359,7 +359,7 @@
         Node node = ds.getNode ();
         if (!(node instanceof GnomeDocument))
           {
-            String msg = "Node is not a GnomeDocument";
+            String msg = "Node is not a GnomeDocument (" + node + ")";
             throw new TransformerException (msg);
           }
         GnomeDocument doc = (GnomeDocument) node;
Index: gnu/xml/libxmlj/util/XMLJ.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/gnu/xml/libxmlj/util/XMLJ.java,v
retrieving revision 1.7
diff -u -r1.7 XMLJ.java
--- gnu/xml/libxmlj/util/XMLJ.java	4 Dec 2004 21:12:28 -0000	1.7
+++ gnu/xml/libxmlj/util/XMLJ.java	5 Dec 2004 22:36:30 -0000
@@ -43,6 +43,8 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PushbackInputStream;
+import java.io.Reader;
+import java.io.Writer;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
@@ -57,6 +59,9 @@
 
 import gnu.xml.libxmlj.transform.GnomeTransformerFactory;
 
+import gnu.xml.dom.ls.ReaderInputStream;
+import gnu.xml.dom.ls.WriterOutputStream;
+
 /**
  * Utility functions for libxmlj.
  */
@@ -107,6 +112,12 @@
     String systemId = input.getSystemId ();
     if (in == null)
       {
+	Reader r = input.getCharacterStream();
+	if (r != null)
+	  in = new ReaderInputStream(r);
+      }
+    if (in == null)
+      {
         in = getInputStream(systemId);
       }
     return new NamedInputStream (systemId, in, LOOKAHEAD);
@@ -199,6 +210,12 @@
       }
     if (out == null)
       {
+	Writer w = ((StreamResult) result).getWriter ();
+	if (w != null)
+	  out = new WriterOutputStream (w);
+      }
+    if (out == null)
+      {
         String systemId = result.getSystemId ();
         if (systemId == null)
           {
@@ -216,6 +233,7 @@
             out = new FileOutputStream (systemId);
           }
       }
+
     return out;
   }
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQBBs44yxVhZCJWr9QwRAtoSAJjK+trFlNd0GwID5R5x6fBcgzHDAJ9bE98v
s/utc3jbAoKZLx/PdQMKnw==
=OlpE
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.