package org.keycloak.testsuite.runonserver; import org.keycloak.common.util.Base64; import java.io.*; /** * Created by st on 26.01.17. */ public class SerializationUtil { public static String encode(Object function) { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(function); oos.close(); return Base64.encodeBytes(os.toByteArray()); } catch (Exception e) { throw new RuntimeException(e); } } public static Object decode(String encoded, ClassLoader classLoader) { try { byte[] bytes = Base64.decode(encoded); ByteArrayInputStream is = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(is) { @Override protected Class<?> resolveClass(ObjectStreamClass c) throws IOException, ClassNotFoundException { try { return Class.forName(c.getName(), false, classLoader); } catch (ClassNotFoundException e) { throw e; } } }; return ois.readObject(); } catch (Exception e) { throw new RuntimeException(e); } } public static String encodeException(Throwable t) { try { ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(t); oos.close(); return Base64.encodeBytes(os.toByteArray()); } catch (Exception e) { throw new RuntimeException(e); } } public static Throwable decodeException(String result) { try { byte[] bytes = Base64.decode(result); ByteArrayInputStream is = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(is); return (Throwable) ois.readObject(); } catch (Exception e) { throw new RuntimeException(e); } } }