You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2012/03/28 17:27:09 UTC
svn commit: r1306412 - in /commons/proper/codec/trunk/src:
main/java/org/apache/commons/codec/net/
test/java/org/apache/commons/codec/net/
Author: ggregory
Date: Wed Mar 28 15:27:09 2012
New Revision: 1306412
URL: http://svn.apache.org/viewvc?rev=1306412&view=rev
Log:
[CODEC-136] Use Charset objects when possible, create Charsets for required character encodings.
Modified:
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/BCodec.java
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/QCodec.java
commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java
commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/BCodecTest.java
commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/QCodecTest.java
Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/BCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/BCodec.java?rev=1306412&r1=1306411&r2=1306412&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/BCodec.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/BCodec.java Wed Mar 28 15:27:09 2012
@@ -18,8 +18,10 @@
package org.apache.commons.codec.net;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
-import org.apache.commons.codec.CharEncoding;
+import org.apache.commons.codec.Charsets;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
import org.apache.commons.codec.StringDecoder;
@@ -49,13 +51,13 @@ public class BCodec extends RFC1522Codec
/**
* The default charset used for string decoding and encoding.
*/
- private final String charset;
+ private final Charset charset;
/**
* Default constructor.
*/
public BCodec() {
- this(CharEncoding.UTF_8);
+ this(Charsets.UTF_8);
}
/**
@@ -66,11 +68,24 @@ public class BCodec extends RFC1522Codec
*
* @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
*/
- public BCodec(final String charset) {
- super();
+ public BCodec(final Charset charset) {
this.charset = charset;
}
+ /**
+ * Constructor which allows for the selection of a default charset
+ *
+ * @param charsetName
+ * the default charset to use.
+ * @throws UnsupportedCharsetException
+ * If the named charset is unavailable
+ * @since 1.7 throws UnsupportedCharsetException if the named charset is unavailable
+ * @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+ */
+ public BCodec(final String charsetName) {
+ this(Charset.forName(charsetName));
+ }
+
@Override
protected String getEncoding() {
return "B";
@@ -104,12 +119,31 @@ public class BCodec extends RFC1522Codec
* @throws EncoderException
* thrown if a failure condition is encountered during the encoding process.
*/
+ public String encode(final String value, final Charset charset) throws EncoderException {
+ if (value == null) {
+ return null;
+ }
+ return encodeText(value, charset);
+ }
+
+ /**
+ * Encodes a string into its Base64 form using the specified charset. Unsafe characters are escaped.
+ *
+ * @param value
+ * string to convert to Base64 form
+ * @param charset
+ * the charset for <code>value</code>
+ * @return Base64 string
+ *
+ * @throws EncoderException
+ * thrown if a failure condition is encountered during the encoding process.
+ */
public String encode(final String value, final String charset) throws EncoderException {
if (value == null) {
return null;
}
try {
- return encodeText(value, charset);
+ return this.encodeText(value, charset);
} catch (UnsupportedEncodingException e) {
throw new EncoderException(e.getMessage(), e);
}
@@ -129,7 +163,7 @@ public class BCodec extends RFC1522Codec
if (value == null) {
return null;
}
- return encode(value, getDefaultCharset());
+ return encode(value, this.getCharset());
}
/**
@@ -147,7 +181,7 @@ public class BCodec extends RFC1522Codec
return null;
}
try {
- return decodeText(value);
+ return this.decodeText(value);
} catch (UnsupportedEncodingException e) {
throw new DecoderException(e.getMessage(), e);
}
@@ -201,11 +235,21 @@ public class BCodec extends RFC1522Codec
}
/**
- * The default charset used for string decoding and encoding.
+ * Gets the default charset name used for string decoding and encoding.
*
- * @return the default string charset.
+ * @return the default charset name
+ * @since 1.7
*/
- public String getDefaultCharset() {
+ public Charset getCharset() {
return this.charset;
}
+
+ /**
+ * Gets the default charset name used for string decoding and encoding.
+ *
+ * @return the default charset name
+ */
+ public String getDefaultCharset() {
+ return this.charset.name();
+ }
}
Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/QCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/QCodec.java?rev=1306412&r1=1306411&r2=1306412&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/QCodec.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/QCodec.java Wed Mar 28 15:27:09 2012
@@ -18,6 +18,8 @@
package org.apache.commons.codec.net;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
import java.util.BitSet;
import org.apache.commons.codec.CharEncoding;
@@ -50,7 +52,7 @@ public class QCodec extends RFC1522Codec
/**
* The default charset used for string decoding and encoding.
*/
- private final String charset;
+ private final Charset charset;
/**
* BitSet of printable characters as defined in RFC 1522.
@@ -121,11 +123,25 @@ public class QCodec extends RFC1522Codec
*
* @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
*/
- public QCodec(final String charset) {
+ public QCodec(final Charset charset) {
super();
this.charset = charset;
}
+ /**
+ * Constructor which allows for the selection of a default charset
+ *
+ * @param charsetName
+ * the charset to use.
+ * @throws UnsupportedCharsetException
+ * If the named charset is unavailable
+ * @since 1.7 throws UnsupportedCharsetException if the named charset is unavailable
+ * @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+ */
+ public QCodec(final String charsetName) {
+ this(Charset.forName(charsetName));
+ }
+
@Override
protected String getEncoding() {
return "Q";
@@ -186,6 +202,25 @@ public class QCodec extends RFC1522Codec
* @throws EncoderException
* thrown if a failure condition is encountered during the encoding process.
*/
+ public String encode(final String pString, final Charset charset) throws EncoderException {
+ if (pString == null) {
+ return null;
+ }
+ return encodeText(pString, charset);
+ }
+
+ /**
+ * Encodes a string into its quoted-printable form using the specified charset. Unsafe characters are escaped.
+ *
+ * @param pString
+ * string to convert to quoted-printable form
+ * @param charset
+ * the charset for pString
+ * @return quoted-printable string
+ *
+ * @throws EncoderException
+ * thrown if a failure condition is encountered during the encoding process.
+ */
public String encode(final String pString, final String charset) throws EncoderException {
if (pString == null) {
return null;
@@ -211,7 +246,7 @@ public class QCodec extends RFC1522Codec
if (pString == null) {
return null;
}
- return encode(pString, getDefaultCharset());
+ return encode(pString, getCharset());
}
/**
@@ -285,15 +320,25 @@ public class QCodec extends RFC1522Codec
}
/**
- * The default charset used for string decoding and encoding.
+ * Gets the default charset name used for string decoding and encoding.
*
- * @return the default string charset.
+ * @return the default charset name
+ * @since 1.7
*/
- public String getDefaultCharset() {
+ public Charset getCharset() {
return this.charset;
}
/**
+ * Gets the default charset name used for string decoding and encoding.
+ *
+ * @return the default charset name
+ */
+ public String getDefaultCharset() {
+ return this.charset.name();
+ }
+
+ /**
* Tests if optional transformation of SPACE characters is to be used
*
* @return <code>true</code> if SPACE characters are to be transformed, <code>false</code> otherwise
Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java?rev=1306412&r1=1306411&r2=1306412&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java (original)
+++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java Wed Mar 28 15:27:09 2012
@@ -18,6 +18,7 @@
package org.apache.commons.codec.net;
import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
@@ -74,12 +75,10 @@ abstract class RFC1522Codec {
*
* @throws EncoderException thrown if there is an error condition during the Encoding
* process.
- * @throws UnsupportedEncodingException thrown if charset is not supported
- *
* @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
*/
- protected String encodeText(final String text, final String charset)
- throws EncoderException, UnsupportedEncodingException
+ protected String encodeText(final String text, final Charset charset)
+ throws EncoderException
{
if (text == null) {
return null;
@@ -88,15 +87,41 @@ abstract class RFC1522Codec {
buffer.append(PREFIX);
buffer.append(charset);
buffer.append(SEP);
- buffer.append(getEncoding());
+ buffer.append(this.getEncoding());
buffer.append(SEP);
- byte [] rawdata = doEncoding(text.getBytes(charset));
- buffer.append(StringUtils.newStringUsAscii(rawdata));
+ byte [] rawData = this.doEncoding(text.getBytes(charset));
+ buffer.append(StringUtils.newStringUsAscii(rawData));
buffer.append(POSTFIX);
return buffer.toString();
}
/**
+ * Applies an RFC 1522 compliant encoding scheme to the given string of text with the
+ * given charset. This method constructs the "encoded-word" header common to all the
+ * RFC 1522 codecs and then invokes {@link #doEncoding(byte [])} method of a concrete
+ * class to perform the specific encoding.
+ *
+ * @param text a string to encode
+ * @param charsetName the charset to use
+ *
+ * @return RFC 1522 compliant "encoded-word"
+ *
+ * @throws EncoderException thrown if there is an error condition during the Encoding
+ * process.
+ * @throws UnsupportedEncodingException if charset is not available
+ *
+ * @see <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html">Standard charsets</a>
+ */
+ protected String encodeText(final String text, final String charsetName)
+ throws EncoderException, UnsupportedEncodingException
+ {
+ if (text == null) {
+ return null;
+ }
+ return this.encodeText(text, Charset.forName(charsetName));
+ }
+
+ /**
* Applies an RFC 1522 compliant decoding scheme to the given string of text. This method
* processes the "encoded-word" header common to all the RFC 1522 codecs and then invokes
* {@link #doEncoding(byte [])} method of a concrete class to perform the specific decoding.
Modified: commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/BCodecTest.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/BCodecTest.java?rev=1306412&r1=1306411&r2=1306412&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/BCodecTest.java (original)
+++ commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/BCodecTest.java Wed Mar 28 15:27:09 2012
@@ -21,6 +21,8 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
+import java.nio.charset.UnsupportedCharsetException;
+
import org.apache.commons.codec.CharEncoding;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
@@ -123,21 +125,9 @@ public class BCodecTest {
}
}
- @Test
+ @Test(expected=UnsupportedCharsetException.class)
public void testInvalidEncoding() {
- BCodec bcodec = new BCodec("NONSENSE");
- try {
- bcodec.encode("Hello there!");
- fail("We set the encoding to a bogus NONSENSE value, this shouldn't have worked.");
- } catch (EncoderException ee) {
- // Exception expected, test segment passes.
- }
- try {
- bcodec.decode("=?NONSENSE?B?Hello there!?=");
- fail("We set the encoding to a bogus NONSENSE value, this shouldn't have worked.");
- } catch (DecoderException ee) {
- // Exception expected, test segment passes.
- }
+ new BCodec("NONSENSE");
}
@Test
Modified: commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/QCodecTest.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/QCodecTest.java?rev=1306412&r1=1306411&r2=1306412&view=diff
==============================================================================
--- commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/QCodecTest.java (original)
+++ commons/proper/codec/trunk/src/test/java/org/apache/commons/codec/net/QCodecTest.java Wed Mar 28 15:27:09 2012
@@ -24,6 +24,8 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.nio.charset.UnsupportedCharsetException;
+
import org.apache.commons.codec.CharEncoding;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.EncoderException;
@@ -150,21 +152,9 @@ public class QCodecTest {
}
- @Test
+ @Test(expected=UnsupportedCharsetException.class)
public void testInvalidEncoding() {
- QCodec qcodec = new QCodec("NONSENSE");
- try {
- qcodec.encode("Hello there!");
- fail( "We set the encoding to a bogus NONSENSE vlaue, this shouldn't have worked.");
- } catch (EncoderException ee) {
- // Exception expected, test segment passes.
- }
- try {
- qcodec.decode("=?NONSENSE?Q?Hello there!?=");
- fail( "We set the encoding to a bogus NONSENSE vlaue, this shouldn't have worked.");
- } catch (DecoderException ee) {
- // Exception expected, test segment passes.
- }
+ new QCodec("NONSENSE");
}
@Test