Bug579081 optimization convert schema base64 to byte array (#1448)
Signed-off-by: lananda <lalitha.ananda@oracle.com>
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
index 63b67e3..26a48b0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
@@ -14,7 +14,9 @@
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.internal.oxm;
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Time;
@@ -1589,17 +1591,29 @@
if (sourceObject instanceof String) {
//the base64 string may have contained embedded whitespaces. Try again after
//Removing any whitespaces.
- StringTokenizer tokenizer = new StringTokenizer((String)sourceObject);
- StringBuilder builder = new StringBuilder();
- while(tokenizer.hasMoreTokens()) {
- builder.append(tokenizer.nextToken());
- }
- byte[] bytes = Base64.base64Decode(builder.toString().getBytes());
- return bytes;
+ return Base64.base64Decode(base64RemoveWhiteSpaces((String) sourceObject));
}
return convertObjectToByteArray(sourceObject);
}
+ private byte[] base64RemoveWhiteSpaces(String sourceObject) {
+ StringTokenizer tokenizer = new StringTokenizer(sourceObject);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(sourceObject.length());
+ try {
+ while (tokenizer.hasMoreTokens()) {
+ baos.write(tokenizer.nextToken().getBytes());
+ }
+ } catch (IOException e) {
+ throw ConversionException.couldNotBeConverted(sourceObject, CoreClassConstants.APBYTE, e);
+ } finally {
+ try {
+ baos.close();
+ } catch (Exception e) {
+ }
+ }
+ return baos.toByteArray();
+ }
+
@Override
public Object convertSchemaBase64ListToByteArrayList(Object sourceObject, CoreContainerPolicy containerPolicy, CoreAbstractSession session) throws ConversionException {
if (sourceObject instanceof String) {