You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2007/10/30 22:40:27 UTC
svn commit: r590475 - in /maven/plugins/trunk/maven-install-plugin: ./
src/main/java/org/apache/maven/plugin/install/ src/main/java/org/codehaus/
src/main/java/org/codehaus/plexus/ src/main/java/org/codehaus/plexus/util/
src/main/java/org/codehaus/plex...
Author: hboutemy
Date: Tue Oct 30 14:40:26 2007
New Revision: 590475
URL: http://svn.apache.org/viewvc?rev=590475&view=rev
Log:
[MINSTALL-44] add XML encoding support for POM reading/writing
Added:
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java (with props)
maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java (with props)
Modified:
maven/plugins/trunk/maven-install-plugin/pom.xml
maven/plugins/trunk/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java
maven/plugins/trunk/maven-install-plugin/src/test/resources/unit/install-file-with-pomFile-test/plugin-config.xml
Modified: maven/plugins/trunk/maven-install-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/pom.xml?rev=590475&r1=590474&r2=590475&view=diff
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-install-plugin/pom.xml Tue Oct 30 14:40:26 2007
@@ -62,9 +62,9 @@
<version>2.0.6</version>
</dependency>
<dependency>
- <groupId>org.apache.maven.shared</groupId>
+ <groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
- <version>1.0-beta-1</version>
+ <version>2.4-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: maven/plugins/trunk/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java?rev=590475&r1=590474&r2=590475&view=diff
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java (original)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/apache/maven/plugin/install/InstallFileMojo.java Tue Oct 30 14:40:26 2007
@@ -33,16 +33,14 @@
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.artifact.ProjectArtifactMetadata;
import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.WriterFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.MalformedURLException;
@@ -225,8 +223,8 @@
model.setVersion( version );
model.setPackaging( packaging );
model.setDescription( "POM was created from install:install-file" );
- // TODO use WriterFactory.newXmlWriter() when plexus-utils is upgraded to 1.4.5+
- fw = new OutputStreamWriter( new FileOutputStream( tempFile ), "UTF-8" );
+
+ fw = WriterFactory.newXmlWriter( tempFile );
tempFile.deleteOnExit();
new MavenXpp3Writer().write( fw, model );
metadata = new ProjectArtifactMetadata( artifact, tempFile );
@@ -302,8 +300,7 @@
Reader reader = null;
try
{
- // TODO use ReaderFactory.newXmlReader() when plexus-utils is upgraded to 1.4.5+
- reader = new InputStreamReader( new FileInputStream( aFile ), "UTF-8" );
+ reader = ReaderFactory.newXmlReader( aFile );
MavenXpp3Reader mavenReader = new MavenXpp3Reader();
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,182 @@
+package org.codehaus.plexus.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.nio.charset.Charset;
+
+import org.codehaus.plexus.util.xml.XmlStreamReader;
+
+/**
+ * Utility to create Readers from streams, with explicit encoding choice: platform default,
+ * XML, or specified.
+ *
+ * @author <a href="mailto:hboutemy@codehaus.org">Herve Boutemy</a>
+ * @see Charset
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ * @version $Id$
+ * @since 1.4.3
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class ReaderFactory
+{
+ /**
+ * ISO Latin Alphabet #1, also known as ISO-LATIN-1.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String ISO_8859_1 = "ISO-8859-1";
+
+ /**
+ * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String US_ASCII = "US-ASCII";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either
+ * order accepted on input, big-endian used on output).
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16 = "UTF-16";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, big-endian byte order.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16BE = "UTF-16BE";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, little-endian byte order.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16LE = "UTF-16LE";
+
+ /**
+ * Eight-bit Unicode Transformation Format.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_8 = "UTF-8";
+
+ /**
+ * The <code>file.encoding</code> System Property.
+ */
+ public static final String FILE_ENCODING = System.getProperty( "file.encoding" );
+
+ /**
+ * Create a new Reader with XML encoding detection rules.
+ * @see XmlStreamReader
+ */
+ public static XmlStreamReader newXmlReader( InputStream in )
+ throws IOException
+ {
+ return new XmlStreamReader( in );
+ }
+
+ /**
+ * Create a new Reader with XML encoding detection rules.
+ * @see XmlStreamReader
+ */
+ public static XmlStreamReader newXmlReader( File file )
+ throws IOException
+ {
+ return new XmlStreamReader( file );
+ }
+
+ /**
+ * Create a new Reader with XML encoding detection rules.
+ * @see XmlStreamReader
+ */
+ public static XmlStreamReader newXmlReader( URL url )
+ throws IOException
+ {
+ return new XmlStreamReader( url );
+ }
+
+ /**
+ * Create a new Reader with default plaform encoding.
+ */
+ public static Reader newPlatformReader( InputStream in )
+ {
+ return new InputStreamReader( in );
+ }
+
+ /**
+ * Create a new Reader with default plaform encoding.
+ */
+ public static Reader newPlatformReader( File file )
+ throws FileNotFoundException
+ {
+ return new FileReader( file );
+ }
+
+ /**
+ * Create a new Reader with default plaform encoding.
+ */
+ public static Reader newPlatformReader( URL url )
+ throws IOException
+ {
+ return new InputStreamReader( url.openStream() );
+ }
+
+ /**
+ * Create a new Reader with specified encoding.
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ */
+ public static Reader newReader( InputStream in, String encoding )
+ throws UnsupportedEncodingException
+ {
+ return new InputStreamReader( in, encoding );
+ }
+
+ /**
+ * Create a new Reader with specified encoding.
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ */
+ public static Reader newReader( File file, String encoding )
+ throws FileNotFoundException, UnsupportedEncodingException
+ {
+ return new InputStreamReader( new FileInputStream(file), encoding );
+ }
+
+ /**
+ * Create a new Reader with specified encoding.
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ */
+ public static Reader newReader( URL url, String encoding )
+ throws IOException
+ {
+ return new InputStreamReader( url.openStream(), encoding );
+ }
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/ReaderFactory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,152 @@
+package org.codehaus.plexus.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.nio.charset.Charset;
+
+import org.codehaus.plexus.util.xml.XmlStreamWriter;
+
+/**
+ * Utility to create Writers, with explicit encoding choice: platform default,
+ * XML, or specified.
+ *
+ * @author <a href="mailto:hboutemy@codehaus.org">Herve Boutemy</a>
+ * @see Charset
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ * @version $Id$
+ * @since 1.4.4
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class WriterFactory
+{
+ /**
+ * ISO Latin Alphabet #1, also known as ISO-LATIN-1.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String ISO_8859_1 = "ISO-8859-1";
+
+ /**
+ * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String US_ASCII = "US-ASCII";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either
+ * order accepted on input, big-endian used on output).
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16 = "UTF-16";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, big-endian byte order.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16BE = "UTF-16BE";
+
+ /**
+ * Sixteen-bit Unicode Transformation Format, little-endian byte order.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_16LE = "UTF-16LE";
+
+ /**
+ * Eight-bit Unicode Transformation Format.
+ * Every implementation of the Java platform is required to support this character encoding.
+ * @see Charset
+ */
+ public static final String UTF_8 = "UTF-8";
+
+ /**
+ * The <code>file.encoding</code> System Property.
+ */
+ public static final String FILE_ENCODING = System.getProperty( "file.encoding" );
+
+ /**
+ * Create a new Writer with XML encoding detection rules.
+ * @see XmlStreamWriter
+ */
+ public static XmlStreamWriter newXmlWriter( OutputStream out )
+ throws IOException
+ {
+ return new XmlStreamWriter( out );
+ }
+
+ /**
+ * Create a new Writer with XML encoding detection rules.
+ * @see XmlStreamWriter
+ */
+ public static XmlStreamWriter newXmlWriter( File file )
+ throws IOException
+ {
+ return new XmlStreamWriter( file );
+ }
+
+ /**
+ * Create a new Writer with default plaform encoding.
+ */
+ public static Writer newPlatformWriter( OutputStream out )
+ {
+ return new OutputStreamWriter( out );
+ }
+
+ /**
+ * Create a new Writer with default plaform encoding.
+ */
+ public static Writer newPlatformWriter( File file )
+ throws IOException
+ {
+ return new FileWriter( file );
+ }
+
+ /**
+ * Create a new Writer with specified encoding.
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ */
+ public static Writer newWriter( OutputStream out, String encoding )
+ throws UnsupportedEncodingException
+ {
+ return new OutputStreamWriter( out, encoding );
+ }
+
+ /**
+ * Create a new Writer with specified encoding.
+ * @see <a href="http://java.sun.com/j2se/1.4.2/docs/guide/intl/encoding.doc.html">Supported encodings</a>
+ */
+ public static Writer newWriter( File file, String encoding )
+ throws UnsupportedEncodingException, FileNotFoundException
+ {
+ return newWriter( new FileOutputStream(file), encoding );
+ }
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/WriterFactory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,786 @@
+/*
+ * Copyright 2004 Sun Microsystems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.codehaus.plexus.util.xml;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.HttpURLConnection;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.text.MessageFormat;
+
+/**
+ * Character stream that handles (or at least attemtps to) all the necessary Voodo to figure out the charset encoding of
+ * the XML document within the stream.
+ * <p>
+ * IMPORTANT: This class is not related in any way to the org.xml.sax.XMLReader. This one IS a character stream.
+ * <p>
+ * All this has to be done without consuming characters from the stream, if not the XML parser will not recognized the
+ * document as a valid XML. This is not 100% true, but it's close enough (UTF-8 BOM is not handled by all parsers right
+ * now, XmlReader handles it and things work in all parsers).
+ * <p>
+ * The XmlReader class handles the charset encoding of XML documents in Files, raw streams and HTTP streams by offering
+ * a wide set of constructors.
+ * <P>
+ * By default the charset encoding detection is lenient, the constructor with the lenient flag can be used for an script
+ * (following HTTP MIME and XML specifications). All this is nicely explained by Mark Pilgrim in his blog, <a
+ * href="http://diveintomark.org/archives/2004/02/13/xml-media-types"> Determining the character encoding of a feed</a>.
+ * <p>
+ *
+ * @author Alejandro Abdelnur
+ * @version revision 1.17 taken on 26/06/2007 from Rome (see https://rome.dev.java.net/source/browse/rome/src/java/com/sun/syndication/io/XmlReader.java)
+ * @deprecated use XmlStreamReader
+ * @since 1.4.3
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class XmlReader extends Reader
+{
+ private static final int BUFFER_SIZE = 4096;
+
+ private static final String UTF_8 = "UTF-8";
+
+ private static final String US_ASCII = "US-ASCII";
+
+ private static final String UTF_16BE = "UTF-16BE";
+
+ private static final String UTF_16LE = "UTF-16LE";
+
+ private static final String UTF_16 = "UTF-16";
+
+ private static final String EBCDIC = "CP1047";
+
+ private static String _staticDefaultEncoding = null;
+
+ private Reader _reader;
+
+ private String _encoding;
+
+ private String _defaultEncoding;
+
+ /**
+ * Sets the default encoding to use if none is set in HTTP content-type, XML prolog and the rules based on
+ * content-type are not adequate. <p/> If it is set to NULL the content-type based rules are used. <p/> By default
+ * it is NULL. <p/>
+ *
+ * @param encoding
+ * charset encoding to default to.
+ */
+ public static void setDefaultEncoding( String encoding )
+ {
+ _staticDefaultEncoding = encoding;
+ }
+
+ /**
+ * Returns the default encoding to use if none is set in HTTP content-type, XML prolog and the rules based on
+ * content-type are not adequate. <p/> If it is NULL the content-type based rules are used. <p/>
+ *
+ * @return the default encoding to use.
+ */
+ public static String getDefaultEncoding()
+ {
+ return _staticDefaultEncoding;
+ }
+
+ /**
+ * Creates a Reader for a File.
+ * <p>
+ * It looks for the UTF-8 BOM first, if none sniffs the XML prolog charset, if this is also missing defaults to
+ * UTF-8.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param file
+ * File to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ *
+ */
+ public XmlReader( File file ) throws IOException
+ {
+ this( new FileInputStream( file ) );
+ }
+
+ /**
+ * Creates a Reader for a raw InputStream.
+ * <p>
+ * It follows the same logic used for files.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param is
+ * InputStream to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream.
+ *
+ */
+ public XmlReader( InputStream is ) throws IOException
+ {
+ this( is, true );
+ }
+
+ /**
+ * Creates a Reader for a raw InputStream.
+ * <p>
+ * It follows the same logic used for files.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create a Reader from.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the stream.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlReader( InputStream is, boolean lenient ) throws IOException, XmlStreamReaderException
+ {
+ _defaultEncoding = _staticDefaultEncoding;
+ try
+ {
+ doRawStream( is, lenient );
+ }
+ catch ( XmlStreamReaderException ex )
+ {
+ if ( !lenient )
+ {
+ throw ex;
+ }
+ else
+ {
+ doLenientDetection( null, ex );
+ }
+ }
+ }
+
+ /**
+ * Creates a Reader using the InputStream of a URL.
+ * <p>
+ * If the URL is not of type HTTP and there is not 'content-type' header in the fetched data it uses the same logic
+ * used for Files.
+ * <p>
+ * If the URL is a HTTP Url or there is a 'content-type' header in the fetched data it uses the same logic used for
+ * an InputStream with content-type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param url
+ * URL to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream of the URL.
+ *
+ */
+ public XmlReader( URL url ) throws IOException
+ {
+ this( url.openConnection() );
+ }
+
+ /**
+ * Creates a Reader using the InputStream of a URLConnection.
+ * <p>
+ * If the URLConnection is not of type HttpURLConnection and there is not 'content-type' header in the fetched data
+ * it uses the same logic used for files.
+ * <p>
+ * If the URLConnection is a HTTP Url or there is a 'content-type' header in the fetched data it uses the same logic
+ * used for an InputStream with content-type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param conn
+ * URLConnection to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream of the URLConnection.
+ *
+ */
+ public XmlReader( URLConnection conn ) throws IOException
+ {
+ _defaultEncoding = _staticDefaultEncoding;
+ boolean lenient = true;
+ if ( conn instanceof HttpURLConnection )
+ {
+ try
+ {
+ doHttpStream( conn.getInputStream(), conn.getContentType(), lenient );
+ }
+ catch ( XmlStreamReaderException ex )
+ {
+ doLenientDetection( conn.getContentType(), ex );
+ }
+ }
+ else if ( conn.getContentType() != null )
+ {
+ try
+ {
+ doHttpStream( conn.getInputStream(), conn.getContentType(), lenient );
+ }
+ catch ( XmlStreamReaderException ex )
+ {
+ doLenientDetection( conn.getContentType(), ex );
+ }
+ }
+ else
+ {
+ try
+ {
+ doRawStream( conn.getInputStream(), lenient );
+ }
+ catch ( XmlStreamReaderException ex )
+ {
+ doLenientDetection( null, ex );
+ }
+ }
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ *
+ */
+ public XmlReader( InputStream is, String httpContentType ) throws IOException
+ {
+ this( is, httpContentType, true );
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header. This constructor is lenient
+ * regarding the encoding detection.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlReader( InputStream is, String httpContentType, boolean lenient, String defaultEncoding )
+ throws IOException, XmlStreamReaderException
+ {
+ _defaultEncoding = ( defaultEncoding == null ) ? _staticDefaultEncoding : defaultEncoding;
+ try
+ {
+ doHttpStream( is, httpContentType, lenient );
+ }
+ catch ( XmlStreamReaderException ex )
+ {
+ if ( !lenient )
+ {
+ throw ex;
+ }
+ else
+ {
+ doLenientDetection( httpContentType, ex );
+ }
+ }
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header. This constructor is lenient
+ * regarding the encoding detection.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlReader( InputStream is, String httpContentType, boolean lenient ) throws IOException, XmlStreamReaderException
+ {
+ this( is, httpContentType, lenient, null );
+ }
+
+ private void doLenientDetection( String httpContentType, XmlStreamReaderException ex ) throws IOException
+ {
+ if ( httpContentType != null )
+ {
+ if ( httpContentType.startsWith( "text/html" ) )
+ {
+ httpContentType = httpContentType.substring( "text/html".length() );
+ httpContentType = "text/xml" + httpContentType;
+ try
+ {
+ doHttpStream( ex.getInputStream(), httpContentType, true );
+ ex = null;
+ }
+ catch ( XmlStreamReaderException ex2 )
+ {
+ ex = ex2;
+ }
+ }
+ }
+ if ( ex != null )
+ {
+ String encoding = ex.getXmlEncoding();
+ if ( encoding == null )
+ {
+ encoding = ex.getContentTypeEncoding();
+ }
+ if ( encoding == null )
+ {
+ encoding = ( _defaultEncoding == null ) ? UTF_8 : _defaultEncoding;
+ }
+ prepareReader( ex.getInputStream(), encoding );
+ }
+ }
+
+ /**
+ * Returns the charset encoding of the XmlReader.
+ * <p>
+ *
+ * @return charset encoding.
+ *
+ */
+ public String getEncoding()
+ {
+ return _encoding;
+ }
+
+ public int read( char[] buf, int offset, int len ) throws IOException
+ {
+ return _reader.read( buf, offset, len );
+ }
+
+ /**
+ * Closes the XmlReader stream.
+ * <p>
+ *
+ * @throws IOException
+ * thrown if there was a problem closing the stream.
+ *
+ */
+ public void close() throws IOException
+ {
+ _reader.close();
+ }
+
+ private void doRawStream( InputStream is, boolean lenient ) throws IOException
+ {
+ BufferedInputStream pis = new BufferedInputStream( is, BUFFER_SIZE );
+ String bomEnc = getBOMEncoding( pis );
+ String xmlGuessEnc = getXMLGuessEncoding( pis );
+ String xmlEnc = getXmlProlog( pis, xmlGuessEnc );
+ String encoding = calculateRawEncoding( bomEnc, xmlGuessEnc, xmlEnc, pis );
+ prepareReader( pis, encoding );
+ }
+
+ private void doHttpStream( InputStream is, String httpContentType, boolean lenient ) throws IOException
+ {
+ BufferedInputStream pis = new BufferedInputStream( is, BUFFER_SIZE );
+ String cTMime = getContentTypeMime( httpContentType );
+ String cTEnc = getContentTypeEncoding( httpContentType );
+ String bomEnc = getBOMEncoding( pis );
+ String xmlGuessEnc = getXMLGuessEncoding( pis );
+ String xmlEnc = getXmlProlog( pis, xmlGuessEnc );
+ String encoding = calculateHttpEncoding( cTMime, cTEnc, bomEnc, xmlGuessEnc, xmlEnc, pis, lenient );
+ prepareReader( pis, encoding );
+ }
+
+ private void prepareReader( InputStream is, String encoding ) throws IOException
+ {
+ _reader = new InputStreamReader( is, encoding );
+ _encoding = encoding;
+ }
+
+ // InputStream is passed for XmlStreamReaderException creation only
+ private String calculateRawEncoding( String bomEnc, String xmlGuessEnc, String xmlEnc, InputStream is )
+ throws IOException
+ {
+ String encoding;
+ if ( bomEnc == null )
+ {
+ if ( xmlGuessEnc == null || xmlEnc == null )
+ {
+ encoding = ( _defaultEncoding == null ) ? UTF_8 : _defaultEncoding;
+ }
+ else if ( xmlEnc.equals( UTF_16 ) && ( xmlGuessEnc.equals( UTF_16BE ) || xmlGuessEnc.equals( UTF_16LE ) ) )
+ {
+ encoding = xmlGuessEnc;
+ }
+ else
+ {
+ encoding = xmlEnc;
+ }
+ }
+ else if ( bomEnc.equals( UTF_8 ) )
+ {
+ if ( xmlGuessEnc != null && !xmlGuessEnc.equals( UTF_8 ) )
+ {
+ throw new XmlStreamReaderException( RAW_EX_1.format( new Object[] { bomEnc, xmlGuessEnc, xmlEnc } ), bomEnc,
+ xmlGuessEnc, xmlEnc, is );
+ }
+ if ( xmlEnc != null && !xmlEnc.equals( UTF_8 ) )
+ {
+ throw new XmlStreamReaderException( RAW_EX_1.format( new Object[] { bomEnc, xmlGuessEnc, xmlEnc } ), bomEnc,
+ xmlGuessEnc, xmlEnc, is );
+ }
+ encoding = UTF_8;
+ }
+ else if ( bomEnc.equals( UTF_16BE ) || bomEnc.equals( UTF_16LE ) )
+ {
+ if ( xmlGuessEnc != null && !xmlGuessEnc.equals( bomEnc ) )
+ {
+ throw new IOException( RAW_EX_1.format( new Object[] { bomEnc, xmlGuessEnc, xmlEnc } ) );
+ }
+ if ( xmlEnc != null && !xmlEnc.equals( UTF_16 ) && !xmlEnc.equals( bomEnc ) )
+ {
+ throw new XmlStreamReaderException( RAW_EX_1.format( new Object[] { bomEnc, xmlGuessEnc, xmlEnc } ), bomEnc,
+ xmlGuessEnc, xmlEnc, is );
+ }
+ encoding = bomEnc;
+ }
+ else
+ {
+ throw new XmlStreamReaderException( RAW_EX_2.format( new Object[] { bomEnc, xmlGuessEnc, xmlEnc } ), bomEnc,
+ xmlGuessEnc, xmlEnc, is );
+ }
+ return encoding;
+ }
+
+ // InputStream is passed for XmlStreamReaderException creation only
+ private String calculateHttpEncoding( String cTMime, String cTEnc, String bomEnc, String xmlGuessEnc,
+ String xmlEnc, InputStream is, boolean lenient ) throws IOException
+ {
+ String encoding;
+ if ( lenient & xmlEnc != null )
+ {
+ encoding = xmlEnc;
+ }
+ else
+ {
+ boolean appXml = isAppXml( cTMime );
+ boolean textXml = isTextXml( cTMime );
+ if ( appXml || textXml )
+ {
+ if ( cTEnc == null )
+ {
+ if ( appXml )
+ {
+ encoding = calculateRawEncoding( bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+ else
+ {
+ encoding = ( _defaultEncoding == null ) ? US_ASCII : _defaultEncoding;
+ }
+ }
+ else if ( bomEnc != null && ( cTEnc.equals( UTF_16BE ) || cTEnc.equals( UTF_16LE ) ) )
+ {
+ throw new XmlStreamReaderException( HTTP_EX_1.format( new Object[] { cTMime, cTEnc, bomEnc, xmlGuessEnc,
+ xmlEnc } ), cTMime, cTEnc, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+ else if ( cTEnc.equals( UTF_16 ) )
+ {
+ if ( bomEnc != null && bomEnc.startsWith( UTF_16 ) )
+ {
+ encoding = bomEnc;
+ }
+ else
+ {
+ throw new XmlStreamReaderException( HTTP_EX_2.format( new Object[] { cTMime, cTEnc, bomEnc,
+ xmlGuessEnc, xmlEnc } ), cTMime, cTEnc, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+ }
+ else
+ {
+ encoding = cTEnc;
+ }
+ }
+ else
+ {
+ throw new XmlStreamReaderException( HTTP_EX_3.format( new Object[] { cTMime, cTEnc, bomEnc, xmlGuessEnc,
+ xmlEnc } ), cTMime, cTEnc, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+ }
+ return encoding;
+ }
+
+ // returns MIME type or NULL if httpContentType is NULL
+ private static String getContentTypeMime( String httpContentType )
+ {
+ String mime = null;
+ if ( httpContentType != null )
+ {
+ int i = httpContentType.indexOf( ";" );
+ mime = ( ( i == -1 ) ? httpContentType : httpContentType.substring( 0, i ) ).trim();
+ }
+ return mime;
+ }
+
+ private static final Pattern CHARSET_PATTERN = Pattern.compile( "charset=([.[^; ]]*)" );
+
+ // returns charset parameter value, NULL if not present, NULL if httpContentType is NULL
+ private static String getContentTypeEncoding( String httpContentType )
+ {
+ String encoding = null;
+ if ( httpContentType != null )
+ {
+ int i = httpContentType.indexOf( ";" );
+ if ( i > -1 )
+ {
+ String postMime = httpContentType.substring( i + 1 );
+ Matcher m = CHARSET_PATTERN.matcher( postMime );
+ encoding = ( m.find() ) ? m.group( 1 ) : null;
+ encoding = ( encoding != null ) ? encoding.toUpperCase() : null;
+ }
+ }
+ return encoding;
+ }
+
+ // returns the BOM in the stream, NULL if not present,
+ // if there was BOM the in the stream it is consumed
+ private static String getBOMEncoding( BufferedInputStream is ) throws IOException
+ {
+ String encoding = null;
+ int[] bytes = new int[3];
+ is.mark( 3 );
+ bytes[0] = is.read();
+ bytes[1] = is.read();
+ bytes[2] = is.read();
+
+ if ( bytes[0] == 0xFE && bytes[1] == 0xFF )
+ {
+ encoding = UTF_16BE;
+ is.reset();
+ is.read();
+ is.read();
+ }
+ else if ( bytes[0] == 0xFF && bytes[1] == 0xFE )
+ {
+ encoding = UTF_16LE;
+ is.reset();
+ is.read();
+ is.read();
+ }
+ else if ( bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF )
+ {
+ encoding = UTF_8;
+ }
+ else
+ {
+ is.reset();
+ }
+ return encoding;
+ }
+
+ // returns the best guess for the encoding by looking the first bytes of the stream, '<?'
+ private static String getXMLGuessEncoding( BufferedInputStream is ) throws IOException
+ {
+ String encoding = null;
+ int[] bytes = new int[4];
+ is.mark( 4 );
+ bytes[0] = is.read();
+ bytes[1] = is.read();
+ bytes[2] = is.read();
+ bytes[3] = is.read();
+ is.reset();
+
+ if ( bytes[0] == 0x00 && bytes[1] == 0x3C && bytes[2] == 0x00 && bytes[3] == 0x3F )
+ {
+ encoding = UTF_16BE;
+ }
+ else if ( bytes[0] == 0x3C && bytes[1] == 0x00 && bytes[2] == 0x3F && bytes[3] == 0x00 )
+ {
+ encoding = UTF_16LE;
+ }
+ else if ( bytes[0] == 0x3C && bytes[1] == 0x3F && bytes[2] == 0x78 && bytes[3] == 0x6D )
+ {
+ encoding = UTF_8;
+ }
+ else if ( bytes[0] == 0x4C && bytes[1] == 0x6F && bytes[2] == 0xA7 && bytes[3] == 0x94 )
+ {
+ encoding = EBCDIC;
+ }
+ return encoding;
+ }
+
+ static final Pattern ENCODING_PATTERN =
+ Pattern.compile( "<\\?xml.*encoding[\\s]*=[\\s]*((?:\".[^\"]*\")|(?:'.[^']*'))", Pattern.MULTILINE );
+
+ // returns the encoding declared in the <?xml encoding=...?>, NULL if none
+ private static String getXmlProlog( BufferedInputStream is, String guessedEnc ) throws IOException
+ {
+ String encoding = null;
+ if ( guessedEnc != null )
+ {
+ byte[] bytes = new byte[BUFFER_SIZE];
+ is.mark( BUFFER_SIZE );
+ int offset = 0;
+ int max = BUFFER_SIZE;
+ int c = is.read( bytes, offset, max );
+ int firstGT = -1;
+ String xmlProlog = null;
+ while ( c != -1 && firstGT == -1 && offset < BUFFER_SIZE )
+ {
+ offset += c;
+ max -= c;
+ c = is.read( bytes, offset, max );
+ xmlProlog = new String( bytes, 0, offset, guessedEnc );
+ firstGT = xmlProlog.indexOf( '>' );
+ }
+ if ( firstGT == -1 )
+ {
+ if ( c == -1 )
+ {
+ throw new IOException( "Unexpected end of XML stream" );
+ }
+ else
+ {
+ throw new IOException( "XML prolog or ROOT element not found on first " + offset + " bytes" );
+ }
+ }
+ int bytesRead = offset;
+ if ( bytesRead > 0 )
+ {
+ is.reset();
+ BufferedReader bReader = new BufferedReader( new StringReader( xmlProlog ) );
+ StringBuffer prolog = new StringBuffer();
+ String line = bReader.readLine();
+ while ( line != null )
+ {
+ prolog.append( line );
+ line = bReader.readLine();
+ }
+ Matcher m = ENCODING_PATTERN.matcher( prolog );
+ if ( m.find() )
+ {
+ encoding = m.group( 1 ).toUpperCase();
+ encoding = encoding.substring( 1, encoding.length() - 1 );
+ }
+ }
+ }
+ return encoding;
+ }
+
+ // indicates if the MIME type belongs to the APPLICATION XML family
+ private static boolean isAppXml( String mime )
+ {
+ return mime != null
+ && ( mime.equals( "application/xml" ) || mime.equals( "application/xml-dtd" )
+ || mime.equals( "application/xml-external-parsed-entity" ) || ( mime.startsWith( "application/" ) && mime.endsWith( "+xml" ) ) );
+ }
+
+ // indicates if the MIME type belongs to the TEXT XML family
+ private static boolean isTextXml( String mime )
+ {
+ return mime != null
+ && ( mime.equals( "text/xml" ) || mime.equals( "text/xml-external-parsed-entity" ) || ( mime.startsWith( "text/" ) && mime.endsWith( "+xml" ) ) );
+ }
+
+ private static final MessageFormat RAW_EX_1 =
+ new MessageFormat( "Invalid encoding, BOM [{0}] XML guess [{1}] XML prolog [{2}] encoding mismatch" );
+
+ private static final MessageFormat RAW_EX_2 =
+ new MessageFormat( "Invalid encoding, BOM [{0}] XML guess [{1}] XML prolog [{2}] unknown BOM" );
+
+ private static final MessageFormat HTTP_EX_1 =
+ new MessageFormat(
+ "Invalid encoding, CT-MIME [{0}] CT-Enc [{1}] BOM [{2}] XML guess [{3}] XML prolog [{4}], BOM must be NULL" );
+
+ private static final MessageFormat HTTP_EX_2 =
+ new MessageFormat(
+ "Invalid encoding, CT-MIME [{0}] CT-Enc [{1}] BOM [{2}] XML guess [{3}] XML prolog [{4}], encoding mismatch" );
+
+ private static final MessageFormat HTTP_EX_3 =
+ new MessageFormat(
+ "Invalid encoding, CT-MIME [{0}] CT-Enc [{1}] BOM [{2}] XML guess [{3}] XML prolog [{4}], Invalid MIME" );
+
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReader.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,163 @@
+package org.codehaus.plexus.util.xml;
+
+import java.io.InputStream;
+import java.io.IOException;
+
+/**
+ * The XmlReaderException is thrown by the XmlReader constructors if the charset encoding can not be determined
+ * according to the XML 1.0 specification and RFC 3023.
+ * <p>
+ * The exception returns the unconsumed InputStream to allow the application to do an alternate processing with the
+ * stream. Note that the original InputStream given to the XmlReader cannot be used as that one has been already read.
+ * <p>
+ *
+ * @author Alejandro Abdelnur
+ * @version revision 1.1 taken on 26/06/2007 from Rome (see https://rome.dev.java.net/source/browse/rome/src/java/com/sun/syndication/io/XmlReaderException.java)
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class XmlReaderException extends IOException
+{
+ private String _bomEncoding;
+
+ private String _xmlGuessEncoding;
+
+ private String _xmlEncoding;
+
+ private String _contentTypeMime;
+
+ private String _contentTypeEncoding;
+
+ private InputStream _is;
+
+ /**
+ * Creates an exception instance if the charset encoding could not be determined.
+ * <p>
+ * Instances of this exception are thrown by the XmlReader.
+ * <p>
+ *
+ * @param msg
+ * message describing the reason for the exception.
+ * @param bomEnc
+ * BOM encoding.
+ * @param xmlGuessEnc
+ * XML guess encoding.
+ * @param xmlEnc
+ * XML prolog encoding.
+ * @param is
+ * the unconsumed InputStream.
+ *
+ */
+ public XmlReaderException( String msg, String bomEnc, String xmlGuessEnc, String xmlEnc, InputStream is )
+ {
+ this( msg, null, null, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+
+ /**
+ * Creates an exception instance if the charset encoding could not be determined.
+ * <p>
+ * Instances of this exception are thrown by the XmlReader.
+ * <p>
+ *
+ * @param msg
+ * message describing the reason for the exception.
+ * @param ctMime
+ * MIME type in the content-type.
+ * @param ctEnc
+ * encoding in the content-type.
+ * @param bomEnc
+ * BOM encoding.
+ * @param xmlGuessEnc
+ * XML guess encoding.
+ * @param xmlEnc
+ * XML prolog encoding.
+ * @param is
+ * the unconsumed InputStream.
+ *
+ */
+ public XmlReaderException( String msg, String ctMime, String ctEnc, String bomEnc, String xmlGuessEnc,
+ String xmlEnc, InputStream is )
+ {
+ super( msg );
+ _contentTypeMime = ctMime;
+ _contentTypeEncoding = ctEnc;
+ _bomEncoding = bomEnc;
+ _xmlGuessEncoding = xmlGuessEnc;
+ _xmlEncoding = xmlEnc;
+ _is = is;
+ }
+
+ /**
+ * Returns the BOM encoding found in the InputStream.
+ * <p>
+ *
+ * @return the BOM encoding, null if none.
+ *
+ */
+ public String getBomEncoding()
+ {
+ return _bomEncoding;
+ }
+
+ /**
+ * Returns the encoding guess based on the first bytes of the InputStream.
+ * <p>
+ *
+ * @return the encoding guess, null if it couldn't be guessed.
+ *
+ */
+ public String getXmlGuessEncoding()
+ {
+ return _xmlGuessEncoding;
+ }
+
+ /**
+ * Returns the encoding found in the XML prolog of the InputStream.
+ * <p>
+ *
+ * @return the encoding of the XML prolog, null if none.
+ *
+ */
+ public String getXmlEncoding()
+ {
+ return _xmlEncoding;
+ }
+
+ /**
+ * Returns the MIME type in the content-type used to attempt determining the encoding.
+ * <p>
+ *
+ * @return the MIME type in the content-type, null if there was not content-type or the encoding detection did not
+ * involve HTTP.
+ *
+ */
+ public String getContentTypeMime()
+ {
+ return _contentTypeMime;
+ }
+
+ /**
+ * Returns the encoding in the content-type used to attempt determining the encoding.
+ * <p>
+ *
+ * @return the encoding in the content-type, null if there was not content-type, no encoding in it or the encoding
+ * detection did not involve HTTP.
+ *
+ */
+ public String getContentTypeEncoding()
+ {
+ return _contentTypeEncoding;
+ }
+
+ /**
+ * Returns the unconsumed InputStream to allow the application to do an alternate encoding detection on the
+ * InputStream.
+ * <p>
+ *
+ * @return the unconsumed InputStream.
+ *
+ */
+ public InputStream getInputStream()
+ {
+ return _is;
+ }
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlReaderException.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2004 Sun Microsystems, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.codehaus.plexus.util.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+/**
+ * Character stream that handles (or at least attemtps to) all the necessary Voodo to figure out the charset encoding of
+ * the XML document within the stream.
+ * <p>
+ * IMPORTANT: This class is not related in any way to the org.xml.sax.XMLReader. This one IS a character stream.
+ * <p>
+ * All this has to be done without consuming characters from the stream, if not the XML parser will not recognized the
+ * document as a valid XML. This is not 100% true, but it's close enough (UTF-8 BOM is not handled by all parsers right
+ * now, XmlReader handles it and things work in all parsers).
+ * <p>
+ * The XmlReader class handles the charset encoding of XML documents in Files, raw streams and HTTP streams by offering
+ * a wide set of constructors.
+ * <P>
+ * By default the charset encoding detection is lenient, the constructor with the lenient flag can be used for an script
+ * (following HTTP MIME and XML specifications). All this is nicely explained by Mark Pilgrim in his blog, <a
+ * href="http://diveintomark.org/archives/2004/02/13/xml-media-types"> Determining the character encoding of a feed</a>.
+ * <p>
+ *
+ * @author Alejandro Abdelnur
+ * @version revision 1.17 taken on 26/06/2007 from Rome (see https://rome.dev.java.net/source/browse/rome/src/java/com/sun/syndication/io/XmlReader.java)
+ * @since 1.4.4
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class XmlStreamReader
+extends XmlReader
+{
+ /**
+ * Creates a Reader for a File.
+ * <p>
+ * It looks for the UTF-8 BOM first, if none sniffs the XML prolog charset, if this is also missing defaults to
+ * UTF-8.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param file
+ * File to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ *
+ */
+ public XmlStreamReader( File file ) throws IOException
+ {
+ super( file );
+ }
+
+ /**
+ * Creates a Reader for a raw InputStream.
+ * <p>
+ * It follows the same logic used for files.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param is
+ * InputStream to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream.
+ *
+ */
+ public XmlStreamReader( InputStream is ) throws IOException
+ {
+ super( is );
+ }
+
+ /**
+ * Creates a Reader for a raw InputStream.
+ * <p>
+ * It follows the same logic used for files.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create a Reader from.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the stream.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlStreamReader( InputStream is, boolean lenient ) throws IOException, XmlStreamReaderException
+ {
+ super( is, lenient );
+ }
+
+ /**
+ * Creates a Reader using the InputStream of a URL.
+ * <p>
+ * If the URL is not of type HTTP and there is not 'content-type' header in the fetched data it uses the same logic
+ * used for Files.
+ * <p>
+ * If the URL is a HTTP Url or there is a 'content-type' header in the fetched data it uses the same logic used for
+ * an InputStream with content-type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param url
+ * URL to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream of the URL.
+ *
+ */
+ public XmlStreamReader( URL url ) throws IOException
+ {
+ super( url );
+ }
+
+ /**
+ * Creates a Reader using the InputStream of a URLConnection.
+ * <p>
+ * If the URLConnection is not of type HttpURLConnection and there is not 'content-type' header in the fetched data
+ * it uses the same logic used for files.
+ * <p>
+ * If the URLConnection is a HTTP Url or there is a 'content-type' header in the fetched data it uses the same logic
+ * used for an InputStream with content-type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param conn
+ * URLConnection to create a Reader from.
+ * @throws IOException
+ * thrown if there is a problem reading the stream of the URLConnection.
+ *
+ */
+ public XmlStreamReader( URLConnection conn ) throws IOException
+ {
+ super( conn );
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * It does a lenient charset encoding detection, check the constructor with the lenient parameter for details.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ *
+ */
+ public XmlStreamReader( InputStream is, String httpContentType ) throws IOException
+ {
+ super( is, httpContentType );
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header. This constructor is lenient
+ * regarding the encoding detection.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlStreamReader( InputStream is, String httpContentType, boolean lenient, String defaultEncoding )
+ throws IOException, XmlStreamReaderException
+ {
+ super( is, httpContentType, lenient, defaultEncoding );
+ }
+
+ /**
+ * Creates a Reader using an InputStream an the associated content-type header. This constructor is lenient
+ * regarding the encoding detection.
+ * <p>
+ * First it checks if the stream has BOM. If there is not BOM checks the content-type encoding. If there is not
+ * content-type encoding checks the XML prolog encoding. If there is not XML prolog encoding uses the default
+ * encoding mandated by the content-type MIME type.
+ * <p>
+ * If lenient detection is indicated and the detection above fails as per specifications it then attempts the
+ * following:
+ * <p>
+ * If the content type was 'text/html' it replaces it with 'text/xml' and tries the detection again.
+ * <p>
+ * Else if the XML prolog had a charset encoding that encoding is used.
+ * <p>
+ * Else if the content type had a charset encoding that encoding is used.
+ * <p>
+ * Else 'UTF-8' is used.
+ * <p>
+ * If lenient detection is indicated an XmlStreamReaderException is never thrown.
+ * <p>
+ *
+ * @param is
+ * InputStream to create the reader from.
+ * @param httpContentType
+ * content-type header to use for the resolution of the charset encoding.
+ * @param lenient
+ * indicates if the charset encoding detection should be relaxed.
+ * @throws IOException
+ * thrown if there is a problem reading the file.
+ * @throws XmlStreamReaderException
+ * thrown if the charset encoding could not be determined according to the specs.
+ *
+ */
+ public XmlStreamReader( InputStream is, String httpContentType, boolean lenient ) throws IOException, XmlStreamReaderException
+ {
+ super( is, httpContentType, lenient );
+ }
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReader.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,69 @@
+package org.codehaus.plexus.util.xml;
+
+import java.io.InputStream;
+
+/**
+ * The XmlStreamReaderException is thrown by the XmlStreamReader constructors if the charset encoding can not be determined
+ * according to the XML 1.0 specification and RFC 3023.
+ * <p>
+ * The exception returns the unconsumed InputStream to allow the application to do an alternate processing with the
+ * stream. Note that the original InputStream given to the XmlStreamReader cannot be used as that one has been already read.
+ * <p>
+ *
+ * @author Alejandro Abdelnur
+ * @version revision 1.1 taken on 26/06/2007 from Rome (see https://rome.dev.java.net/source/browse/rome/src/java/com/sun/syndication/io/XmlReaderException.java)
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class XmlStreamReaderException extends XmlReaderException
+{
+ /**
+ * Creates an exception instance if the charset encoding could not be determined.
+ * <p>
+ * Instances of this exception are thrown by the XmlReader.
+ * <p>
+ *
+ * @param msg
+ * message describing the reason for the exception.
+ * @param bomEnc
+ * BOM encoding.
+ * @param xmlGuessEnc
+ * XML guess encoding.
+ * @param xmlEnc
+ * XML prolog encoding.
+ * @param is
+ * the unconsumed InputStream.
+ *
+ */
+ public XmlStreamReaderException( String msg, String bomEnc, String xmlGuessEnc, String xmlEnc, InputStream is )
+ {
+ super( msg, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+
+ /**
+ * Creates an exception instance if the charset encoding could not be determined.
+ * <p>
+ * Instances of this exception are thrown by the XmlReader.
+ * <p>
+ *
+ * @param msg
+ * message describing the reason for the exception.
+ * @param ctMime
+ * MIME type in the content-type.
+ * @param ctEnc
+ * encoding in the content-type.
+ * @param bomEnc
+ * BOM encoding.
+ * @param xmlGuessEnc
+ * XML guess encoding.
+ * @param xmlEnc
+ * XML prolog encoding.
+ * @param is
+ * the unconsumed InputStream.
+ *
+ */
+ public XmlStreamReaderException( String msg, String ctMime, String ctEnc, String bomEnc, String xmlGuessEnc,
+ String xmlEnc, InputStream is )
+ {
+ super( msg, ctMime, ctEnc, bomEnc, xmlGuessEnc, xmlEnc, is );
+ }
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamReaderException.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java?rev=590475&view=auto
==============================================================================
--- maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java (added)
+++ maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java Tue Oct 30 14:40:26 2007
@@ -0,0 +1,166 @@
+package org.codehaus.plexus.util.xml;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Character stream that handles (or at least attemtps to) all the necessary Voodo to figure out the charset encoding of
+ * the XML document written to the stream.
+ * @author <a href="mailto:hboutemy@codehaus.org">Herve Boutemy</a>
+ * @version $Id$
+ * @since 1.4.4
+ * @deprecated TO BE REMOVED from here when plexus-utils is upgraded to 1.4.5+ (and prerequisite upgraded to Maven 2.0.6)
+ */
+public class XmlStreamWriter
+extends Writer
+{
+ private static final int BUFFER_SIZE = 4096;
+
+ private StringWriter xmlPrologWriter = new StringWriter( BUFFER_SIZE );
+
+ private OutputStream out;
+
+ private Writer writer;
+
+ private String encoding;
+
+ public XmlStreamWriter( OutputStream out )
+ {
+ this.out = out;
+ }
+
+ public XmlStreamWriter( File file )
+ throws FileNotFoundException
+ {
+ this( new FileOutputStream( file ) );
+ }
+
+ public String getEncoding()
+ {
+ return encoding;
+ }
+
+ public void close()
+ throws IOException
+ {
+ if ( writer == null )
+ {
+ encoding = "UTF-8";
+ writer = new OutputStreamWriter( out, encoding );
+ writer.write( xmlPrologWriter.toString() );
+ }
+ writer.close();
+ }
+
+ public void flush()
+ throws IOException
+ {
+ if ( writer != null )
+ {
+ writer.flush();
+ }
+ }
+
+ private void detectEncoding( char[] cbuf, int off, int len )
+ throws IOException
+ {
+ int size = len;
+ StringBuffer xmlProlog = xmlPrologWriter.getBuffer();
+ if ( xmlProlog.length() + len > BUFFER_SIZE )
+ {
+ size = BUFFER_SIZE - xmlProlog.length();
+ }
+ xmlPrologWriter.write( cbuf, off, size );
+
+ // try to determine encoding
+ if ( xmlProlog.length() >= 5 )
+ {
+ if ( xmlProlog.substring( 0, 5 ).equals( "<?xml" ) )
+ {
+ // try to extract encoding from XML prolog
+ int xmlPrologEnd = xmlProlog.indexOf( "?>" );
+ if ( xmlPrologEnd > 0 )
+ {
+ // ok, full XML prolog written: let's extract encoding
+ Matcher m = ENCODING_PATTERN.matcher( xmlProlog.substring( 0, xmlPrologEnd ) );
+ if ( m.find() )
+ {
+ encoding = m.group( 1 ).toUpperCase();
+ encoding = encoding.substring( 1, encoding.length() - 1 );
+ }
+ else
+ {
+ // no encoding found in XML prolog: using default encoding
+ encoding = "UTF-8";
+ }
+ }
+ else
+ {
+ if ( xmlProlog.length() >= BUFFER_SIZE )
+ {
+ // no encoding found in first characters: using default encoding
+ encoding = "UTF-8";
+ }
+ }
+ }
+ else
+ {
+ // no XML prolog: using default encoding
+ encoding = "UTF-8";
+ }
+ if ( encoding != null )
+ {
+ // encoding has been chosen: let's do it
+ xmlPrologWriter = null;
+ writer = new OutputStreamWriter( out, encoding );
+ writer.write( xmlProlog.toString() );
+ if ( len > size )
+ {
+ writer.write( cbuf, off + size, len - size );
+ }
+ }
+ }
+ }
+
+ public void write( char[] cbuf, int off, int len )
+ throws IOException
+ {
+ if ( xmlPrologWriter != null )
+ {
+ detectEncoding( cbuf, off, len );
+ }
+ else
+ {
+ writer.write( cbuf, off, len );
+ }
+ }
+
+ static final Pattern ENCODING_PATTERN = XmlReader.ENCODING_PATTERN;
+}
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/plugins/trunk/maven-install-plugin/src/main/java/org/codehaus/plexus/util/xml/XmlStreamWriter.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/plugins/trunk/maven-install-plugin/src/test/resources/unit/install-file-with-pomFile-test/plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-install-plugin/src/test/resources/unit/install-file-with-pomFile-test/plugin-config.xml?rev=590475&r1=590474&r2=590475&view=diff
==============================================================================
Binary files /tmp/tmpL0tB6G and /tmp/tmp1T1AtY differ