com.ibm.as400.util.BASE64Decoder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: BASE64Decoder.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 2017-2017 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.util;
//import java.io.IOException;
//import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.ibm.as400.access.Trace;
/* Replacement for sun.misc.BASE64Decoder. If that is available, it will be used
*
*/
public class BASE64Decoder {
Object decoder ;
boolean sunMisc = false;
boolean javaUtil = false;
private Method decodeStringMethod;
static byte[] dummyBytes = new byte[0];
public BASE64Decoder() {
try {
String sunClass = "sun.misc.BASE64Decoder";
Class decoderClass = Class.forName(sunClass);
decoder = decoderClass.newInstance();
Class[] parameterTypes = new Class[1];
parameterTypes[0] = Class.forName("java.lang.String");
decodeStringMethod = decoderClass.getMethod("decodeBuffer", parameterTypes);
sunMisc = true;
} catch (ClassNotFoundException e) {
Trace.log(Trace.ERROR, e);
} catch (InstantiationException e) {
Trace.log(Trace.ERROR, e);
} catch (IllegalAccessException e) {
Trace.log(Trace.ERROR, e);
} catch (SecurityException e) {
Trace.log(Trace.ERROR, e);
} catch (NoSuchMethodException e) {
Trace.log(Trace.ERROR, e);
}
if (!sunMisc) {
// Try the new method
Class decoderClass;
try {
Class baseClass = Class.forName("java.util.Base64");
Class [] zeroArgs = new Class[0];
Method getDecoderMethod = baseClass.getMethod("getDecoder", zeroArgs);
decoder = getDecoderMethod.invoke(null, null) ;
decoderClass = decoder.getClass();
Class[] parameterTypes = new Class[1];
parameterTypes[0] = Class.forName("java.lang.String"); //@AF3A
decodeStringMethod = decoderClass.getMethod("decode", parameterTypes); //@Af3C
javaUtil = true;
} catch (ClassNotFoundException e) {
Trace.log(Trace.ERROR, e);
} catch (IllegalAccessException e) {
Trace.log(Trace.ERROR, e);
} catch (SecurityException e) {
Trace.log(Trace.ERROR, e);
} catch (NoSuchMethodException e) {
Trace.log(Trace.ERROR, e);
} catch (IllegalArgumentException e) {
Trace.log(Trace.ERROR, e);
} catch (InvocationTargetException e) {
Trace.log(Trace.ERROR, e);
}
}
}
public byte[] decodeBuffer(String inString) {
if (sunMisc | javaUtil) {
Object[] args = new Object[1];
args[0] = inString;
try {
return (byte[]) decodeStringMethod.invoke(decoder, args);
} catch (Exception e) {
if (e instanceof InvocationTargetException) {
InvocationTargetException ite = (InvocationTargetException) e;
Throwable cause = ite.getCause();
if (cause instanceof Error) {
throw (Error) cause;
} else {
throw new Error("UNEXPECTED EXCEPTION", e);
}
} else {
throw new Error("UNEXPECTED EXCEPTION", e);
}
}
} else {
throw new Error("UNIMPLEMENTED");
}
}
/*
static String dumpByteArray(byte[] b) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < b.length; i++) {
sb.append(Integer.toHexString(0xFF & b[i]));
sb.append(" ");
}
return sb.toString();
}
static boolean compareByteArrays(byte[] expected, byte[] actual) {
boolean same = true;
if (expected.length == actual.length) {
for (int i = 0; i < expected.length && same ; i++) {
if (expected[i] != actual[i]) {
same = false;
}
}
} else {
same = false;
}
if (!same) {
System.out.println(" ARRAYS not same ");
System.out.println(" EXPECTED= "+dumpByteArray(expected));
System.out.println(" ACTUAL= "+dumpByteArray(actual));
}
return same;
}
public static void main(String[] args) {
System.out.println("Testing");
BASE64Decoder decoder = new BASE64Decoder();
byte[] test1= {0x00,0x00,0x00,0x00};
byte[] test2= {(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff};
Object[][] tests = {
{"TEST1", test1, "AAAAAA==" },
{"TEST2", test2, "/////w==" },
};
int failureCount = 0;
for (int i = 0; i < tests.length; i++) {
byte[] result = decoder.decodeBuffer((String) tests[i][2]);
if ( !compareByteArrays(result, (byte[]) tests[i][1])) {
System.out.println("Test "+tests[i][0]+ " failed got "+result+" sb "+tests[i][1]);
failureCount++;
}
}
System.out.println("Test done, failure count = "+failureCount);
}
*/
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy