Review comments updated

Review comments updated
This commit is contained in:
Amitabh Tiwari 2021-11-06 05:53:22 +05:30
parent 82026b3fff
commit 47ca31189a
4 changed files with 125 additions and 128 deletions

View File

@ -62,10 +62,10 @@
<version>${javamoney.moneta.version}</version> <version>${javamoney.moneta.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId> <artifactId>spring-core</artifactId>
<version>${spring.core.version}</version> <version>${spring.core.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -0,0 +1,44 @@
package com.baeldung.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class MySerializationUtils {
public static <T extends Serializable> byte[] serialize(T obj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
return baos.toByteArray();
}
public static <T extends Serializable> T deserialize(byte[] b, Class<T> cl) throws IOException, ClassNotFoundException {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
return cl.cast(o);
}
public static boolean isSerializable(Class<?> it) {
boolean serializable = it.isPrimitive() || it.isInterface() || Serializable.class.isAssignableFrom(it);
if (!serializable) {
return serializable;
}
Field[] declaredFields = it.getDeclaredFields();
for (Field field : declaredFields) {
if (Modifier.isVolatile(field.getModifiers()) || Modifier.isTransient(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
continue;
}
Class<?> fieldType = field.getType();
return isSerializable(fieldType);
}
return serializable;
}
}

View File

@ -1,47 +0,0 @@
package com.baeldung.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class SerializationUtils {
public static <T extends Serializable> byte[] serialize(T obj) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
return baos.toByteArray();
}
public static <T extends Serializable> T deserialize(byte[] b, Class<T> cl)
throws IOException, ClassNotFoundException {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
return cl.cast(o);
}
public static boolean isSerializable(Class<?> it) {
boolean serializable = it.isPrimitive() || it.isInterface() || Serializable.class.isAssignableFrom(it);
if (!serializable) {
return serializable;
}
Field[] declaredFields = it.getDeclaredFields();
for (Field field : declaredFields) {
if (Modifier.isVolatile(field.getModifiers())
|| Modifier.isTransient(field.getModifiers())
|| Modifier.isStatic(field.getModifiers())) {
continue;
}
Class<?> fieldType = field.getType();
return isSerializable(fieldType);
}
return serializable;
}
}

View File

@ -1,7 +1,8 @@
package com.baeldung.serialization; package com.baeldung.serialization;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -16,94 +17,93 @@ import org.junit.Test;
public class SerializationUnitTest { public class SerializationUnitTest {
@Test(expected = NotSerializableException.class) @Test(expected = NotSerializableException.class)
public void whenSerializing_ThenThrowsError() throws IOException { public void whenSerializing_ThenThrowsError() throws IOException {
Address address = new Address(); Address address = new Address();
address.setHouseNumber(10); address.setHouseNumber(10);
FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt"); FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt");
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) {
objectOutputStream.writeObject(address); objectOutputStream.writeObject(address);
} }
} }
@Test @Test
public void whenSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { public void whenSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException {
Person p = new Person(); Person p = new Person();
p.setAge(20); p.setAge(20);
p.setName("Joe"); p.setName("Joe");
FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt"); FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt");
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) { try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)) {
objectOutputStream.writeObject(p); objectOutputStream.writeObject(p);
} }
FileInputStream fileInputStream = new FileInputStream("yofile.txt"); FileInputStream fileInputStream = new FileInputStream("yofile.txt");
try ( ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) { try (ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) {
Person p2 = (Person) objectInputStream.readObject(); Person p2 = (Person) objectInputStream.readObject();
assertTrue(p2.getAge() == p.getAge()); assertEquals(p2.getAge(), p.getAge());
assertTrue(p2.getName().equals(p.getName())); assertEquals(p2.getName(), p.getName());
} }
} }
@Test(expected = ClassCastException.class) @Test(expected = ClassCastException.class)
public void whenSerializingUsingApacheCommons_ThenThrowsError() { public void whenSerializingUsingApacheCommons_ThenThrowsError() {
Address address = new Address(); Address address = new Address();
address.setHouseNumber(10); address.setHouseNumber(10);
SerializationUtils.serialize((Serializable) address); SerializationUtils.serialize((Serializable) address);
} }
@Test @Test
public void whenSerializingAndDeserializingUsingApacheCommons_ThenObjectIsTheSame() { public void whenSerializingAndDeserializingUsingApacheCommons_ThenObjectIsTheSame() {
Person p = new Person(); Person p = new Person();
p.setAge(20); p.setAge(20);
p.setName("Joe"); p.setName("Joe");
byte[] serialize = SerializationUtils.serialize(p); byte[] serialize = SerializationUtils.serialize(p);
Person p2 = (Person) SerializationUtils.deserialize(serialize); Person p2 = (Person) SerializationUtils.deserialize(serialize);
assertTrue(p2.getAge() == p.getAge()); assertEquals(p2.getAge(), p.getAge());
assertTrue(p2.getName().equals(p.getName())); assertEquals(p2.getName(), p.getName());
} }
@Test(expected = ClassCastException.class) @Test(expected = ClassCastException.class)
public void whenSerializingUsingSpringSerializationUtils_ThenThrowsError() { public void whenSerializingUsingSpringSerializationUtils_ThenThrowsError() {
Address address = new Address(); Address address = new Address();
address.setHouseNumber(10); address.setHouseNumber(10);
org.springframework.util.SerializationUtils.serialize((Serializable) address); org.springframework.util.SerializationUtils.serialize((Serializable) address);
} }
@Test @Test
public void whenSerializingAndDeserializingUsingSpringSerializationUtils_ThenObjectIsTheSame() { public void whenSerializingAndDeserializingUsingSpringSerializationUtils_ThenObjectIsTheSame() {
Person p = new Person(); Person p = new Person();
p.setAge(20); p.setAge(20);
p.setName("Joe"); p.setName("Joe");
byte[] serialize = org.springframework.util.SerializationUtils.serialize(p); byte[] serialize = org.springframework.util.SerializationUtils.serialize(p);
Person p2 = (Person) org.springframework.util.SerializationUtils.deserialize(serialize); Person p2 = (Person) org.springframework.util.SerializationUtils.deserialize(serialize);
assertTrue(p2.getAge() == p.getAge()); assertEquals(p2.getAge(), p.getAge());
assertTrue(p2.getName().equals(p.getName())); assertEquals(p2.getName(), p.getName());
} }
@Test(expected = ClassCastException.class) @Test(expected = ClassCastException.class)
public void whenSerializingUsingCustomSerializationUtils_ThenThrowsError() throws IOException { public void whenSerializingUsingCustomSerializationUtils_ThenThrowsError() throws IOException {
Address address = new Address(); Address address = new Address();
address.setHouseNumber(10); address.setHouseNumber(10);
com.baeldung.util.SerializationUtils.serialize((Serializable) address); com.baeldung.util.MySerializationUtils.serialize((Serializable) address);
} }
@Test @Test
public void whenSerializingAndDeserializingUsingCustomSerializationUtils_ThenObjectIsTheSame() public void whenSerializingAndDeserializingUsingCustomSerializationUtils_ThenObjectIsTheSame() throws IOException, ClassNotFoundException {
throws IOException, ClassNotFoundException { Person p = new Person();
Person p = new Person(); p.setAge(20);
p.setAge(20); p.setName("Joe");
p.setName("Joe"); byte[] serialize = com.baeldung.util.MySerializationUtils.serialize(p);
byte[] serialize = com.baeldung.util.SerializationUtils.serialize(p); Person p2 = com.baeldung.util.MySerializationUtils.deserialize(serialize, Person.class);
Person p2 = com.baeldung.util.SerializationUtils.deserialize(serialize, Person.class); assertEquals(p2.getAge(), p.getAge());
assertTrue(p2.getAge() == p.getAge()); assertEquals(p2.getName(), p.getName());
assertTrue(p2.getName().equals(p.getName())); }
}
@Test @Test
public void whenSerializingUsingCustomSerializationUtils_ThanOk() { public void whenSerializingUsingCustomSerializationUtils_ThanOk() {
assertFalse(com.baeldung.util.SerializationUtils.isSerializable(Address.class)); assertFalse(com.baeldung.util.MySerializationUtils.isSerializable(Address.class));
assertTrue(com.baeldung.util.SerializationUtils.isSerializable(Person.class)); assertTrue(com.baeldung.util.MySerializationUtils.isSerializable(Person.class));
assertTrue(com.baeldung.util.SerializationUtils.isSerializable(Integer.class)); assertTrue(com.baeldung.util.MySerializationUtils.isSerializable(Integer.class));
} }
} }