Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
vsevel committed Sep 8, 2021
1 parent 34161f0 commit e620fdb
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@
import java.util.Arrays;
import java.util.List;

import org.jboss.logging.Logger;

import io.quarkus.builder.item.MultiBuildItem;

/**
* Used to register a class for reflection in native mode
*/
public final class ReflectiveClassBuildItem extends MultiBuildItem {

private static final Logger log = Logger.getLogger(ReflectiveClassBuildItem.class);

private final List<String> className;
private final boolean methods;
private final boolean fields;
Expand Down Expand Up @@ -88,6 +92,12 @@ private ReflectiveClassBuildItem(boolean constructors, boolean methods, boolean

private ReflectiveClassBuildItem(boolean constructors, boolean methods, boolean fields, boolean finalFieldsWritable,
boolean weak, boolean serialization, String... className) {

if (serialization) {
log.info("ReflectiveClassBuildItem => constructors=" + constructors + " methods=" + methods + " fields=" + fields
+ " finalFieldsWritable=" + finalFieldsWritable + " weak=" + weak + " serialization=" + serialization + " "
+ Arrays.toString(className));
}
for (String i : className) {
if (i == null) {
throw new NullPointerException();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.graalvm.nativeimage.hosted.Feature;
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
import org.graalvm.nativeimage.hosted.RuntimeReflection;
import org.jboss.logging.Logger;

import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
Expand Down Expand Up @@ -56,6 +57,8 @@

public class NativeImageAutoFeatureStep {

private static final Logger log = Logger.getLogger(NativeImageAutoFeatureStep.class);

private static final String GRAAL_AUTOFEATURE = "io/quarkus/runner/AutoFeature";
private static final MethodDescriptor VERSION_CURRENT = ofMethod(Version.class, "getCurrent", Version.class);
private static final MethodDescriptor VERSION_COMPARE_TO = ofMethod(Version.class, "compareTo", int.class, int[].class);
Expand Down Expand Up @@ -123,6 +126,7 @@ void generateFeature(BuildProducer<GeneratedNativeImageClassBuildItem> nativeIma
ClassCreator file = new ClassCreator(new ClassOutput() {
@Override
public void write(String s, byte[] bytes) {
log.info("create GeneratedNativeImageClassBuildItem name=" + s);
nativeImageClass.produce(new GeneratedNativeImageClassBuildItem(s, bytes));
}
}, GRAAL_AUTOFEATURE, null,
Expand Down Expand Up @@ -345,6 +349,7 @@ public void write(String s, byte[] bytes) {
carray);

if (entry.getValue().constructors) {
log.info("invokeStaticMethod register constructors for " + entry.getKey());
tc.invokeStaticMethod(
ofMethod(RUNTIME_REFLECTION, "register", void.class, Executable[].class),
constructors);
Expand Down Expand Up @@ -421,6 +426,8 @@ public void write(String s, byte[] bytes) {
registerSerializationMethod = createRegisterSerializationForClassMethod(file);
}

log.info("invokeStaticMethod " + registerSerializationMethod.getDeclaringClass() + ":"
+ registerSerializationMethod.getName() + " on " + entry.getKey());
tc.invokeStaticMethod(registerSerializationMethod, clazz);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ public void build(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
*/
private void registerClass(ClassLoader classLoader, String className, boolean methods, boolean fields,
boolean ignoreNested, boolean serialization, final BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
log.info("registerClass " + className + " methods=" + methods + " fields=" + fields + " ignoreNested=" + ignoreNested
+ " serialization=" + serialization);
reflectiveClass.produce(serialization ? ReflectiveClassBuildItem.serializationClass(methods, fields, className)
: new ReflectiveClassBuildItem(methods, fields, className));

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 e620fdb

Please sign in to comment.