Skip to content

Commit

Permalink
Merge pull request #20167 from zakkak/fix-serialization-21.2
Browse files Browse the repository at this point in the history
Fix reflections registration of constructors used in serialization
  • Loading branch information
geoand authored Sep 21, 2021
2 parents e41d442 + 6f8b1e0 commit 0d9d2e4
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -567,8 +567,6 @@ private MethodDescriptor createRegisterSerializationForClassMethod(ClassCreator
greaterThan21_3.loadNull(), registerArgs);
greaterThan21_3.returnValue(null);

ResultHandle objectClass = tc.invokeStaticMethod(forNameMethodDescriptor, tc.load("java.lang.Object"),
tc.load(false), tccl);
ResultHandle serializationRegistryClass = tc.invokeStaticMethod(forNameMethodDescriptor,
tc.load("com.oracle.svm.core.jdk.serialize.SerializationRegistry"),
tc.load(false), tccl);
Expand Down Expand Up @@ -670,7 +668,7 @@ private MethodDescriptor createRegisterSerializationForClassMethod(ClassCreator
serializationSupport, clazz, newSerializationConstructorClass, accessor);
ResultHandle addReflectionsArgs2 = tc.newArray(Class.class, tc.load(2));
tc.writeArrayValue(addReflectionsArgs2, 0, clazz);
tc.writeArrayValue(addReflectionsArgs2, 1, objectClass);
tc.writeArrayValue(addReflectionsArgs2, 1, newSerializationConstructorClass);
tc.invokeVirtualMethod(invokeMethodDescriptor, addReflectionsLookupMethod, tc.loadNull(), addReflectionsArgs2);

addSerializationForClass.returnValue(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
Expand Down Expand Up @@ -42,14 +44,16 @@ private void reflectiveSetterInvoke(HttpServletResponse resp) throws IOException
ExternalizablePerson ep = new ExternalizablePerson();
ep.setName("Sheldon 2.0");
instance.setExternalizablePerson(ep);
instance.setList(new ArrayList<>(List.of("Hello World!")));
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(out);
os.writeObject(instance);
ByteArrayInputStream bais = new ByteArrayInputStream(out.toByteArray());
ObjectInputStream is = new ObjectInputStream(bais);
SomeSerializationObject result = (SomeSerializationObject) is.readObject();
if (result.getPerson().getName().equals("Sheldon")
&& result.getExternalizablePerson().getName().equals("Sheldon 2.0")) {
&& result.getExternalizablePerson().getName().equals("Sheldon 2.0")
&& result.getList().toString().equals("[Hello World!]")) {
resp.getWriter().write("OK");
} else {
reportException("Serialized output differs from input", null, resp);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package io.quarkus.it.corestuff.serialization;

import java.util.ArrayList;
import java.util.List;

import io.quarkus.runtime.annotations.RegisterForReflection;

@RegisterForReflection(targets = String.class, serialization = true)
@RegisterForReflection(targets = { List.class, ArrayList.class, String.class }, serialization = true)
public class SerializationConfig {

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.quarkus.it.corestuff.serialization;

import java.io.Serializable;
import java.util.List;

import io.quarkus.runtime.annotations.RegisterForReflection;

Expand All @@ -9,6 +10,7 @@ public class SomeSerializationObject implements Serializable {

private Person person;
private ExternalizablePerson externalizablePerson;
private List<String> list;

public Person getPerson() {
return person;
Expand All @@ -25,4 +27,12 @@ public ExternalizablePerson getExternalizablePerson() {
public void setExternalizablePerson(ExternalizablePerson externalizablePerson) {
this.externalizablePerson = externalizablePerson;
}

public List<String> getList() {
return list;
}

public void setList(List<String> list) {
this.list = list;
}
}

0 comments on commit 0d9d2e4

Please sign in to comment.