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