Index: java/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.java,v retrieving revision 1.29 diff -u -r1.29 MultiThreadedHttpConnectionManager.java --- java/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.java 11 Dec 2003 01:19:32 -0000 1.29 +++ java/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.java 16 Dec 2003 18:39:00 -0000 @@ -1114,6 +1114,9 @@ } } + /** + * @deprecated + */ public void print(String data) throws IOException, IllegalStateException, HttpRecoverableException { if (hasConnection()) { @@ -1132,6 +1135,9 @@ } } + /** + * @deprecated + */ public void printLine(String data) throws IOException, IllegalStateException, HttpRecoverableException { if (hasConnection()) { Index: java/org/apache/commons/httpclient/URI.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/URI.java,v retrieving revision 1.42 diff -u -r1.42 URI.java --- java/org/apache/commons/httpclient/URI.java 11 Oct 2003 19:46:51 -0000 1.42 +++ java/org/apache/commons/httpclient/URI.java 16 Dec 2003 18:39:03 -0000 @@ -67,11 +67,14 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; -import java.io.UnsupportedEncodingException; import java.util.Locale; import java.util.BitSet; import java.util.Hashtable; +import org.apache.commons.codec.DecoderException; +import org.apache.commons.codec.net.URLCodec; +import org.apache.commons.httpclient.util.EncodingUtil; + /** * The interface for the URI(Uniform Resource Identifiers) version of RFC 2396. * This class has the purpose of supportting of parsing a URI reference to @@ -1698,43 +1701,19 @@ * @return URI character sequence * @throws URIException null component or unsupported character encoding */ + protected static char[] encode(String original, BitSet allowed, String charset) throws URIException { - - // encode original to uri characters. if (original == null) { - throw new URIException(URIException.PARSING, "null"); + throw new IllegalArgumentException("Original string may not be null"); } - // escape octet to uri characters. if (allowed == null) { - throw new URIException(URIException.PARSING, - "null allowed characters"); - } - byte[] octets; - try { - octets = original.getBytes(charset); - } catch (UnsupportedEncodingException error) { - throw new URIException(URIException.UNSUPPORTED_ENCODING, charset); - } - StringBuffer buf = new StringBuffer(octets.length); - for (int i = 0; i < octets.length; i++) { - char c = (char) octets[i]; - if (allowed.get(c)) { - buf.append(c); - } else { - buf.append('%'); - byte b = octets[i]; // use the original byte value - char hexadecimal = Character.forDigit((b >> 4) & 0xF, 16); - buf.append(Character.toUpperCase(hexadecimal)); // high - hexadecimal = Character.forDigit(b & 0xF, 16); - buf.append(Character.toUpperCase(hexadecimal)); // low - } + throw new IllegalArgumentException("Allowed bitset may not be null"); } - - return buf.toString().toCharArray(); + byte[] rawdata = URLCodec.encodeUrl(allowed, EncodingUtil.getBytes(original, charset)); + return HttpConstants.getAsciiString(rawdata).toCharArray(); } - /** * Decodes URI encoded string. * @@ -1765,50 +1744,57 @@ * @throws URIException incomplete trailing escape pattern or unsupported * character encoding */ - protected static String decode(char[] component, String charset) + protected static String decode(char[] component, String charset) throws URIException { - - // unescape uri characters to octets - if (component == null) { - return null; + if (component == null) { + throw new IllegalArgumentException("Component array of chars may not be null"); } + return decode(new String(component), charset); + } - byte[] octets; - try { - octets = new String(component).getBytes(charset); - } catch (UnsupportedEncodingException error) { - throw new URIException(URIException.UNSUPPORTED_ENCODING, - "not supported " + charset + " encoding"); - } - int length = octets.length; - int oi = 0; // output index - for (int ii = 0; ii < length; oi++) { - byte aByte = (byte) octets[ii++]; - if (aByte == '%' && ii + 2 <= length) { - byte high = (byte) Character.digit((char) octets[ii++], 16); - byte low = (byte) Character.digit((char) octets[ii++], 16); - if (high == -1 || low == -1) { - throw new URIException(URIException.ESCAPING, - "incomplete trailing escape pattern"); - - } - aByte = (byte) ((high << 4) + low); - } - octets[oi] = (byte) aByte; + /** + * Decodes URI encoded string. + * + * This is a two mapping, one from URI characters to octets, and + * subsequently a second from octets to original characters: + *
+ * URI character sequence->octet sequence->original character sequence + *
+ * + * A URI must be separated into its components before the escaped + * characters within those components can be allowedly decoded. + *
+ * Notice that there is a chance that URI characters that are non UTF-8 + * may be parsed as valid UTF-8. A recent non-scientific analysis found + * that EUC encoded Japanese words had a 2.7% false reading; SJIS had a + * 0.0005% false reading; other encoding such as ASCII or KOI-8 have a 0% + * false reading. + *
+ * The percent "%" character always has the reserved purpose of being + * the escape indicator, it must be escaped as "%25" in order to be used + * as data within a URI. + *
+ * The unescape method is internally performed within this method.
+ *
+ * @param component the URI character sequence
+ * @param charset the protocol charset
+ * @return original character sequence
+ * @throws URIException incomplete trailing escape pattern or unsupported
+ * character encoding
+ */
+ protected static String decode(String component, String charset)
+ throws URIException {
+ if (component == null) {
+ throw new IllegalArgumentException("Component array of chars may not be null");
}
-
- String result;
- try {
- result = new String(octets, 0, oi, charset);
- } catch (UnsupportedEncodingException error) {
- throw new URIException(URIException.UNSUPPORTED_ENCODING,
- "not supported " + charset + " encoding");
+ byte[] rawdata = null;
+ try {
+ rawdata = URLCodec.decodeUrl(HttpConstants.getAsciiBytes(component));
+ } catch (DecoderException e) {
+ throw new URIException(e.getMessage());
}
-
- return result;
+ return HttpConstants.getContentString(rawdata, charset);
}
-
-
/**
* Pre-validate the unescaped URI string within a specific component.
*
Index: java/org/apache/commons/httpclient/auth/AuthScheme.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/AuthScheme.java,v
retrieving revision 1.6
diff -u -r1.6 AuthScheme.java
--- java/org/apache/commons/httpclient/auth/AuthScheme.java 11 Dec 2003 01:19:32 -0000 1.6
+++ java/org/apache/commons/httpclient/auth/AuthScheme.java 16 Dec 2003 18:39:03 -0000
@@ -165,7 +165,7 @@
boolean isConnectionBased();
/**
- * @deprecated Use {@link #authenticate(Credentials, String, String, HttpMethodParams)}
+ * @deprecated Use {@link #authenticate(Credentials, HttpMethod)}
*
* Produces an authorization string for the given set of {@link Credentials},
* method name and URI using the given authentication scheme in response to
Index: java/org/apache/commons/httpclient/auth/BasicScheme.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/BasicScheme.java,v
retrieving revision 1.9
diff -u -r1.9 BasicScheme.java
--- java/org/apache/commons/httpclient/auth/BasicScheme.java 11 Dec 2003 01:19:32 -0000 1.9
+++ java/org/apache/commons/httpclient/auth/BasicScheme.java 16 Dec 2003 18:39:04 -0000
@@ -63,11 +63,11 @@
package org.apache.commons.httpclient.auth;
+import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.util.Base64;
import org.apache.commons.httpclient.util.EncodingUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -138,6 +138,8 @@
* be generated due to an authentication failure
*
* @return a basic authorization string
+ *
+ * @deprecated Use {@link #authenticate(Credentials, HttpMethod)}
*/
public String authenticate(Credentials credentials, String method, String uri)
throws AuthenticationException {
@@ -233,7 +235,7 @@
buffer.append(credentials.getPassword());
return "Basic " + HttpConstants.getAsciiString(
- Base64.encode(EncodingUtil.getBytes(buffer.toString(), charset)));
+ Base64.encodeBase64(EncodingUtil.getBytes(buffer.toString(), charset)));
}
}
Index: java/org/apache/commons/httpclient/auth/DigestScheme.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/DigestScheme.java,v
retrieving revision 1.13
diff -u -r1.13 DigestScheme.java
--- java/org/apache/commons/httpclient/auth/DigestScheme.java 11 Dec 2003 01:19:32 -0000 1.13
+++ java/org/apache/commons/httpclient/auth/DigestScheme.java 16 Dec 2003 18:39:04 -0000
@@ -276,6 +276,8 @@
*
* @see org.apache.commons.httpclient.HttpMethod#getName()
* @see org.apache.commons.httpclient.HttpMethod#getPath()
+ *
+ * @deprecated Use {@link #authenticate(Credentials, HttpMethod)}
*/
public String authenticate(Credentials credentials, String method, String uri)
throws AuthenticationException {
Index: java/org/apache/commons/httpclient/auth/NTLM.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/NTLM.java,v
retrieving revision 1.5
diff -u -r1.5 NTLM.java
--- java/org/apache/commons/httpclient/auth/NTLM.java 11 Dec 2003 01:19:32 -0000 1.5
+++ java/org/apache/commons/httpclient/auth/NTLM.java 16 Dec 2003 18:39:05 -0000
@@ -72,8 +72,8 @@
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
+import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.HttpConstants;
-import org.apache.commons.httpclient.util.Base64;
import org.apache.commons.httpclient.util.EncodingUtil;
/**
@@ -252,7 +252,7 @@
} else {
resp = currentResponse;
}
- return HttpConstants.getString(Base64.encode(resp));
+ return HttpConstants.getString(Base64.encodeBase64(resp));
}
/**
@@ -340,7 +340,7 @@
*/
private byte[] parseType2Message(String message) {
// Decode the message first.
- byte[] msg = Base64.decode(EncodingUtil.getBytes(message, DEFAULT_CHARSET));
+ byte[] msg = Base64.decodeBase64(EncodingUtil.getBytes(message, DEFAULT_CHARSET));
byte[] nonce = new byte[8];
// The nonce is the 8 bytes starting from the byte in position 24.
for (int i = 0; i < 8; i++) {
Index: java/org/apache/commons/httpclient/auth/NTLMScheme.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/NTLMScheme.java,v
retrieving revision 1.13
diff -u -r1.13 NTLMScheme.java
--- java/org/apache/commons/httpclient/auth/NTLMScheme.java 11 Dec 2003 01:19:32 -0000 1.13
+++ java/org/apache/commons/httpclient/auth/NTLMScheme.java 16 Dec 2003 18:39:05 -0000
@@ -273,6 +273,8 @@
* be generated due to an authentication failure
*
* @return an NTLM authorization string
+ *
+ * @deprecated Use {@link #authenticate(Credentials, HttpMethod)}
*/
public String authenticate(Credentials credentials, String method, String uri)
throws AuthenticationException {
Index: java/org/apache/commons/httpclient/util/URIUtil.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/URIUtil.java,v
retrieving revision 1.22
diff -u -r1.22 URIUtil.java
--- java/org/apache/commons/httpclient/util/URIUtil.java 5 Jul 2003 22:31:21 -0000 1.22
+++ java/org/apache/commons/httpclient/util/URIUtil.java 16 Dec 2003 18:39:06 -0000
@@ -64,6 +64,10 @@
package org.apache.commons.httpclient.util;
import java.util.BitSet;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.net.URLCodec;
+import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.httpclient.URI;
import org.apache.commons.httpclient.URIException;
@@ -511,7 +515,8 @@
* @throws URIException if the default protocol charset is not supported
*
* @see URI#getDefaultProtocolCharset
- * @see Coder#encode
+ *
+ * @deprecated use org.apache.commons.codec.net.URLCodec
*/
public static String encode(String unescaped, BitSet allowed)
throws URIException {
@@ -528,15 +533,12 @@
* @param allowed allowed characters not to be escaped
* @param charset the charset
* @return the escaped string
- *
- * @throws URIException if the charset is not supported
- *
- * @see Coder#encode
*/
public static String encode(String unescaped, BitSet allowed,
String charset) throws URIException {
-
- return new String(Coder.encode(unescaped, allowed, charset));
+ byte[] rawdata = URLCodec.encodeUrl(allowed,
+ EncodingUtil.getBytes(unescaped, charset));
+ return HttpConstants.getAsciiString(rawdata);
}
@@ -547,16 +549,19 @@
* @param escaped a string
* @return the unescaped string
*
- * @throws URIException if the default protocol charset is not supported
+ * @throws URIException if the string cannot be decoded (invalid)
*
* @see URI#getDefaultProtocolCharset
- * @see Coder#decode
*/
public static String decode(String escaped) throws URIException {
- return Coder.decode(escaped.toCharArray(), URI.getDefaultProtocolCharset());
+ try {
+ byte[] rawdata = URLCodec.decodeUrl(HttpConstants.getAsciiBytes(escaped));
+ return HttpConstants.getContentString(rawdata, URI.getDefaultProtocolCharset());
+ } catch (DecoderException e) {
+ throw new URIException(e.getMessage());
+ }
}
-
/**
* Unescape and decode a given string regarded as an escaped string.
*
@@ -579,6 +584,8 @@
/**
* The basic and internal utility for URI escape and character encoding and
* decoding.
+ *
+ * @deprecated use org.apache.commons.codec.net.URLCodec
*/
protected static class Coder extends URI {
@@ -592,6 +599,8 @@
* @return the escaped and encoded string
*
* @throws URIException if the charset is not supported
+ *
+ * @deprecated use org.apache.commons.codec.net.URLCodec
*/
public static char[] encode(String unescapedComponent, BitSet allowed, String charset)
throws URIException {
@@ -608,6 +617,8 @@
* @return the escaped and encoded string
*
* @throws URIException if the charset is not supported
+ *
+ * @deprecated use org.apache.commons.codec.net.URLCodec
*/
public static String decode(char[] escapedComponent, String charset)
throws URIException {
Index: test/org/apache/commons/httpclient/NoncompliantPostMethod.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/NoncompliantPostMethod.java,v
retrieving revision 1.1
diff -u -r1.1 NoncompliantPostMethod.java
--- test/org/apache/commons/httpclient/NoncompliantPostMethod.java 1 Feb 2003 16:10:48 -0000 1.1
+++ test/org/apache/commons/httpclient/NoncompliantPostMethod.java 16 Dec 2003 18:39:06 -0000
@@ -99,7 +99,7 @@
Header header = headers[i];
// Write all the headers but "Expect"
if (!header.getName().equalsIgnoreCase("Expect") ) {
- conn.print(header.toExternalForm());
+ conn.print(header.toExternalForm(), "US-ASCII");
}
}
}
Index: test/org/apache/commons/httpclient/TestAuthenticator.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java,v
retrieving revision 1.35
diff -u -r1.35 TestAuthenticator.java
--- test/org/apache/commons/httpclient/TestAuthenticator.java 10 Dec 2003 21:04:13 -0000 1.35
+++ test/org/apache/commons/httpclient/TestAuthenticator.java 16 Dec 2003 18:39:07 -0000
@@ -62,13 +62,19 @@
package org.apache.commons.httpclient;
+import java.util.Map;
+
import junit.framework.Test;
import junit.framework.TestSuite;
-import java.util.Map;
-
-import org.apache.commons.httpclient.auth.*;
-import org.apache.commons.httpclient.util.Base64;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.httpclient.auth.AuthChallengeParser;
+import org.apache.commons.httpclient.auth.AuthScheme;
+import org.apache.commons.httpclient.auth.BasicScheme;
+import org.apache.commons.httpclient.auth.DigestScheme;
+import org.apache.commons.httpclient.auth.HttpAuthenticator;
+import org.apache.commons.httpclient.auth.MalformedChallengeException;
+import org.apache.commons.httpclient.auth.NTLMScheme;
/**
* Unit tests for {@link Authenticator}.
@@ -190,7 +196,8 @@
authscheme.processChallenge(challenge);
assertTrue(HttpAuthenticator.authenticate(authscheme, method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -201,7 +208,8 @@
HttpMethod method = new SimpleHttpMethod(new Header("WWW-Authenticate","Basic realm=\"realm1\""));
assertTrue(HttpAuthenticator.authenticateDefault(method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -214,7 +222,8 @@
authscheme.processChallenge(challenge);
assertTrue(HttpAuthenticator.authenticate(authscheme, method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -226,7 +235,8 @@
}
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("dh", buffer.toString());
- assertEquals("Basic ZGg65C32Lfw=", BasicScheme.authenticate(credentials));
+ assertEquals("Basic ZGg65C32Lfw=",
+ BasicScheme.authenticate(credentials, HttpConstants.DEFAULT_CONTENT_CHARSET));
}
public void testBasicAuthenticationWithMutlipleRealms() throws Exception {
@@ -243,14 +253,16 @@
HttpMethod method = new SimpleHttpMethod(new Header("WWW-Authenticate",challenge1));
assertTrue(HttpAuthenticator.authenticate(authscheme1, method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
{
HttpMethod method = new SimpleHttpMethod(new Header("WWW-Authenticate", challenge2));
assertTrue(HttpAuthenticator.authenticate(authscheme2, method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("uname2:password2")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("uname2:password2")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
}
@@ -270,7 +282,8 @@
assertTrue(HttpAuthenticator.authenticateDefault(method, null, state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
+ String expected = "Basic " + HttpConstants.getString(
+ Base64.encodeBase64(HttpConstants.getBytes("username:password")));
assertEquals(expected, method.getRequestHeader("Authorization").getValue());
}
Index: test/org/apache/commons/httpclient/TestBadContentLength.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestBadContentLength.java,v
retrieving revision 1.2
diff -u -r1.2 TestBadContentLength.java
--- test/org/apache/commons/httpclient/TestBadContentLength.java 11 Dec 2003 22:54:19 -0000 1.2
+++ test/org/apache/commons/httpclient/TestBadContentLength.java 16 Dec 2003 18:39:08 -0000
@@ -63,7 +63,6 @@
import java.io.IOException;
import java.io.InputStream;
-import java.net.ProtocolException;
import junit.framework.Test;
import junit.framework.TestSuite;
Index: test/org/apache/commons/httpclient/TestBase64.java
===================================================================
RCS file: test/org/apache/commons/httpclient/TestBase64.java
diff -N test/org/apache/commons/httpclient/TestBase64.java
--- test/org/apache/commons/httpclient/TestBase64.java 7 Feb 2003 14:38:02 -0000 1.8
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,335 +0,0 @@
-/*
- * $Header: /home/cvspublic/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestBase64.java,v 1.8 2003/02/07 14:38:02 jsdever Exp $
- * $Revision: 1.8 $
- * $Date: 2003/02/07 14:38:02 $
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2003 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- *