Hi Vincent,

Author: vsiveton
Date: Sat Dec  6 06:41:44 2008
New Revision: 723989

URL: http://svn.apache.org/viewvc?rev=723989&view=rev
Log:
DOXIA-265: Add an EntityResolver in AbstractXmlParser#getXmlReader()

o added a simple cached file mechanism

Modified:
    
maven/doxia/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
[...]
+            byte[] res = (byte[]) cache.get( systemId );
+            // already cached?
+            if ( res == null )
+            {
+                File temp =
+                    new File( System.getProperty( "java.io.tmpdir" ), 
FileUtils.getFile( systemId ).getName() );
+                // maybe already as a temp file?
+                if ( !temp.exists() )
+                {
+                    res = IOUtil.toByteArray( new URL( systemId ).openStream() 
);
+                    IOUtil.copy( res, WriterFactory.newPlatformWriter( temp ) 
);
+                }
+                else
+                {
+                    res = IOUtil.toByteArray( ReaderFactory.newPlatformReader( 
temp ) );
+                }
+
+                cache.put( systemId, res );
+            }
+
+            InputSource is = new InputSource( new ByteArrayInputStream( res ) 
);
+            is.setPublicId( publicId );
+            is.setSystemId( systemId );
+

Is it safe to use a reader here, especially a platform reader? Byte streams that don't match the intended encoding get crippled but is the encoding of the data known here? Should this maybe just use
  IOUtil.copy( byte[], OutputStream )
and
  IOUtil.toByteArray( InputStream )
i.e. simply move bytes around instead of thinking about characters?


Benjamin

Reply via email to