From bfd72bfb8cbc930b29d7f2cf9bdc0f0a9ada162c Mon Sep 17 00:00:00 2001 From: Stuart Douglas Date: Fri, 20 Jul 2018 12:32:20 +1000 Subject: [PATCH] Test out jackson for JSON mapping --- .../org/jboss/shamrock/deployment/Runner.java | 15 ++++ examples/strict/pom.xml | 4 ++ .../jboss/shamrock/example/TestResource.java | 7 +- .../shamrock/example/test/JaxRSITCase.java | 68 +++++++++++++++++++ .../shamrock/example/test/JaxRSTestCase.java | 16 +++++ .../jaxrs/JaxrsScanningProcessor.java | 12 ++-- pom.xml | 5 ++ 7 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSITCase.java diff --git a/core/deployment/src/main/java/org/jboss/shamrock/deployment/Runner.java b/core/deployment/src/main/java/org/jboss/shamrock/deployment/Runner.java index 573680e42..99fcfbe11 100644 --- a/core/deployment/src/main/java/org/jboss/shamrock/deployment/Runner.java +++ b/core/deployment/src/main/java/org/jboss/shamrock/deployment/Runner.java @@ -46,6 +46,7 @@ import org.jboss.shamrock.runtime.StartupContext; import org.jboss.shamrock.runtime.StartupTask; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; @@ -292,6 +293,17 @@ public class Runner { for (String holder : reflectiveClasses) { + Label lTryBlockStart = new Label(); + Label lTryBlockEnd = new Label(); + Label lCatchBlockStart = new Label(); + Label lCatchBlockEnd = new Label(); + + // set up try-catch block for RuntimeException + mv.visitTryCatchBlock(lTryBlockStart, lTryBlockEnd, + lCatchBlockStart, "java/lang/Exception"); + + // started the try block + mv.visitLabel(lTryBlockStart); mv.visitLdcInsn(1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Class"); mv.visitInsn(DUP); @@ -311,6 +323,9 @@ public class Runner { //now load everything else mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getMethods", "()[Ljava/lang/reflect/Method;", false); mv.visitMethodInsn(INVOKESTATIC, "org/graalvm/nativeimage/RuntimeReflection", "register", "([Ljava/lang/reflect/Executable;)V", false); + mv.visitLabel(lTryBlockEnd); + mv.visitLabel(lCatchBlockStart); + mv.visitLabel(lCatchBlockEnd); } mv.visitInsn(RETURN); mv.visitMaxs(0, 2); diff --git a/examples/strict/pom.xml b/examples/strict/pom.xml index 733c69f87..2691555f4 100644 --- a/examples/strict/pom.xml +++ b/examples/strict/pom.xml @@ -40,6 +40,10 @@ org.jboss.resteasy resteasy-json-p-provider + + org.jboss.resteasy + resteasy-jackson2-provider + org.glassfish javax.json diff --git a/examples/strict/src/main/java/org/jboss/shamrock/example/TestResource.java b/examples/strict/src/main/java/org/jboss/shamrock/example/TestResource.java index 19b48b915..b78a5370d 100644 --- a/examples/strict/src/main/java/org/jboss/shamrock/example/TestResource.java +++ b/examples/strict/src/main/java/org/jboss/shamrock/example/TestResource.java @@ -15,17 +15,18 @@ public class TestResource { } @GET - @Path("/json") + @Path("/jackson") @Produces("application/json") public MyData get() { MyData m = new MyData(); - m.setName("Stuart Douglas"); - m.setValue("A value"); + m.setName("Stuart"); + m.setValue("A Value"); return m; } @GET @Path("/jsonp") + @Produces("application/json") public JsonObject jsonp() { return Json.createObjectBuilder() .add("name", "Stuart") diff --git a/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSITCase.java b/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSITCase.java new file mode 100644 index 000000000..47afb4654 --- /dev/null +++ b/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSITCase.java @@ -0,0 +1,68 @@ +package org.jboss.shamrock.example.test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +import javax.json.Json; +import javax.json.JsonObject; + +import org.jboss.shamrock.junit.GraalTest; +import org.jboss.shamrock.junit.ShamrockTest; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(GraalTest.class) +public class JaxRSITCase { + + @Test + public void testJAXRS() throws Exception { + URL uri = new URL("http://localhost:8080/rest/test"); + URLConnection connection = uri.openConnection(); + InputStream in = connection.getInputStream(); + byte[] buf = new byte[100]; + int r; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + while ((r = in.read(buf)) > 0) { + out.write(buf, 0, r); + } + Assert.assertEquals("TEST", new String(out.toByteArray())); + } + + @Test + public void testJsonp() throws Exception { + + URL uri = new URL("http://localhost:8080/rest/test/jsonp"); + URLConnection connection = uri.openConnection(); + InputStream in = connection.getInputStream(); + byte[] buf = new byte[100]; + int r; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + while ((r = in.read(buf)) > 0) { + out.write(buf, 0, r); + } + JsonObject obj = Json.createReader(new ByteArrayInputStream(out.toByteArray())).readObject(); + Assert.assertEquals("Stuart", obj.getString("name")); + Assert.assertEquals("A Value", obj.getString("value")); + } + + @Test + public void testJackson() throws Exception { + + URL uri = new URL("http://localhost:8080/rest/test/jackson"); + URLConnection connection = uri.openConnection(); + InputStream in = connection.getInputStream(); + byte[] buf = new byte[100]; + int r; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + while ((r = in.read(buf)) > 0) { + out.write(buf, 0, r); + } + JsonObject obj = Json.createReader(new ByteArrayInputStream(out.toByteArray())).readObject(); + Assert.assertEquals("Stuart", obj.getString("name")); + Assert.assertEquals("A Value", obj.getString("value")); + } +} diff --git a/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSTestCase.java b/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSTestCase.java index bce32eefd..728942014 100644 --- a/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSTestCase.java +++ b/examples/strict/src/test/java/org/jboss/shamrock/example/test/JaxRSTestCase.java @@ -48,4 +48,20 @@ public class JaxRSTestCase { Assert.assertEquals("A Value", obj.getString("value")); } + @Test + public void testJackson() throws Exception { + + URL uri = new URL("http://localhost:8080/rest/test/jackson"); + URLConnection connection = uri.openConnection(); + InputStream in = connection.getInputStream(); + byte[] buf = new byte[100]; + int r; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + while ((r = in.read(buf)) > 0) { + out.write(buf, 0, r); + } + JsonObject obj = Json.createReader(new ByteArrayInputStream(out.toByteArray())).readObject(); + Assert.assertEquals("Stuart", obj.getString("name")); + Assert.assertEquals("A Value", obj.getString("value")); + } } diff --git a/jaxrs/deployment/src/main/java/org/jboss/shamrock/jaxrs/JaxrsScanningProcessor.java b/jaxrs/deployment/src/main/java/org/jboss/shamrock/jaxrs/JaxrsScanningProcessor.java index 38a698e3f..e4d1f6887 100755 --- a/jaxrs/deployment/src/main/java/org/jboss/shamrock/jaxrs/JaxrsScanningProcessor.java +++ b/jaxrs/deployment/src/main/java/org/jboss/shamrock/jaxrs/JaxrsScanningProcessor.java @@ -134,14 +134,10 @@ public class JaxrsScanningProcessor implements ResourceProcessor { @Override public void process(ArchiveContext archiveContext, ProcessorContext processorContext) throws Exception { - try { - //this is pretty yuck, and does not really belong here, but it is needed to get the json-p - //provider to work - Class.forName("org.glassfish.json.JsonProviderImpl"); - processorContext.addReflectiveClass("org.glassfish.json.JsonProviderImpl"); - } catch (ClassNotFoundException e) { - - } + //this is pretty yuck, and does not really belong here, but it is needed to get the json-p + //provider to work + processorContext.addReflectiveClass("org.glassfish.json.JsonProviderImpl"); + processorContext.addReflectiveClass("com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector"); Index index = archiveContext.getIndex(); List app = index.getAnnotations(APPLICATION_PATH); if (app.isEmpty()) { diff --git a/pom.xml b/pom.xml index 28ffe30e6..5b8e8d7c6 100644 --- a/pom.xml +++ b/pom.xml @@ -141,6 +141,11 @@ resteasy-json-p-provider ${resteasy.version} + + org.jboss.resteasy + resteasy-jackson2-provider + ${resteasy.version} + org.jboss.weld.se weld-se-core