Base64Utils falls back to JAXB DatatypeConverter for String-based encoding

Issue: SPR-12938
This commit is contained in:
Juergen Hoeller
2015-06-26 22:06:13 +02:00
parent 5b47504dd4
commit a5349eb2f8
3 changed files with 81 additions and 35 deletions

View File

@@ -18,32 +18,67 @@ package org.springframework.util;
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Juergen Hoeller
* @since 4.2
*/
public class Base64UtilsTests {
@Test
public void jdk8VsCommonsCodec() throws UnsupportedEncodingException {
public void encodeWithJdk8VsCommonsCodec() throws UnsupportedEncodingException {
Base64Utils.Base64Delegate jdkDelegate = new Base64Utils.JdkBase64Delegate();
Base64Utils.Base64Delegate commonsDelegate = new Base64Utils.CommonsCodecBase64Delegate();
byte[] bytes = new byte[]
{-0x4f, 0xa, -0x73, -0x4f, 0x64, -0x20, 0x75, 0x41, 0x5, -0x49, -0x57, -0x65, -0x19, 0x2e, 0x3f, -0x1b};
assertArrayEquals(jdkDelegate.encode(bytes), commonsDelegate.encode(bytes));
assertArrayEquals(bytes, jdkDelegate.decode(jdkDelegate.encode(bytes)));
assertArrayEquals(bytes, commonsDelegate.decode(commonsDelegate.encode(bytes)));
bytes = "Hello World".getBytes("UTF-8");
assertArrayEquals(jdkDelegate.encode(bytes), commonsDelegate.encode(bytes));
assertArrayEquals(bytes, jdkDelegate.decode(jdkDelegate.encode(bytes)));
assertArrayEquals(bytes, commonsDelegate.decode(commonsDelegate.encode(bytes)));
bytes = "Hello World\r\nSecond Line".getBytes("UTF-8");
assertArrayEquals(jdkDelegate.encode(bytes), commonsDelegate.encode(bytes));
assertArrayEquals(bytes, jdkDelegate.decode(jdkDelegate.encode(bytes)));
assertArrayEquals(bytes, commonsDelegate.decode(commonsDelegate.encode(bytes)));
bytes = "Hello World\r\nSecond Line\r\n".getBytes("UTF-8");
assertArrayEquals(jdkDelegate.encode(bytes), commonsDelegate.encode(bytes));
assertArrayEquals(bytes, jdkDelegate.decode(jdkDelegate.encode(bytes)));
assertArrayEquals(bytes, commonsDelegate.decode(commonsDelegate.encode(bytes)));
}
@Test
public void encodeToStringWithJdk8VsJaxb() throws UnsupportedEncodingException {
byte[] bytes = new byte[]
{-0x4f, 0xa, -0x73, -0x4f, 0x64, -0x20, 0x75, 0x41, 0x5, -0x49, -0x57, -0x65, -0x19, 0x2e, 0x3f, -0x1b};
assertEquals(Base64Utils.encodeToString(bytes), DatatypeConverter.printBase64Binary(bytes));
assertArrayEquals(bytes, Base64Utils.decodeFromString(Base64Utils.encodeToString(bytes)));
assertArrayEquals(bytes, DatatypeConverter.parseBase64Binary(DatatypeConverter.printBase64Binary(bytes)));
bytes = "Hello World".getBytes("UTF-8");
assertEquals(Base64Utils.encodeToString(bytes), DatatypeConverter.printBase64Binary(bytes));
assertArrayEquals(bytes, Base64Utils.decodeFromString(Base64Utils.encodeToString(bytes)));
assertArrayEquals(bytes, DatatypeConverter.parseBase64Binary(DatatypeConverter.printBase64Binary(bytes)));
bytes = "Hello World\r\nSecond Line".getBytes("UTF-8");
assertEquals(Base64Utils.encodeToString(bytes), DatatypeConverter.printBase64Binary(bytes));
assertArrayEquals(bytes, Base64Utils.decodeFromString(Base64Utils.encodeToString(bytes)));
assertArrayEquals(bytes, DatatypeConverter.parseBase64Binary(DatatypeConverter.printBase64Binary(bytes)));
bytes = "Hello World\r\nSecond Line\r\n".getBytes("UTF-8");
assertEquals(Base64Utils.encodeToString(bytes), DatatypeConverter.printBase64Binary(bytes));
assertArrayEquals(bytes, Base64Utils.decodeFromString(Base64Utils.encodeToString(bytes)));
assertArrayEquals(bytes, DatatypeConverter.parseBase64Binary(DatatypeConverter.printBase64Binary(bytes)));
}
}