oglueck 2003/01/16 02:53:09
Modified: httpclient/src/examples PostXML.java
httpclient/src/java/org/apache/commons/httpclient
Authenticator.java ChunkedInputStream.java
ChunkedOutputStream.java HttpConnection.java
HttpMethodBase.java NTLM.java
RequestOutputStream.java WireLogInputStream.java
httpclient/src/java/org/apache/commons/httpclient/methods
PostMethod.java PutMethod.java
httpclient/src/java/org/apache/commons/httpclient/methods/multipart
FilePart.java Part.java StringPart.java
httpclient/src/java/org/apache/commons/httpclient/util
Base64.java URIUtil.java
httpclient/src/test/org/apache/commons/httpclient
SimpleHttpConnection.java TestAuthenticator.java
TestBase64.java TestStreams.java
TestWebappMethods.java TestWebappRedirect.java
Added: httpclient/src/java/org/apache/commons/httpclient
HttpConstants.java
Log:
fixed undefined encodings all over httpclient
makes httpclient code platform independent
Contributed by: Oleg Kalnichevski
Reviewed by: Ortwin Gl�ck
Revision Changes Path
1.5 +4 -8 jakarta-commons/httpclient/src/examples/PostXML.java
Index: PostXML.java
===================================================================
RCS file: /home/cvs/jakarta-commons/httpclient/src/examples/PostXML.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PostXML.java 17 Dec 2002 01:28:32 -0000 1.4
+++ PostXML.java 16 Jan 2003 10:53:07 -0000 1.5
@@ -130,11 +130,7 @@
System.out.println("iResultCode = " + iResultCode);
- byte[] yaResponse = post.getResponseBody();
-
- System.out.println("Server response:");
-
- System.out.println( new String(yaResponse) );
+ System.out.println("Server response:" + post.getResponseBodyAsString()
);
post.releaseConnection();
}
1.36 +16 -20
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java
Index: Authenticator.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- Authenticator.java 3 Dec 2002 15:20:31 -0000 1.35
+++ Authenticator.java 16 Jan 2003 10:53:08 -0000 1.36
@@ -206,9 +206,9 @@
// Calculating digest according to rfc 2617
String a2 = method + ":" + uri;
- String md5a2 = encode(md5Helper.digest(a2.getBytes()));
+ String md5a2 = encode(md5Helper.digest(HttpConstants.getBytes(a2)));
String digestValue = uname + ":" + realm + ":" + pwd;
- String md5a1 = encode(md5Helper.digest(digestValue.getBytes()));
+ String md5a1 =
encode(md5Helper.digest(HttpConstants.getBytes(digestValue)));
String serverDigestValue;
if (qop == null) {
@@ -219,7 +219,7 @@
}
String serverDigest =
- encode(md5Helper.digest(serverDigestValue.getBytes()));
+ encode(md5Helper.digest(HttpConstants.getBytes(serverDigestValue)));
return serverDigest;
}
@@ -285,7 +285,7 @@
String authString = credentials.getUserName() + ":" +
credentials.getPassword();
- return "Basic " + new String(Base64.encode(authString.getBytes()));
+ return "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes(authString)));
}
@@ -387,18 +387,14 @@
throw new HttpException("No credentials available for NTLM "
+ "authentication.");
} else {
- try {
- NTLM ntlm = new NTLM();
- String response = "NTLM " + ntlm.getResponseFor(challenge,
- credentials.getUserName(), credentials.getPassword(),
- credentials.getHost(), credentials.getDomain());
- if (log.isDebugEnabled()) {
- log.debug("Replying to challenge with: " + response);
- }
- return new Header(responseHeader, response);
- } catch (java.io.UnsupportedEncodingException e) {
- throw new HttpException("NTLM requires ASCII support.");
+ NTLM ntlm = new NTLM();
+ String response = "NTLM " + ntlm.getResponseFor(challenge,
+ credentials.getUserName(), credentials.getPassword(),
+ credentials.getHost(), credentials.getDomain());
+ if (log.isDebugEnabled()) {
+ log.debug("Replying to challenge with: " + response);
}
+ return new Header(responseHeader, response);
}
}
@@ -756,7 +752,7 @@
}
cnonce = Long.toString(System.currentTimeMillis());
- cnonce = encode(md5Helper.digest(cnonce.getBytes()));
+ cnonce = encode(md5Helper.digest(HttpConstants.getBytes(cnonce)));
return cnonce;
}
1.8 +4 -5
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ChunkedInputStream.java
Index: ChunkedInputStream.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ChunkedInputStream.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ChunkedInputStream.java 9 Dec 2002 09:16:16 -0000 1.7
+++ ChunkedInputStream.java 16 Jan 2003 10:53:08 -0000 1.8
@@ -89,7 +89,6 @@
private int chunkSize, pos;
private boolean eof = false;
private boolean closed = false;
- private static final String HTTP_ENC = "US-ASCII";
private HttpMethod method;
/**
@@ -235,7 +234,7 @@
}
//parse data
- String dataString = new String(baos.toByteArray(), HTTP_ENC);
+ String dataString = HttpConstants.getString(baos.toByteArray());
int separator = dataString.indexOf(';');
dataString = (separator > 0)
? dataString.substring(0, separator).trim()
1.3 +3 -3
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ChunkedOutputStream.java
Index: ChunkedOutputStream.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/ChunkedOutputStream.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ChunkedOutputStream.java 16 Dec 2002 15:19:37 -0000 1.2
+++ ChunkedOutputStream.java 16 Jan 2003 10:53:08 -0000 1.3
@@ -144,7 +144,7 @@
if (s == null) {
s = "null";
}
- write(s.getBytes());
+ write(HttpConstants.getBytes(s));
}
/**
@@ -206,7 +206,7 @@
if (closed){
throw new IllegalStateException("Output stream already closed");
}
- byte chunkHeader[] = (Integer.toHexString(len) + "\r\n").getBytes();
+ byte chunkHeader[] = HttpConstants.getBytes(Integer.toHexString(len) +
"\r\n");
stream.write(chunkHeader, 0, chunkHeader.length);
stream.write(b, off, len);
stream.write(ENDCHUNK, 0, ENDCHUNK.length);
1.30 +9 -9
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java
Index: HttpConnection.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConnection.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- HttpConnection.java 13 Jan 2003 15:51:13 -0000 1.29
+++ HttpConnection.java 16 Jan 2003 10:53:08 -0000 1.30
@@ -663,7 +663,7 @@
assertOpen();
if(wireLog.isDebugEnabled() && (data.length > 0)) {
- String data_str = new String(data);
+ String data_str = HttpConstants.getContentString(data);
wireLog.debug(">> \"" + data_str.trim() + "\" [\\r\\n]" );
}
try{
@@ -702,6 +702,7 @@
}
}
+
/**
* Write the specified String (as bytes) to my output stream.
*
@@ -714,7 +715,7 @@
public void print(String data)
throws IOException, IllegalStateException, HttpRecoverableException {
log.trace("enter HttpConnection.print(String)");
- write(data.getBytes());
+ write(HttpConstants.getBytes(data));
}
/**
@@ -730,7 +731,7 @@
public void printLine(String data)
throws IOException, IllegalStateException, HttpRecoverableException {
log.trace("enter HttpConnection.printLine(String)");
- writeLine(data.getBytes());
+ writeLine(HttpConstants.getBytes(data));
}
/**
@@ -958,7 +959,7 @@
/** the protocol being used */
private Protocol _protocol;
/** <tt>"\r\n"</tt>, as bytes. */
- private static final byte[] CRLF = "\r\n".getBytes();
+ private static final byte[] CRLF = HttpConstants.getBytes("\r\n");
/** SO_TIMEOUT value */
private int _so_timeout = 0;
/** Whether or not the _socket is a secure one. Note the difference to _ssl */
@@ -969,5 +970,4 @@
private int connect_timeout = 0;
/** the connection manager that created this connection or null */
private HttpConnectionManager httpConnectionManager;
-
}
1.95 +12 -25
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
Index: HttpMethodBase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -r1.94 -r1.95
--- HttpMethodBase.java 14 Jan 2003 10:16:55 -0000 1.94
+++ HttpMethodBase.java 16 Jan 2003 10:53:08 -0000 1.95
@@ -65,7 +65,6 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
@@ -159,6 +158,7 @@
* @author Ortwin Gl�ck
* @author Eric Johnson
* @author Michael Becke
+ * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a>
*/
public abstract class HttpMethodBase implements HttpMethod {
//~ Static variables/initializers ������������������������������������������
@@ -252,10 +252,6 @@
private boolean doneWithConnection = false;
- /** Default content encoding chatset */
- protected static final String DEFAULT_CHARSET = "ISO-8859-1";
-
-
//~ Constructors �����������������������������������������������������������
// ----------------------------------------------------------- Constructors
@@ -677,22 +673,13 @@
* @return my response body, if any, as a {@link String}. Otherwise return
* <tt>null</tt>.
*/
- public String getResponseBodyAsString() {
- if (!responseAvailable()) {
+ public String getResponseBodyAsString()
+ {
+ if (!responseAvailable())
+ {
return null;
}
- String body;
- try {
- body = new String(getResponseBody(), getResponseCharSet());
- }
- catch(UnsupportedEncodingException e) {
- if (log.isWarnEnabled()) {
- log.warn("Unsupported request body charset: " + e.getMessage());
- }
- body = new String(getResponseBody());
- }
-
- return body;
+ return HttpConstants.getContentString(getResponseBody(),
getResponseCharSet());
}
@@ -2392,9 +2379,9 @@
}
if (charset == null) {
if (log.isDebugEnabled()) {
- log.debug("Default charset used: " + DEFAULT_CHARSET);
+ log.debug("Default charset used: " +
HttpConstants.DEFAULT_CONTENT_CHARSET);
}
- charset = DEFAULT_CHARSET;
+ charset = HttpConstants.DEFAULT_CONTENT_CHARSET;
}
return charset;
}
1.8 +39 -25
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/NTLM.java
Index: NTLM.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/NTLM.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- NTLM.java 4 Jan 2003 17:38:51 -0000 1.7
+++ NTLM.java 16 Jan 2003 10:53:08 -0000 1.8
@@ -99,6 +99,8 @@
/** Log object for this class. */
private static final Log log = LogFactory.getLog(NTLM.class);
+ /** Character encoding */
+ public static final String DEFAULT_CHARSET = "ASCII";
//Initialize the security provider
static {
@@ -132,13 +134,10 @@
* @param username the username to authenticate with.
* @param password the password to authenticate with.
* @param domain the NT domain to authenticate in.
- *
- * @throws UnsupportedEncodingException if ASCII encoding is not
- * supported by the JVM.
*/
public final String getResponseFor(String message,
String username, String password, String host, String domain)
- throws UnsupportedEncodingException, HttpException {
+ throws HttpException {
String response = null;
if (message == null || message.trim().equals("")) {
response = getType1Message(host, domain);
@@ -238,7 +237,7 @@
* Returns the response that has been generated after shrinking the
* array if required and base64 encodes the response.
*/
- private String getResponse() throws UnsupportedEncodingException {
+ private String getResponse() {
byte[] resp;
if (currResponse.length > pos) {
byte[] tmp = new byte[pos];
@@ -249,22 +248,21 @@
} else {
resp = currResponse;
}
- return new String(Base64.encode(resp), "ASCII");
+ return HttpConstants.getString(Base64.encode(resp));
}
- private String getType1Message(String host, String domain)
- throws UnsupportedEncodingException {
+ private String getType1Message(String host, String domain) {
host = host.toUpperCase();
domain = domain.toUpperCase();
- byte[] hostBytes = host.getBytes("ASCII");
- byte[] domainBytes = domain.getBytes("ASCII");
+ byte[] hostBytes = getBytes(host);
+ byte[] domainBytes = getBytes(domain);
int finalLength = 32 + hostBytes.length + domainBytes.length;
prepareResponse(finalLength);
byte[] msg = new byte[finalLength];
// The initial id string.
- byte[] protocol = "NTLMSSP".getBytes("ASCII");
+ byte[] protocol = getBytes("NTLMSSP");
addBytes(protocol);
addByte((byte)0);
@@ -329,10 +327,9 @@
* @return an array of 8 bytes that the server sent to be used when
* hashing the password.
*/
- private byte[] parseType2Message(String sMsg)
- throws UnsupportedEncodingException {
+ private byte[] parseType2Message(String sMsg) {
// Decode the message first.
- byte[] msg = Base64.decode(sMsg.getBytes("ASCII"));
+ byte[] msg = Base64.decode(getBytes(sMsg));
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++) {
@@ -347,23 +344,23 @@
*/
private String getType3Message(String user, String password,
String host, String domain, byte[] nonce)
- throws UnsupportedEncodingException, HttpException {
+ throws HttpException {
int nt_resp_len = 0;
int lm_resp_len = 24;
domain = domain.toUpperCase();
host = host.toUpperCase();
user = user.toUpperCase();
- byte[] domainBytes = domain.getBytes("ASCII");
- byte[] hostBytes = host.getBytes("ASCII");
- byte[] userBytes = user.getBytes("ASCII");
+ byte[] domainBytes = getBytes(domain);
+ byte[] hostBytes = getBytes(host);
+ byte[] userBytes = getBytes(user);
int domainLen = domainBytes.length;
int hostLen = hostBytes.length;
int userLen = userBytes.length;
int finalLength = 64 + nt_resp_len + lm_resp_len + domainLen +
userLen + hostLen;
prepareResponse(finalLength);
- byte[] ntlmssp = "NTLMSSP".getBytes("ASCII");
+ byte[] ntlmssp = getBytes("NTLMSSP");
addBytes(ntlmssp);
addByte((byte)0);
addByte((byte)3);
@@ -443,8 +440,8 @@
* @param nonce the nonce sent by the server.
*/
private byte[] hashPassword(String password, byte[] nonce)
- throws UnsupportedEncodingException, HttpException {
- byte[] passw = password.toUpperCase().getBytes("ASCII");
+ throws HttpException {
+ byte[] passw = getBytes(password.toUpperCase());
byte[] lm_pw1 = new byte[7];
byte[] lm_pw2 = new byte[7];
@@ -553,5 +550,22 @@
val[0] = (byte)Integer.parseInt(low, 16);
val[1] = (byte)Integer.parseInt(high, 16);
return val;
+ }
+
+
+ private static byte[] getBytes(final String s)
+ {
+ if (s == null)
+ {
+ throw new IllegalArgumentException("Parameter may not be
null");
+ }
+ try
+ {
+ return s.getBytes(DEFAULT_CHARSET);
+ }
+ catch(UnsupportedEncodingException unexpected_eexception)
+ {
+ throw new RuntimeException("NTLM requires ASCII support");
+ }
}
}
1.15 +5 -5
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/RequestOutputStream.java
Index: RequestOutputStream.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/RequestOutputStream.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- RequestOutputStream.java 5 Aug 2002 14:46:05 -0000 1.14
+++ RequestOutputStream.java 16 Jan 2003 10:53:08 -0000 1.15
@@ -250,7 +250,7 @@
log.trace("enter RequestOutputStream.write(byte[], int, int)");
if (useChunking) {
- byte chunkHeader[] = (Integer.toHexString(len) + "\r\n").getBytes();
+ byte chunkHeader[] = HttpConstants.getBytes(Integer.toHexString(len) +
"\r\n");
stream.write(chunkHeader, 0, chunkHeader.length);
stream.write(b, off, len);
stream.write(ENDCHUNK, 0, ENDCHUNK.length);
1.4 +4 -4
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/WireLogInputStream.java
Index: WireLogInputStream.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/WireLogInputStream.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- WireLogInputStream.java 19 Sep 2002 11:45:26 -0000 1.3
+++ WireLogInputStream.java 16 Jan 2003 10:53:08 -0000 1.4
@@ -95,7 +95,7 @@
public int read(byte[] b) throws java.io.IOException {
int l = super.read(b);
- wireLog.debug("<< "+ new String(b));
+ wireLog.debug("<< "+ HttpConstants.getString(b));
return l;
}
}
1.1
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConstants.java
Index: HttpConstants.java
===================================================================
/*
* $Header:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpConstants.java,v
1.1 2003/01/16 10:53:08 oglueck Exp $
* $Revision: 1.1 $
* $Date: 2003/01/16 10:53:08 $
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-2002 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", "HttpClient", 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 [EMAIL PROTECTED]
*
* 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
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.commons.httpclient;
import java.io.UnsupportedEncodingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* DOCUMENT ME!
*
* @author Oleg Kalnichevski
*/
public class HttpConstants {
/** Character set used to encode HTTP protocol elements */
public static final String HTTP_ELEMENT_CHARSET = "US-ASCII";
/** Default content encoding chatset */
protected static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
/** Log object for this class. */
private static final Log log = LogFactory.getLog(HttpConstants.class);
/**
* Converts the specified string to a byte array of HTTP element characters.
* This method is to be used when encoding content of HTTP elements (such as
request headers)
*
* @param data the string to be encoded
*/
public static byte[] getBytes(final String data) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
try {
return data.getBytes(HTTP_ELEMENT_CHARSET);
} catch (UnsupportedEncodingException e) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + HTTP_ELEMENT_CHARSET + ". System
default encoding used");
}
return data.getBytes();
}
}
/**
* Converts the byte array of HTTP element characters to a string
* This method is to be used when decoding content of HTTP elements (such as
response headers)
*
* @param data the byte array to be encoded
*/
public static String getString(final byte[] data) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
try {
return new String(data, HTTP_ELEMENT_CHARSET);
} catch (UnsupportedEncodingException e) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + HTTP_ELEMENT_CHARSET + ". System
default encoding used");
}
return new String(data);
}
}
/**
* Converts the specified string to a byte array of HTTP content charachetrs
* This method is to be used when encoding content of HTTP request/response
* If the specified charset is not supported, default HTTP content encoding
* (ISO-8859-1) is applied
*
* @param data the string to be encoded
* @param charset the desired character encoding
*/
public static byte[] getContentBytes(final String data, String charset) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
if ((charset == null) || (charset.equals(""))) {
charset = DEFAULT_CONTENT_CHARSET;
}
try {
return data.getBytes(charset);
} catch (UnsupportedEncodingException e) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + charset + ". HTTP default
encoding used");
}
try {
return data.getBytes(DEFAULT_CONTENT_CHARSET);
} catch (UnsupportedEncodingException e2) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + DEFAULT_CONTENT_CHARSET + ".
System encoding used");
}
return data.getBytes();
}
}
}
/**
* Converts the byte array of HTTP content characters to a string
* This method is to be used when decoding content of HTTP request/response
* If the specified charset is not supported, default HTTP content encoding
* (ISO-8859-1) is applied
*
* @param data the byte array to be encoded
* @param charset the desired character encoding
*/
public static String getContentString(final byte[] data, String charset) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
if ((charset == null) || (charset.equals(""))) {
charset = DEFAULT_CONTENT_CHARSET;
}
try {
return new String(data, charset);
} catch (UnsupportedEncodingException e) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + DEFAULT_CONTENT_CHARSET + ".
Default HTTP encoding used");
}
try {
return new String(data, DEFAULT_CONTENT_CHARSET);
} catch (UnsupportedEncodingException e2) {
if (log.isWarnEnabled()) {
log.warn("Unsupported encoding: " + DEFAULT_CONTENT_CHARSET + ".
System encoding used");
}
return new String(data);
}
}
}
/**
* Converts the specified string to a byte array of HTTP content charachetrs
* using default HTTP content encoding (ISO-8859-1)
* This method is to be used when encoding content of HTTP request/response
*
* @param data the string to be encoded
*/
public static byte[] getContentBytes(final String data) {
return getContentBytes(data, null);
}
/**
* Converts the byte array of HTTP content characters to a string using default
* HTTP content encoding (ISO-8859-1)
* This method is to be used when decoding content of HTTP request/response
*
* @param data the byte array to be encoded
*/
public static String getContentString(final byte[] data) {
return getContentString(data, null);
}
/**
* Converts the specified string to byte array of ASCII characters.
*
* @param data the string to be encoded
*/
public static byte[] getAsciiBytes(final String data) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
try {
return data.getBytes("US-ASCII");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
/**
* Converts the byte array of ASCII characters to a string
* This method is to be used when decoding content of HTTP elements (such as
response headers)
*
* @param data the byte array to be encoded
*/
public static String getAsciiString(final byte[] data) {
if (data == null) {
throw new IllegalArgumentException("Parameter may not be null");
}
try {
return new String(data, HTTP_ELEMENT_CHARSET);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
1.32 +29 -19
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java
Index: PostMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PostMethod.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- PostMethod.java 19 Dec 2002 10:23:37 -0000 1.31
+++ PostMethod.java 16 Jan 2003 10:53:08 -0000 1.32
@@ -64,13 +64,13 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
+import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpException;
@@ -351,16 +351,8 @@
return;
}
- byte[] tmp = null;
- try {
- tmp = body.getBytes(getRequestCharSet());
- } catch(UnsupportedEncodingException e) {
- if (log.isWarnEnabled()) {
- log.warn("Unsupported request body charset: " + e.getMessage());
- }
- tmp = body.getBytes();
- }
- this.requestBody = new ByteArrayInputStream(tmp);
+ this.requestBody = new ByteArrayInputStream(
+ HttpConstants.getContentBytes(body, getRequestCharSet()));
}
/**
@@ -385,7 +377,7 @@
"Request parameters have already been added.");
}
- requestBody = body;
+ this.requestBody = body;
}
/**
@@ -765,7 +757,6 @@
return true;
}
- // ------------------------------------------------------------Class Methods
/**
* Encode the list of parameters into a query stream.
@@ -776,8 +767,28 @@
*
* @since 1.0
*/
- static InputStream generateRequestBody(List params) {
+ protected InputStream generateRequestBody(List params) {
log.trace("enter PostMethod.generateRequestBody(List)");
+ String body = generateRequestBodyAsString(params);
+
+ return new ByteArrayInputStream(
+ HttpConstants.getContentBytes(body, getRequestCharSet()));
+ }
+
+
+ // ------------------------------------------------------------Class Methods
+
+ /**
+ * Encode the list of parameters into a query string.
+ *
+ * @param params the list of query name and value
+ *
+ * @return the query string
+ *
+ * @since 2.0
+ */
+ protected static String generateRequestBodyAsString(List params) {
+ log.trace("enter PostMethod.generateRequestBodyAsString(List)");
Iterator it = params.iterator();
StringBuffer buff = new StringBuffer();
@@ -805,8 +816,7 @@
buff.append("&");
}
}
-
- return new ByteArrayInputStream(buff.toString().getBytes());
+ return buff.toString();
}
/**
1.18 +5 -4
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PutMethod.java
Index: PutMethod.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/PutMethod.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- PutMethod.java 19 Dec 2002 10:23:38 -0000 1.17
+++ PutMethod.java 16 Jan 2003 10:53:08 -0000 1.18
@@ -62,6 +62,7 @@
package org.apache.commons.httpclient.methods;
+import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.httpclient.HttpConnection;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethodBase;
@@ -186,7 +187,7 @@
*/
public void setRequestBody(String bodydata) {
checkNotUsed();
- setRequestBody(bodydata.getBytes());
+ setRequestBody(HttpConstants.getContentBytes(bodydata,
getRequestCharSet()));
}
/**
1.7 +7 -9
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/FilePart.java
Index: FilePart.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/FilePart.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FilePart.java 17 Nov 2002 03:11:27 -0000 1.6
+++ FilePart.java 16 Jan 2003 10:53:09 -0000 1.7
@@ -67,9 +67,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.security.InvalidParameterException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -138,7 +136,7 @@
) {
if ( partSource.getLength() < 0 ) {
- throw new InvalidParameterException( "fileLength must be >= 0." );
+ throw new IllegalArgumentException( "fileLength must be >= 0." );
}
this.name = name;
@@ -158,7 +156,7 @@
throws IOException {
log.trace("enter sendFilename(OutputStream out)");
String filename = "; filename=\"" + source.getFileName() + "\"";
- out.write(filename.getBytes());
+ out.write(HttpConstants.getBytes(filename));
}
@@ -166,7 +164,7 @@
throws IOException {
log.trace("enter sendContentType(OutputStream out)");
out.write(CRLF_bytes);
- out.write("Content-Type: application/octet-stream".getBytes());
+ out.write(HttpConstants.getBytes("Content-Type: application/octet-stream"));
}
public String getName() {
1.4 +8 -7
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/Part.java
Index: Part.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/Part.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Part.java 5 Nov 2002 17:50:22 -0000 1.3
+++ Part.java 16 Jan 2003 10:53:09 -0000 1.4
@@ -65,6 +65,7 @@
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import org.apache.commons.httpclient.HttpConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -83,11 +84,11 @@
private static final Log log = LogFactory.getLog(Part.class);
static String boundary = "----------------314159265358979323846";
- static byte[] boundary_bytes = boundary.getBytes();
+ static byte[] boundary_bytes = HttpConstants.getBytes(boundary);
static String CRLF = "\r\n";
- static byte[] CRLF_bytes = CRLF.getBytes();
+ static byte[] CRLF_bytes = HttpConstants.getBytes(CRLF);
static String extra = "--";
- static byte[] extra_bytes = extra.getBytes();
+ static byte[] extra_bytes = HttpConstants.getBytes(extra);
public static String getBoundary() {
return boundary;
@@ -136,7 +137,7 @@
String content_dispos = "Content-Disposition: form-data; name=\""
+ getName() + "\"";
- out.write(content_dispos.getBytes());
+ out.write(HttpConstants.getBytes(content_dispos));
}
protected int lengthOfHeader()
1.2 +6 -5
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/StringPart.java
Index: StringPart.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/methods/multipart/StringPart.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StringPart.java 1 Oct 2002 19:13:41 -0000 1.1
+++ StringPart.java 16 Jan 2003 10:53:09 -0000 1.2
@@ -64,6 +64,7 @@
import java.io.OutputStream;
import java.io.IOException;
+import org.apache.commons.httpclient.HttpConstants;
/**
* Simple string parameter for a multipart post
@@ -93,11 +94,11 @@
protected void sendData(OutputStream out)
throws IOException {
- out.write(value.getBytes());
+ out.write(HttpConstants.getBytes(value));
}
protected long lengthOfData()
throws IOException {
- return value.getBytes().length;
+ return HttpConstants.getBytes(value).length;
}
}
1.2 +7 -5
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/Base64.java
Index: Base64.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/Base64.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Base64.java 3 Dec 2002 15:20:32 -0000 1.1
+++ Base64.java 16 Jan 2003 10:53:09 -0000 1.2
@@ -62,6 +62,8 @@
package org.apache.commons.httpclient.util;
+import org.apache.commons.httpclient.HttpConstants;
+
/**
* <p>Base64 encoder and decoder.</p>
* <p>
@@ -133,7 +135,7 @@
}
public static boolean isBase64(String isValidString) {
- return isArrayByteBase64(isValidString.getBytes());
+ return isArrayByteBase64(HttpConstants.getAsciiBytes(isValidString));
}
1.13 +5 -4
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/URIUtil.java
Index: URIUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/URIUtil.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- URIUtil.java 18 Dec 2002 02:49:47 -0000 1.12
+++ URIUtil.java 16 Jan 2003 10:53:09 -0000 1.13
@@ -599,6 +599,7 @@
* @return the document character encoded string
* @exception URIException
*/
+
public static String toUsingCharset(String target, String fromCharset,
String toCharset) throws URIException {
1.5 +4 -4
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/SimpleHttpConnection.java
Index: SimpleHttpConnection.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/SimpleHttpConnection.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SimpleHttpConnection.java 31 Oct 2002 07:45:35 -0000 1.4
+++ SimpleHttpConnection.java 16 Jan 2003 10:53:09 -0000 1.5
@@ -136,7 +136,7 @@
headerReader = new BufferedReader(
new StringReader((String)headers.elementAt(hits)));
bodyInputStream = new ByteArrayInputStream(
- ((String)bodies.elementAt(hits)).getBytes());
+ HttpConstants.getContentBytes((String)bodies.elementAt(hits)));
bodyOutputStream = new ByteArrayOutputStream();
hits++;
} catch (ArrayIndexOutOfBoundsException aiofbe) {
1.20 +10 -10
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java
Index: TestAuthenticator.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- TestAuthenticator.java 17 Dec 2002 02:26:57 -0000 1.19
+++ TestAuthenticator.java 16 Jan 2003 10:53:09 -0000 1.20
@@ -190,7 +190,7 @@
HttpMethod method = new SimpleHttpMethod(new
Header("WwW-AuThEnTiCaTe","bAsIc ReAlM=\"realm1\""));
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("username:password".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -201,7 +201,7 @@
HttpMethod method = new SimpleHttpMethod(new
Header("WWW-Authenticate","Basic realm=\"realm1\""));
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("username:password".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -211,7 +211,7 @@
HttpMethod method = new SimpleHttpMethod(new
Header("WWW-Authenticate","Basic realm=\"realm\""));
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("username:password".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
@@ -224,14 +224,14 @@
HttpMethod method = new SimpleHttpMethod(new
Header("WWW-Authenticate","Basic realm=\"realm1\""));
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("username:password".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
{
HttpMethod method = new SimpleHttpMethod(new
Header("WWW-Authenticate","Basic realm=\"realm2\""));
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("uname2:password2".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("uname2:password2")));
assertEquals(expected,method.getRequestHeader("Authorization").getValue());
}
}
@@ -262,7 +262,7 @@
System.getProperties().setProperty(Authenticator.PREEMPTIVE_PROPERTY,
"true");
assertTrue(Authenticator.authenticate(method,state));
assertTrue(null != method.getRequestHeader("Authorization"));
- String expected = "Basic " + new
String(Base64.encode("username:password".getBytes()));
+ String expected = "Basic " +
HttpConstants.getString(Base64.encode(HttpConstants.getBytes("username:password")));
assertEquals(expected, method.getRequestHeader("Authorization").getValue());
}
1.6 +187 -187
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestBase64.java
Index: TestBase64.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestBase64.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestBase64.java 17 Dec 2002 02:26:57 -0000 1.5
+++ TestBase64.java 16 Jan 2003 10:53:09 -0000 1.6
@@ -101,7 +101,7 @@
byte[] data = new byte[i];
_rand.nextBytes(data);
byte[] enc = Base64.encode(data);
- assertTrue("\"" + (new String(enc)) + "\" is Base64
data.",Base64.isBase64((new String(enc))));
+ assertTrue("\"" + (HttpConstants.getAsciiString(enc)) + "\" is Base64
data.",Base64.isBase64((HttpConstants.getAsciiString(enc))));
byte[] data2 = Base64.decode(enc);
assertTrue(toString(data) + " equals " +
toString(data2),isEqual(data,data2));
}
@@ -113,203 +113,203 @@
byte[] data = new byte[_rand.nextInt(10000)+1];
_rand.nextBytes(data);
byte[] enc = Base64.encode(data);
- assertTrue(Base64.isBase64(new String(enc)));
+ assertTrue(Base64.isBase64(HttpConstants.getAsciiString(enc)));
byte[] data2 = Base64.decode(enc);
assertTrue(isEqual(data,data2));
}
}
public void testSingletons() {
- assertEquals("AA==",new String(Base64.encode(new byte[] { (byte)0 })));
- assertEquals("AQ==",new String(Base64.encode(new byte[] { (byte)1 })));
- assertEquals("Ag==",new String(Base64.encode(new byte[] { (byte)2 })));
- assertEquals("Aw==",new String(Base64.encode(new byte[] { (byte)3 })));
- assertEquals("BA==",new String(Base64.encode(new byte[] { (byte)4 })));
- assertEquals("BQ==",new String(Base64.encode(new byte[] { (byte)5 })));
- assertEquals("Bg==",new String(Base64.encode(new byte[] { (byte)6 })));
- assertEquals("Bw==",new String(Base64.encode(new byte[] { (byte)7 })));
- assertEquals("CA==",new String(Base64.encode(new byte[] { (byte)8 })));
- assertEquals("CQ==",new String(Base64.encode(new byte[] { (byte)9 })));
- assertEquals("Cg==",new String(Base64.encode(new byte[] { (byte)10 })));
- assertEquals("Cw==",new String(Base64.encode(new byte[] { (byte)11 })));
- assertEquals("DA==",new String(Base64.encode(new byte[] { (byte)12 })));
- assertEquals("DQ==",new String(Base64.encode(new byte[] { (byte)13 })));
- assertEquals("Dg==",new String(Base64.encode(new byte[] { (byte)14 })));
- assertEquals("Dw==",new String(Base64.encode(new byte[] { (byte)15 })));
- assertEquals("EA==",new String(Base64.encode(new byte[] { (byte)16 })));
- assertEquals("EQ==",new String(Base64.encode(new byte[] { (byte)17 })));
- assertEquals("Eg==",new String(Base64.encode(new byte[] { (byte)18 })));
- assertEquals("Ew==",new String(Base64.encode(new byte[] { (byte)19 })));
- assertEquals("FA==",new String(Base64.encode(new byte[] { (byte)20 })));
- assertEquals("FQ==",new String(Base64.encode(new byte[] { (byte)21 })));
- assertEquals("Fg==",new String(Base64.encode(new byte[] { (byte)22 })));
- assertEquals("Fw==",new String(Base64.encode(new byte[] { (byte)23 })));
- assertEquals("GA==",new String(Base64.encode(new byte[] { (byte)24 })));
- assertEquals("GQ==",new String(Base64.encode(new byte[] { (byte)25 })));
- assertEquals("Gg==",new String(Base64.encode(new byte[] { (byte)26 })));
- assertEquals("Gw==",new String(Base64.encode(new byte[] { (byte)27 })));
- assertEquals("HA==",new String(Base64.encode(new byte[] { (byte)28 })));
- assertEquals("HQ==",new String(Base64.encode(new byte[] { (byte)29 })));
- assertEquals("Hg==",new String(Base64.encode(new byte[] { (byte)30 })));
- assertEquals("Hw==",new String(Base64.encode(new byte[] { (byte)31 })));
- assertEquals("IA==",new String(Base64.encode(new byte[] { (byte)32 })));
- assertEquals("IQ==",new String(Base64.encode(new byte[] { (byte)33 })));
- assertEquals("Ig==",new String(Base64.encode(new byte[] { (byte)34 })));
- assertEquals("Iw==",new String(Base64.encode(new byte[] { (byte)35 })));
- assertEquals("JA==",new String(Base64.encode(new byte[] { (byte)36 })));
- assertEquals("JQ==",new String(Base64.encode(new byte[] { (byte)37 })));
- assertEquals("Jg==",new String(Base64.encode(new byte[] { (byte)38 })));
- assertEquals("Jw==",new String(Base64.encode(new byte[] { (byte)39 })));
- assertEquals("KA==",new String(Base64.encode(new byte[] { (byte)40 })));
- assertEquals("KQ==",new String(Base64.encode(new byte[] { (byte)41 })));
- assertEquals("Kg==",new String(Base64.encode(new byte[] { (byte)42 })));
- assertEquals("Kw==",new String(Base64.encode(new byte[] { (byte)43 })));
- assertEquals("LA==",new String(Base64.encode(new byte[] { (byte)44 })));
- assertEquals("LQ==",new String(Base64.encode(new byte[] { (byte)45 })));
- assertEquals("Lg==",new String(Base64.encode(new byte[] { (byte)46 })));
- assertEquals("Lw==",new String(Base64.encode(new byte[] { (byte)47 })));
- assertEquals("MA==",new String(Base64.encode(new byte[] { (byte)48 })));
- assertEquals("MQ==",new String(Base64.encode(new byte[] { (byte)49 })));
- assertEquals("Mg==",new String(Base64.encode(new byte[] { (byte)50 })));
- assertEquals("Mw==",new String(Base64.encode(new byte[] { (byte)51 })));
- assertEquals("NA==",new String(Base64.encode(new byte[] { (byte)52 })));
- assertEquals("NQ==",new String(Base64.encode(new byte[] { (byte)53 })));
- assertEquals("Ng==",new String(Base64.encode(new byte[] { (byte)54 })));
- assertEquals("Nw==",new String(Base64.encode(new byte[] { (byte)55 })));
- assertEquals("OA==",new String(Base64.encode(new byte[] { (byte)56 })));
- assertEquals("OQ==",new String(Base64.encode(new byte[] { (byte)57 })));
- assertEquals("Og==",new String(Base64.encode(new byte[] { (byte)58 })));
- assertEquals("Ow==",new String(Base64.encode(new byte[] { (byte)59 })));
- assertEquals("PA==",new String(Base64.encode(new byte[] { (byte)60 })));
- assertEquals("PQ==",new String(Base64.encode(new byte[] { (byte)61 })));
- assertEquals("Pg==",new String(Base64.encode(new byte[] { (byte)62 })));
- assertEquals("Pw==",new String(Base64.encode(new byte[] { (byte)63 })));
- assertEquals("QA==",new String(Base64.encode(new byte[] { (byte)64 })));
- assertEquals("QQ==",new String(Base64.encode(new byte[] { (byte)65 })));
- assertEquals("Qg==",new String(Base64.encode(new byte[] { (byte)66 })));
- assertEquals("Qw==",new String(Base64.encode(new byte[] { (byte)67 })));
- assertEquals("RA==",new String(Base64.encode(new byte[] { (byte)68 })));
- assertEquals("RQ==",new String(Base64.encode(new byte[] { (byte)69 })));
- assertEquals("Rg==",new String(Base64.encode(new byte[] { (byte)70 })));
- assertEquals("Rw==",new String(Base64.encode(new byte[] { (byte)71 })));
- assertEquals("SA==",new String(Base64.encode(new byte[] { (byte)72 })));
- assertEquals("SQ==",new String(Base64.encode(new byte[] { (byte)73 })));
- assertEquals("Sg==",new String(Base64.encode(new byte[] { (byte)74 })));
- assertEquals("Sw==",new String(Base64.encode(new byte[] { (byte)75 })));
- assertEquals("TA==",new String(Base64.encode(new byte[] { (byte)76 })));
- assertEquals("TQ==",new String(Base64.encode(new byte[] { (byte)77 })));
- assertEquals("Tg==",new String(Base64.encode(new byte[] { (byte)78 })));
- assertEquals("Tw==",new String(Base64.encode(new byte[] { (byte)79 })));
- assertEquals("UA==",new String(Base64.encode(new byte[] { (byte)80 })));
- assertEquals("UQ==",new String(Base64.encode(new byte[] { (byte)81 })));
- assertEquals("Ug==",new String(Base64.encode(new byte[] { (byte)82 })));
- assertEquals("Uw==",new String(Base64.encode(new byte[] { (byte)83 })));
- assertEquals("VA==",new String(Base64.encode(new byte[] { (byte)84 })));
- assertEquals("VQ==",new String(Base64.encode(new byte[] { (byte)85 })));
- assertEquals("Vg==",new String(Base64.encode(new byte[] { (byte)86 })));
- assertEquals("Vw==",new String(Base64.encode(new byte[] { (byte)87 })));
- assertEquals("WA==",new String(Base64.encode(new byte[] { (byte)88 })));
- assertEquals("WQ==",new String(Base64.encode(new byte[] { (byte)89 })));
- assertEquals("Wg==",new String(Base64.encode(new byte[] { (byte)90 })));
- assertEquals("Ww==",new String(Base64.encode(new byte[] { (byte)91 })));
- assertEquals("XA==",new String(Base64.encode(new byte[] { (byte)92 })));
- assertEquals("XQ==",new String(Base64.encode(new byte[] { (byte)93 })));
- assertEquals("Xg==",new String(Base64.encode(new byte[] { (byte)94 })));
- assertEquals("Xw==",new String(Base64.encode(new byte[] { (byte)95 })));
- assertEquals("YA==",new String(Base64.encode(new byte[] { (byte)96 })));
- assertEquals("YQ==",new String(Base64.encode(new byte[] { (byte)97 })));
- assertEquals("Yg==",new String(Base64.encode(new byte[] { (byte)98 })));
- assertEquals("Yw==",new String(Base64.encode(new byte[] { (byte)99 })));
- assertEquals("ZA==",new String(Base64.encode(new byte[] { (byte)100 })));
- assertEquals("ZQ==",new String(Base64.encode(new byte[] { (byte)101 })));
- assertEquals("Zg==",new String(Base64.encode(new byte[] { (byte)102 })));
- assertEquals("Zw==",new String(Base64.encode(new byte[] { (byte)103 })));
- assertEquals("aA==",new String(Base64.encode(new byte[] { (byte)104 })));
+ assertEquals("AA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0 })));
+ assertEquals("AQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)1 })));
+ assertEquals("Ag==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)2 })));
+ assertEquals("Aw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)3 })));
+ assertEquals("BA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)4 })));
+ assertEquals("BQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)5 })));
+ assertEquals("Bg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)6 })));
+ assertEquals("Bw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)7 })));
+ assertEquals("CA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)8 })));
+ assertEquals("CQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)9 })));
+ assertEquals("Cg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)10 })));
+ assertEquals("Cw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)11 })));
+ assertEquals("DA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)12 })));
+ assertEquals("DQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)13 })));
+ assertEquals("Dg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)14 })));
+ assertEquals("Dw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)15 })));
+ assertEquals("EA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)16 })));
+ assertEquals("EQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)17 })));
+ assertEquals("Eg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)18 })));
+ assertEquals("Ew==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)19 })));
+ assertEquals("FA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)20 })));
+ assertEquals("FQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)21 })));
+ assertEquals("Fg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)22 })));
+ assertEquals("Fw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)23 })));
+ assertEquals("GA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)24 })));
+ assertEquals("GQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)25 })));
+ assertEquals("Gg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)26 })));
+ assertEquals("Gw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)27 })));
+ assertEquals("HA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)28 })));
+ assertEquals("HQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)29 })));
+ assertEquals("Hg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)30 })));
+ assertEquals("Hw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)31 })));
+ assertEquals("IA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)32 })));
+ assertEquals("IQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)33 })));
+ assertEquals("Ig==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)34 })));
+ assertEquals("Iw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)35 })));
+ assertEquals("JA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)36 })));
+ assertEquals("JQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)37 })));
+ assertEquals("Jg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)38 })));
+ assertEquals("Jw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)39 })));
+ assertEquals("KA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)40 })));
+ assertEquals("KQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)41 })));
+ assertEquals("Kg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)42 })));
+ assertEquals("Kw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)43 })));
+ assertEquals("LA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)44 })));
+ assertEquals("LQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)45 })));
+ assertEquals("Lg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)46 })));
+ assertEquals("Lw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)47 })));
+ assertEquals("MA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)48 })));
+ assertEquals("MQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)49 })));
+ assertEquals("Mg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)50 })));
+ assertEquals("Mw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)51 })));
+ assertEquals("NA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)52 })));
+ assertEquals("NQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)53 })));
+ assertEquals("Ng==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)54 })));
+ assertEquals("Nw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)55 })));
+ assertEquals("OA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)56 })));
+ assertEquals("OQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)57 })));
+ assertEquals("Og==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)58 })));
+ assertEquals("Ow==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)59 })));
+ assertEquals("PA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)60 })));
+ assertEquals("PQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)61 })));
+ assertEquals("Pg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)62 })));
+ assertEquals("Pw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)63 })));
+ assertEquals("QA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)64 })));
+ assertEquals("QQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)65 })));
+ assertEquals("Qg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)66 })));
+ assertEquals("Qw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)67 })));
+ assertEquals("RA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)68 })));
+ assertEquals("RQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)69 })));
+ assertEquals("Rg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)70 })));
+ assertEquals("Rw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)71 })));
+ assertEquals("SA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)72 })));
+ assertEquals("SQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)73 })));
+ assertEquals("Sg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)74 })));
+ assertEquals("Sw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)75 })));
+ assertEquals("TA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)76 })));
+ assertEquals("TQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)77 })));
+ assertEquals("Tg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)78 })));
+ assertEquals("Tw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)79 })));
+ assertEquals("UA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)80 })));
+ assertEquals("UQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)81 })));
+ assertEquals("Ug==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)82 })));
+ assertEquals("Uw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)83 })));
+ assertEquals("VA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)84 })));
+ assertEquals("VQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)85 })));
+ assertEquals("Vg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)86 })));
+ assertEquals("Vw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)87 })));
+ assertEquals("WA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)88 })));
+ assertEquals("WQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)89 })));
+ assertEquals("Wg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)90 })));
+ assertEquals("Ww==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)91 })));
+ assertEquals("XA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)92 })));
+ assertEquals("XQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)93 })));
+ assertEquals("Xg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)94 })));
+ assertEquals("Xw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)95 })));
+ assertEquals("YA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)96 })));
+ assertEquals("YQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)97 })));
+ assertEquals("Yg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)98 })));
+ assertEquals("Yw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)99 })));
+ assertEquals("ZA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)100 })));
+ assertEquals("ZQ==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)101 })));
+ assertEquals("Zg==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)102 })));
+ assertEquals("Zw==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)103 })));
+ assertEquals("aA==",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)104 })));
}
public void testTriplets() {
- assertEquals("AAAA",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)0 })));
- assertEquals("AAAB",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)1 })));
- assertEquals("AAAC",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)2 })));
- assertEquals("AAAD",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)3 })));
- assertEquals("AAAE",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)4 })));
- assertEquals("AAAF",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)5 })));
- assertEquals("AAAG",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)6 })));
- assertEquals("AAAH",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)7 })));
- assertEquals("AAAI",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)8 })));
- assertEquals("AAAJ",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)9 })));
- assertEquals("AAAK",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)10 })));
- assertEquals("AAAL",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)11 })));
- assertEquals("AAAM",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)12 })));
- assertEquals("AAAN",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)13 })));
- assertEquals("AAAO",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)14 })));
- assertEquals("AAAP",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)15 })));
- assertEquals("AAAQ",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)16 })));
- assertEquals("AAAR",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)17 })));
- assertEquals("AAAS",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)18 })));
- assertEquals("AAAT",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)19 })));
- assertEquals("AAAU",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)20 })));
- assertEquals("AAAV",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)21 })));
- assertEquals("AAAW",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)22 })));
- assertEquals("AAAX",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)23 })));
- assertEquals("AAAY",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)24 })));
- assertEquals("AAAZ",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)25 })));
- assertEquals("AAAa",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)26 })));
- assertEquals("AAAb",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)27 })));
- assertEquals("AAAc",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)28 })));
- assertEquals("AAAd",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)29 })));
- assertEquals("AAAe",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)30 })));
- assertEquals("AAAf",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)31 })));
- assertEquals("AAAg",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)32 })));
- assertEquals("AAAh",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)33 })));
- assertEquals("AAAi",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)34 })));
- assertEquals("AAAj",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)35 })));
- assertEquals("AAAk",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)36 })));
- assertEquals("AAAl",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)37 })));
- assertEquals("AAAm",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)38 })));
- assertEquals("AAAn",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)39 })));
- assertEquals("AAAo",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)40 })));
- assertEquals("AAAp",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)41 })));
- assertEquals("AAAq",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)42 })));
- assertEquals("AAAr",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)43 })));
- assertEquals("AAAs",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)44 })));
- assertEquals("AAAt",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)45 })));
- assertEquals("AAAu",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)46 })));
- assertEquals("AAAv",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)47 })));
- assertEquals("AAAw",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)48 })));
- assertEquals("AAAx",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)49 })));
- assertEquals("AAAy",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)50 })));
- assertEquals("AAAz",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)51 })));
- assertEquals("AAA0",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)52 })));
- assertEquals("AAA1",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)53 })));
- assertEquals("AAA2",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)54 })));
- assertEquals("AAA3",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)55 })));
- assertEquals("AAA4",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)56 })));
- assertEquals("AAA5",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)57 })));
- assertEquals("AAA6",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)58 })));
- assertEquals("AAA7",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)59 })));
- assertEquals("AAA8",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)60 })));
- assertEquals("AAA9",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)61 })));
- assertEquals("AAA+",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)62 })));
- assertEquals("AAA/",new String(Base64.encode(new byte[] { (byte)0, (byte)0,
(byte)63 })));
+ assertEquals("AAAA",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)0 })));
+ assertEquals("AAAB",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)1 })));
+ assertEquals("AAAC",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)2 })));
+ assertEquals("AAAD",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)3 })));
+ assertEquals("AAAE",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)4 })));
+ assertEquals("AAAF",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)5 })));
+ assertEquals("AAAG",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)6 })));
+ assertEquals("AAAH",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)7 })));
+ assertEquals("AAAI",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)8 })));
+ assertEquals("AAAJ",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)9 })));
+ assertEquals("AAAK",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)10 })));
+ assertEquals("AAAL",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)11 })));
+ assertEquals("AAAM",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)12 })));
+ assertEquals("AAAN",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)13 })));
+ assertEquals("AAAO",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)14 })));
+ assertEquals("AAAP",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)15 })));
+ assertEquals("AAAQ",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)16 })));
+ assertEquals("AAAR",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)17 })));
+ assertEquals("AAAS",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)18 })));
+ assertEquals("AAAT",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)19 })));
+ assertEquals("AAAU",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)20 })));
+ assertEquals("AAAV",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)21 })));
+ assertEquals("AAAW",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)22 })));
+ assertEquals("AAAX",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)23 })));
+ assertEquals("AAAY",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)24 })));
+ assertEquals("AAAZ",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)25 })));
+ assertEquals("AAAa",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)26 })));
+ assertEquals("AAAb",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)27 })));
+ assertEquals("AAAc",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)28 })));
+ assertEquals("AAAd",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)29 })));
+ assertEquals("AAAe",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)30 })));
+ assertEquals("AAAf",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)31 })));
+ assertEquals("AAAg",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)32 })));
+ assertEquals("AAAh",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)33 })));
+ assertEquals("AAAi",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)34 })));
+ assertEquals("AAAj",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)35 })));
+ assertEquals("AAAk",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)36 })));
+ assertEquals("AAAl",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)37 })));
+ assertEquals("AAAm",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)38 })));
+ assertEquals("AAAn",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)39 })));
+ assertEquals("AAAo",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)40 })));
+ assertEquals("AAAp",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)41 })));
+ assertEquals("AAAq",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)42 })));
+ assertEquals("AAAr",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)43 })));
+ assertEquals("AAAs",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)44 })));
+ assertEquals("AAAt",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)45 })));
+ assertEquals("AAAu",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)46 })));
+ assertEquals("AAAv",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)47 })));
+ assertEquals("AAAw",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)48 })));
+ assertEquals("AAAx",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)49 })));
+ assertEquals("AAAy",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)50 })));
+ assertEquals("AAAz",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)51 })));
+ assertEquals("AAA0",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)52 })));
+ assertEquals("AAA1",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)53 })));
+ assertEquals("AAA2",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)54 })));
+ assertEquals("AAA3",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)55 })));
+ assertEquals("AAA4",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)56 })));
+ assertEquals("AAA5",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)57 })));
+ assertEquals("AAA6",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)58 })));
+ assertEquals("AAA7",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)59 })));
+ assertEquals("AAA8",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)60 })));
+ assertEquals("AAA9",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)61 })));
+ assertEquals("AAA+",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)62 })));
+ assertEquals("AAA/",HttpConstants.getAsciiString(Base64.encode(new byte[] {
(byte)0, (byte)0, (byte)63 })));
}
public void testKnownEncodings() {
-
assertEquals("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2dzLg==",new
String(Base64.encode("The quick brown fox jumped over the lazy dogs.".getBytes())));
-
assertEquals("SXQgd2FzIHRoZSBiZXN0IG9mIHRpbWVzLCBpdCB3YXMgdGhlIHdvcnN0IG9mIHRpbWVzLg==",new
String(Base64.encode("It was the best of times, it was the worst of
times.".getBytes())));
- assertEquals("aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9jb21tbW9ucw==",new
String(Base64.encode("http://jakarta.apache.org/commmons".getBytes())));
-
assertEquals("QWFCYkNjRGRFZUZmR2dIaElpSmpLa0xsTW1Obk9vUHBRcVJyU3NUdFV1VnZXd1h4WXlaeg==",new
String(Base64.encode("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz".getBytes())));
- assertEquals("eyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0=",new
String(Base64.encode("{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }".getBytes())));
- assertEquals("eHl6enkh",new String(Base64.encode("xyzzy!".getBytes())));
+
assertEquals("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2dzLg==",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("The
quick brown fox jumped over the lazy dogs."))));
+
assertEquals("SXQgd2FzIHRoZSBiZXN0IG9mIHRpbWVzLCBpdCB3YXMgdGhlIHdvcnN0IG9mIHRpbWVzLg==",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("It
was the best of times, it was the worst of times."))));
+
assertEquals("aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9jb21tbW9ucw==",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("http://jakarta.apache.org/commmons"))));
+
assertEquals("QWFCYkNjRGRFZUZmR2dIaElpSmpLa0xsTW1Obk9vUHBRcVJyU3NUdFV1VnZXd1h4WXlaeg==",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"))));
+
assertEquals("eyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0=",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }"))));
+
assertEquals("eHl6enkh",HttpConstants.getAsciiString(Base64.encode(HttpConstants.getAsciiBytes("xyzzy!"))));
}
public void testKnownDecodings() {
- assertEquals("The quick brown fox jumped over the lazy dogs.",new
String(Base64.decode("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2dzLg==".getBytes())));
- assertEquals("It was the best of times, it was the worst of times.",new
String(Base64.decode("SXQgd2FzIHRoZSBiZXN0IG9mIHRpbWVzLCBpdCB3YXMgdGhlIHdvcnN0IG9mIHRpbWVzLg==".getBytes())));
- assertEquals("http://jakarta.apache.org/commmons",new
String(Base64.decode("aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9jb21tbW9ucw==".getBytes())));
- assertEquals("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",new
String(Base64.decode("QWFCYkNjRGRFZUZmR2dIaElpSmpLa0xsTW1Obk9vUHBRcVJyU3NUdFV1VnZXd1h4WXlaeg==".getBytes())));
- assertEquals("{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }",new
String(Base64.decode("eyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0=".getBytes())));
- assertEquals("xyzzy!",new String(Base64.decode("eHl6enkh".getBytes())));
+ assertEquals("The quick brown fox jumped over the lazy
dogs.",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2dzLg=="))));
+ assertEquals("It was the best of times, it was the worst of
times.",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("SXQgd2FzIHRoZSBiZXN0IG9mIHRpbWVzLCBpdCB3YXMgdGhlIHdvcnN0IG9mIHRpbWVzLg=="))));
+
assertEquals("http://jakarta.apache.org/commmons",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9jb21tbW9ucw=="))));
+
assertEquals("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("QWFCYkNjRGRFZUZmR2dIaElpSmpLa0xsTW1Obk9vUHBRcVJyU3NUdFV1VnZXd1h4WXlaeg=="))));
+ assertEquals("{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
}",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("eyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IH0="))));
+
assertEquals("xyzzy!",HttpConstants.getAsciiString(Base64.decode(HttpConstants.getAsciiBytes("eHl6enkh"))));
}
// -------------------------------------------------------- Private Methods
1.7 +10 -10
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestStreams.java
Index: TestStreams.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestStreams.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TestStreams.java 7 Jan 2003 23:51:01 -0000 1.6
+++ TestStreams.java 16 Jan 2003 10:53:09 -0000 1.7
@@ -26,14 +26,14 @@
HttpMethod method = new SimpleHttpMethod();
//Test for when buffer is larger than chunk size
- InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(correctInput.getBytes()), method);
+ InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(HttpConstants.getBytes(correctInput)), method);
byte[] buffer = new byte[300];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
- String result = new String(out.toByteArray());
+ String result = HttpConstants.getContentString(out.toByteArray());
assertEquals(result, correctResult);
Header footer = method.getResponseFooter("footer1");
assertEquals(footer.getValue(), "abcde");
@@ -42,13 +42,13 @@
//Test for when buffer is smaller than chunk size.
- in = new ChunkedInputStream(new
ByteArrayInputStream(correctInput.getBytes()), method);
+ in = new ChunkedInputStream(new
ByteArrayInputStream(HttpConstants.getBytes(correctInput)), method);
buffer = new byte[7];
out = new ByteArrayOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
- result = new String(out.toByteArray());
+ result = HttpConstants.getContentString(out.toByteArray());
assertEquals(result, correctResult);
footer = method.getResponseFooter("footer1");
assertEquals(footer.getValue(), "abcde");
@@ -61,7 +61,7 @@
String corrupInput =
"10;key=\"value\"\r\n123456789012345\r\n5\r\n12345\r\n0\r\nFooter1: abcde\r\nFooter2:
fghij\r\n";
HttpMethod method = new SimpleHttpMethod();
- InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(corrupInput.getBytes()), method);
+ InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(HttpConstants.getBytes(corrupInput)), method);
byte[] buffer = new byte[300];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
@@ -79,7 +79,7 @@
String input = "0\r\n";
HttpMethod method = new SimpleHttpMethod();
- InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(input.getBytes()), method);
+ InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(HttpConstants.getBytes(input)), method);
byte[] buffer = new byte[300];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
@@ -91,12 +91,12 @@
public void testContentLengthInputStream() throws IOException {
String correct = "1234567890123456";
- InputStream in = new ContentLengthInputStream(new
ByteArrayInputStream(correct.getBytes()), 10);
+ InputStream in = new ContentLengthInputStream(new
ByteArrayInputStream(HttpConstants.getBytes(correct)), 10);
byte[] buffer = new byte[50];
int len = in.read(buffer);
ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(buffer, 0, len);
- String result = new String(out.toByteArray());
+ String result = HttpConstants.getContentString(out.toByteArray());
assertEquals(result, "1234567890");
}
@@ -104,7 +104,7 @@
String input =
"76126;27823abcd;:q38a-\nkjc\rk%1ad\tkh/asdui\r\njkh+?\\suweb";
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
OutputStream out = new ChunkedOutputStream(buffer);
- out.write(input.getBytes());
+ out.write(HttpConstants.getBytes(input));
out.close();
buffer.close();
InputStream in = new ChunkedInputStream(new
ByteArrayInputStream(buffer.toByteArray()), new GetMethod());
@@ -116,7 +116,7 @@
result.write(d, 0, len);
}
- String output = new String(result.toByteArray());
+ String output = HttpConstants.getContentString(result.toByteArray());
assertEquals(input, output);
}
1.10 +12 -10
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappMethods.java
Index: TestWebappMethods.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappMethods.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TestWebappMethods.java 16 Dec 2002 15:19:37 -0000 1.9
+++ TestWebappMethods.java 16 Jan 2003 10:53:09 -0000 1.10
@@ -331,9 +331,11 @@
client.getHostConfiguration().setHost(host, port, "http");
PostMethod method = new PostMethod("/" + context + "/body");
method.setUseDisk(false);
- String body =
"quote=It+was+the+best+of+times%2C+it+was+the+worst+of+times.";
- method.setRequestBody(new ByteArrayInputStream(body.getBytes()));
- method.setRequestContentLength(body.length());
+ String bodyStr =
"quote=It+was+the+best+of+times%2C+it+was+the+worst+of+times.";
+ byte[] body = HttpConstants.getContentBytes(bodyStr);
+
+ method.setRequestBody(new ByteArrayInputStream(body));
+ method.setRequestContentLength(body.length);
try {
client.executeMethod(method);
} catch (Throwable t) {
@@ -351,7 +353,7 @@
PostMethod method = new PostMethod("/" + context + "/body");
method.setUseDisk(false);
String body =
"quote=It+was+the+best+of+times%2C+it+was+the+worst+of+times.";
- method.setRequestBody(new ByteArrayInputStream(body.getBytes()));
+ method.setRequestBody(body);
method.setRequestContentLength(PostMethod.CONTENT_LENGTH_AUTO);
try {
client.executeMethod(method);
@@ -370,7 +372,7 @@
PostMethod method = new PostMethod("/" + context + "/body");
method.setUseDisk(false);
String body =
"quote=It+was+the+best+of+times%2C+it+was+the+worst+of+times.";
- method.setRequestBody(new ByteArrayInputStream(body.getBytes()));
+ method.setRequestBody(body);
method.setRequestContentLength(PostMethod.CONTENT_LENGTH_CHUNKED);
try {
client.executeMethod(method);
@@ -405,7 +407,7 @@
PostMethod method = new PostMethod("/" + context + "/body");
method.setUseDisk(false);
String bodyStr = "Like, hello, and stuff";
- byte [] body = bodyStr.getBytes();
+ byte [] body = HttpConstants.getContentBytes(bodyStr);
method.setRequestHeader("Content-Type", "text/plain");
method.setRequestBody(new ByteArrayInputStream(body));
method.setRequestContentLength(body.length);
1.11 +9 -8
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappRedirect.java
Index: TestWebappRedirect.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestWebappRedirect.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- TestWebappRedirect.java 26 Oct 2002 15:38:18 -0000 1.10
+++ TestWebappRedirect.java 16 Jan 2003 10:53:09 -0000 1.11
@@ -206,15 +206,16 @@
}
public void testPostRedirect() throws Exception {
- String body = "Hello World";
+ String bodyStr = "Hello World";
HttpClient client = new HttpClient();
client.startSession(host, port);
PostMethod method = new PostMethod("/" + context + "/redirect");
method.setQueryString("to=" + URIUtil.encodeWithinQuery("http://" +
host + ":" + port + "/" + context +
"/params?foo=bar&bar=foo"));
- method.setRequestBody(new ByteArrayInputStream(body.getBytes()));
- method.setRequestContentLength(body.length()); //unbuffered request
+ byte[] body = HttpConstants.getContentBytes(bodyStr);
+ method.setRequestBody(new ByteArrayInputStream(body));
+ method.setRequestContentLength(body.length); //unbuffered request
method.setFollowRedirects(true);
method.setUseDisk(false);
try {
@@ -230,7 +231,7 @@
method.setQueryString("to=" + URIUtil.encodeWithinQuery("http://" +
host + ":" + port + "/" + context +
"/params?foo=bar&bar=foo"));
- method.setRequestBody(new ByteArrayInputStream(body.getBytes()));
+ method.setRequestBody(new ByteArrayInputStream(body));
method.setRequestContentLength(PostMethod.CONTENT_LENGTH_AUTO); //buffered
request
method.setFollowRedirects(true);
method.setUseDisk(false);
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>