package at.gv.egiz.eaaf.core.impl.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.List; import org.springframework.lang.Nullable; public class EaafSerializationUtils { private EaafSerializationUtils() { } /** * Serialize a given Java object into a byte array. * * @param object Java object to serialize. * @return Serialized Java object */ @Nullable public static byte[] serialize(@Nullable Object object) { if (object == null) { return null; } final ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { oos.writeObject(object); oos.flush(); } catch (final IOException ex) { throw new IllegalArgumentException("Failed to serialize object of type: " + object.getClass(), ex); } return baos.toByteArray(); } /** * Deserialize the byte array into an object. * * @param bytes a serialized object * @param allowedClassName List of classnames that are allowed for deserialization * @return the result of deserializing the bytes */ @Nullable public static Object deserialize(@Nullable byte[] bytes, List allowedClassName) { if (bytes == null) { return null; } try (ObjectInputStream ois = new EaafObjectInputStream(new ByteArrayInputStream(bytes), allowedClassName)) { return ois.readObject(); } catch (final IOException ex) { throw new IllegalArgumentException("Failed to deserialize object", ex); } catch (final ClassNotFoundException ex) { throw new IllegalStateException("Failed to deserialize object type", ex); } } }