This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-codec.git
commit ffc24a5d0b6b84d286cbc9a7be278a91b625804b Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sat Apr 13 08:30:26 2024 -0400 Refactor common data --- .../org/apache/commons/codec/binary/Base64.java | 2 - .../java/org/apache/commons/codec/net/BCodec.java | 47 +++------------------- .../java/org/apache/commons/codec/net/QCodec.java | 39 +----------------- .../org/apache/commons/codec/net/RFC1522Codec.java | 33 +++++++++++++++ .../apache/commons/codec/net/RFC1522CodecTest.java | 6 +++ ...522Codec.java => RFC1522OverrideTestCodec.java} | 7 +++- 6 files changed, 52 insertions(+), 82 deletions(-) diff --git a/src/main/java/org/apache/commons/codec/binary/Base64.java b/src/main/java/org/apache/commons/codec/binary/Base64.java index a53cb8b0..9046259a 100644 --- a/src/main/java/org/apache/commons/codec/binary/Base64.java +++ b/src/main/java/org/apache/commons/codec/binary/Base64.java @@ -241,7 +241,6 @@ public class Base64 extends BaseNCodec { if (BinaryCodec.isEmpty(binaryData)) { return binaryData; } - // Create this so can use the super-class method // Also ensures that the same roundings are performed by the ctor and the code final Base64 b64 = isChunked ? new Base64(urlSafe) : new Base64(0, CHUNK_SEPARATOR, urlSafe); @@ -252,7 +251,6 @@ public class Base64 extends BaseNCodec { ") than the specified maximum size of " + maxResultSize); } - return b64.encode(binaryData); } diff --git a/src/main/java/org/apache/commons/codec/net/BCodec.java b/src/main/java/org/apache/commons/codec/net/BCodec.java index 3f66e557..fae4520e 100644 --- a/src/main/java/org/apache/commons/codec/net/BCodec.java +++ b/src/main/java/org/apache/commons/codec/net/BCodec.java @@ -54,11 +54,6 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder */ private static final CodecPolicy DECODING_POLICY_DEFAULT = CodecPolicy.LENIENT; - /** - * The default Charset used for string decoding and encoding. - */ - private final Charset charset; - /** * If true then decoding should throw an exception for impossible combinations of bits at the * end of the byte input. The default is to decode as much of them as possible. @@ -96,7 +91,7 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder * @since 1.15 */ public BCodec(final Charset charset, final CodecPolicy decodingPolicy) { - this.charset = charset; + super(charset); this.decodingPolicy = decodingPolicy; } @@ -133,9 +128,7 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder if (value instanceof String) { return decode((String) value); } - throw new DecoderException("Objects of type " + - value.getClass().getName() + - " cannot be decoded using BCodec"); + throw new DecoderException("Objects of type " + value.getClass().getName() + " cannot be decoded using BCodec"); } /** @@ -190,9 +183,7 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder if (value instanceof String) { return encode((String) value); } - throw new EncoderException("Objects of type " + - value.getClass().getName() + - " cannot be encoded using BCodec"); + throw new EncoderException("Objects of type " + value.getClass().getName() + " cannot be encoded using BCodec"); } /** @@ -206,10 +197,7 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder */ @Override public String encode(final String strSource) throws EncoderException { - if (strSource == null) { - return null; - } - return encode(strSource, this.getCharset()); + return encode(strSource, getCharset()); } /** @@ -225,9 +213,6 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder * @since 1.7 */ public String encode(final String strSource, final Charset sourceCharset) throws EncoderException { - if (strSource == null) { - return null; - } return encodeText(strSource, sourceCharset); } @@ -243,35 +228,13 @@ public class BCodec extends RFC1522Codec implements StringEncoder, StringDecoder * thrown if a failure condition is encountered during the encoding process. */ public String encode(final String strSource, final String sourceCharset) throws EncoderException { - if (strSource == null) { - return null; - } try { - return this.encodeText(strSource, sourceCharset); + return encodeText(strSource, sourceCharset); } catch (final UnsupportedCharsetException e) { throw new EncoderException(e.getMessage(), e); } } - /** - * Gets the default Charset name used for string decoding and encoding. - * - * @return the default Charset name - * @since 1.7 - */ - 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(); - } - @Override protected String getEncoding() { return "B"; diff --git a/src/main/java/org/apache/commons/codec/net/QCodec.java b/src/main/java/org/apache/commons/codec/net/QCodec.java index cbb4c941..3dad9bde 100644 --- a/src/main/java/org/apache/commons/codec/net/QCodec.java +++ b/src/main/java/org/apache/commons/codec/net/QCodec.java @@ -104,11 +104,6 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder private static final byte UNDERSCORE = 95; - /** - * The default Charset used for string decoding and encoding. - */ - private final Charset charset; - private boolean encodeBlanks; /** @@ -128,7 +123,7 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder * @since 1.7 */ public QCodec(final Charset charset) { - this.charset = charset; + super(charset); } /** @@ -246,9 +241,7 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder if (obj instanceof String) { return encode((String) obj); } - throw new EncoderException("Objects of type " + - obj.getClass().getName() + - " cannot be encoded using Q codec"); + throw new EncoderException("Objects of type " + obj.getClass().getName() + " cannot be encoded using Q codec"); } /** @@ -262,9 +255,6 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder */ @Override public String encode(final String sourceStr) throws EncoderException { - if (sourceStr == null) { - return null; - } return encode(sourceStr, getCharset()); } @@ -281,9 +271,6 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder * @since 1.7 */ public String encode(final String sourceStr, final Charset sourceCharset) throws EncoderException { - if (sourceStr == null) { - return null; - } return encodeText(sourceStr, sourceCharset); } @@ -299,9 +286,6 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder * thrown if a failure condition is encountered during the encoding process. */ public String encode(final String sourceStr, final String sourceCharset) throws EncoderException { - if (sourceStr == null) { - return null; - } try { return encodeText(sourceStr, sourceCharset); } catch (final UnsupportedCharsetException e) { @@ -309,25 +293,6 @@ public class QCodec extends RFC1522Codec implements StringEncoder, StringDecoder } } - /** - * Gets the default Charset name used for string decoding and encoding. - * - * @return the default Charset name - * @since 1.7 - */ - 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(); - } - @Override protected String getEncoding() { return "Q"; diff --git a/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java b/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java index c0e63a9e..39064c52 100644 --- a/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java +++ b/src/main/java/org/apache/commons/codec/net/RFC1522Codec.java @@ -20,6 +20,7 @@ package org.apache.commons.codec.net; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; +import java.util.Objects; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.EncoderException; @@ -51,6 +52,15 @@ abstract class RFC1522Codec { /** Postfix. */ protected static final String PREFIX = "=?"; + /** + * The default Charset used for string decoding and encoding. + */ + protected final Charset charset; + + RFC1522Codec(final Charset charset) { + this.charset = Objects.requireNonNull(charset, "charset"); + } + /** * Applies an RFC 1522 compliant decoding scheme to the given string of text. * <p> @@ -171,9 +181,32 @@ abstract class RFC1522Codec { * @see Charset */ protected String encodeText(final String text, final String charsetName) throws EncoderException { + if (text == null) { + // Don't attempt charsetName conversion. + return null; + } return encodeText(text, Charset.forName(charsetName)); } + /** + * Gets the default Charset name used for string decoding and encoding. + * + * @return the default Charset name + * @since 1.7 + */ + public Charset getCharset() { + return charset; + } + + /** + * Gets the default Charset name used for string decoding and encoding. + * + * @return the default Charset name + */ + public String getDefaultCharset() { + return charset.name(); + } + /** * Returns the codec name (referred to as encoding in the RFC 1522). * diff --git a/src/test/java/org/apache/commons/codec/net/RFC1522CodecTest.java b/src/test/java/org/apache/commons/codec/net/RFC1522CodecTest.java index b1156000..9e566a81 100644 --- a/src/test/java/org/apache/commons/codec/net/RFC1522CodecTest.java +++ b/src/test/java/org/apache/commons/codec/net/RFC1522CodecTest.java @@ -20,6 +20,8 @@ package org.apache.commons.codec.net; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; +import java.nio.charset.StandardCharsets; + import org.apache.commons.codec.CharEncoding; import org.apache.commons.codec.DecoderException; import org.junit.jupiter.api.Test; @@ -31,6 +33,10 @@ public class RFC1522CodecTest { static class RFC1522TestCodec extends RFC1522Codec { + RFC1522TestCodec() { + super(StandardCharsets.UTF_8); + } + @Override protected byte[] doDecoding(final byte[] bytes) { return bytes; diff --git a/src/test/java/org/apache/commons/codec/net/CustomRFC1522Codec.java b/src/test/java/org/apache/commons/codec/net/RFC1522OverrideTestCodec.java similarity index 91% rename from src/test/java/org/apache/commons/codec/net/CustomRFC1522Codec.java rename to src/test/java/org/apache/commons/codec/net/RFC1522OverrideTestCodec.java index 1c99d4aa..c643d9da 100644 --- a/src/test/java/org/apache/commons/codec/net/CustomRFC1522Codec.java +++ b/src/test/java/org/apache/commons/codec/net/RFC1522OverrideTestCodec.java @@ -19,6 +19,7 @@ package org.apache.commons.codec.net; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.EncoderException; @@ -26,7 +27,11 @@ import org.apache.commons.codec.EncoderException; /** * Tests overriding the package private RFC1522Codec. */ -public class CustomRFC1522Codec extends RFC1522Codec { +class RFC1522OverrideTestCodec extends RFC1522Codec { + + RFC1522OverrideTestCodec() { + super(StandardCharsets.UTF_8); + } @Override protected String decodeText(final String text) throws DecoderException, UnsupportedEncodingException {