You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2017/08/08 13:12:35 UTC
johnzon git commit: JOHNZON-133 ensure we test correctly jaxrs types
and not just assume the signature is right
Repository: johnzon
Updated Branches:
refs/heads/master d9ba15398 -> 0e207b0a5
JOHNZON-133 ensure we test correctly jaxrs types and not just assume the signature is right
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/0e207b0a
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/0e207b0a
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/0e207b0a
Branch: refs/heads/master
Commit: 0e207b0a5fdb1bc119dd650f2be3689482b91ed4
Parents: d9ba153
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Tue Aug 8 15:12:27 2017 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Tue Aug 8 15:12:27 2017 +0200
----------------------------------------------------------------------
.../johnzon/jaxrs/JohnzonMessageBodyReader.java | 6 +-
.../johnzon/jaxrs/JohnzonMessageBodyWriter.java | 12 +--
.../johnzon/jaxrs/JohnzonProviderTest.java | 82 ++++++++++++++------
.../jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java | 18 +++--
4 files changed, 80 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e207b0a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyReader.java
----------------------------------------------------------------------
diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyReader.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyReader.java
index f3d9a18..42fcbf0 100644
--- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyReader.java
+++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyReader.java
@@ -58,8 +58,10 @@ public class JohnzonMessageBodyReader<T> extends IgnorableTypes implements Messa
public boolean isReadable(final Class<?> rawType, final Type genericType,
final Annotation[] annotations, final MediaType mediaType) {
return !isIgnored(rawType)
- && InputStream.class != genericType && Reader.class != genericType && Response.class != genericType
- && String.class != genericType
+ && !InputStream.class.isAssignableFrom(rawType)
+ && !Reader.class.isAssignableFrom(rawType)
+ && !Response.class.isAssignableFrom(rawType)
+ && !CharSequence.class.isAssignableFrom(rawType)
&& !JsonStructure.class.isAssignableFrom(rawType);
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e207b0a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyWriter.java
----------------------------------------------------------------------
diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyWriter.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyWriter.java
index e6a8d36..6a3e163 100644
--- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyWriter.java
+++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/JohnzonMessageBodyWriter.java
@@ -65,12 +65,12 @@ public class JohnzonMessageBodyWriter<T> extends IgnorableTypes implements Messa
public boolean isWriteable(final Class<?> rawType, final Type genericType,
final Annotation[] annotations, final MediaType mediaType) {
return !isIgnored(rawType)
- && InputStream.class != genericType
- && OutputStream.class != genericType
- && Writer.class != genericType
- && StreamingOutput.class != genericType
- && String.class != genericType
- && Response.class != genericType
+ && !InputStream.class.isAssignableFrom(rawType)
+ && !OutputStream.class.isAssignableFrom(rawType)
+ && !Writer.class.isAssignableFrom(rawType)
+ && !StreamingOutput.class.isAssignableFrom(rawType)
+ && !CharSequence.class.isAssignableFrom(rawType)
+ && !Response.class.isAssignableFrom(rawType)
&& !JsonStructure.class.isAssignableFrom(rawType);
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e207b0a/johnzon-jaxrs/src/test/java/org/apache/johnzon/jaxrs/JohnzonProviderTest.java
----------------------------------------------------------------------
diff --git a/johnzon-jaxrs/src/test/java/org/apache/johnzon/jaxrs/JohnzonProviderTest.java b/johnzon-jaxrs/src/test/java/org/apache/johnzon/jaxrs/JohnzonProviderTest.java
index 6af6f68..a77752d 100644
--- a/johnzon-jaxrs/src/test/java/org/apache/johnzon/jaxrs/JohnzonProviderTest.java
+++ b/johnzon-jaxrs/src/test/java/org/apache/johnzon/jaxrs/JohnzonProviderTest.java
@@ -18,14 +18,20 @@
*/
package org.apache.johnzon.jaxrs;
-import org.apache.cxf.endpoint.Server;
-import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
-import org.apache.cxf.transport.local.LocalConduit;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
@@ -34,24 +40,25 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity;
+import javax.ws.rs.container.AsyncResponse;
+import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.StreamingOutput;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.transport.local.LocalConduit;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
public class JohnzonProviderTest {
+
private final static String ENDPOINT_ADDRESS = "local://johnzon";
+
private static Server server;
@BeforeClass
@@ -72,7 +79,8 @@ public class JohnzonProviderTest {
@Test
public void asParam() {
- final String result = client().path("johnzon").type(MediaType.APPLICATION_JSON_TYPE).post(new Johnzon("client")).readEntity(String.class);
+ final String result = client().path("johnzon").type(MediaType.APPLICATION_JSON_TYPE).post(new Johnzon("client"))
+ .readEntity(String.class);
assertTrue(Boolean.parseBoolean(result));
}
@@ -89,6 +97,19 @@ public class JohnzonProviderTest {
}
@Test
+ public void untypedStreamOutput() {
+ final StreamingOutput impl = new StreamingOutput() {
+
+ @Override
+ public void write(final OutputStream outputStream) throws IOException, WebApplicationException {
+ // no-op
+ }
+ };
+ assertFalse(new JohnzonMessageBodyWriter().isWriteable(impl.getClass(), impl.getClass(), new Annotation[0],
+ MediaType.APPLICATION_JSON_TYPE));
+ }
+
+ @Test
public void primitive() {
final String val = client(MediaType.TEXT_PLAIN_TYPE).path("johnzon/primitive").get(String.class);
assertEquals("1986", val);
@@ -106,9 +127,10 @@ public class JohnzonProviderTest {
@Test
public void list() {
final ParameterizedType list = new ParameterizedType() {
+
@Override
public Type[] getActualTypeArguments() {
- return new Type[]{Johnzon.class};
+ return new Type[] { Johnzon.class };
}
@Override
@@ -146,12 +168,14 @@ public class JohnzonProviderTest {
}
private static WebClient client(final MediaType mediaType) {
- final WebClient client = WebClient.create(ENDPOINT_ADDRESS, singletonList(new JohnzonProvider<Object>())).accept(mediaType);
+ final WebClient client = WebClient.create(ENDPOINT_ADDRESS, singletonList(new JohnzonProvider<Object>()))
+ .accept(mediaType);
WebClient.getConfig(client).getRequestContext().put(LocalConduit.DIRECT_DISPATCH, Boolean.TRUE);
return client;
}
public static class Johnzon {
+
private String name;
public Johnzon(final String name) {
@@ -173,6 +197,7 @@ public class JohnzonProviderTest {
@Path("johnzon")
public static class JohnzonResource {
+
@GET
public Johnzon johnzon() {
return new Johnzon("johnzon");
@@ -207,6 +232,7 @@ public class JohnzonProviderTest {
@Path("stream")
public StreamingOutput out() {
return new StreamingOutput() {
+
@Override
public void write(OutputStream outputStream) throws IOException, WebApplicationException {
outputStream.write("ok".getBytes());
@@ -215,6 +241,18 @@ public class JohnzonProviderTest {
}
@GET
+ @Path("lazy_stream")
+ public void out(@Suspended final AsyncResponse response) {
+ response.resume(new StreamingOutput() {
+
+ @Override
+ public void write(OutputStream outputStream) throws IOException, WebApplicationException {
+ outputStream.write("ok".getBytes());
+ }
+ });
+ }
+
+ @GET
@Produces(MediaType.TEXT_PLAIN)
@Path("primitive")
public Integer primitive() {
http://git-wip-us.apache.org/repos/asf/johnzon/blob/0e207b0a/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java
index 089406f..ae97533 100644
--- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java
+++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jaxrs/jsonb/jaxrs/JsonbJaxrsProvider.java
@@ -118,20 +118,22 @@ public class JsonbJaxrsProvider<T> implements MessageBodyWriter<T>, MessageBodyR
@Override
public boolean isReadable(final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) {
return !isIgnored(type)
- && InputStream.class != genericType && Reader.class != genericType && Response.class != genericType
- && String.class != genericType
+ && !InputStream.class.isAssignableFrom(type)
+ && !Reader.class.isAssignableFrom(type)
+ && !Response.class.isAssignableFrom(type)
+ && !CharSequence.class.isAssignableFrom(type)
&& !JsonStructure.class.isAssignableFrom(type);
}
@Override
public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) {
return !isIgnored(type)
- && InputStream.class != genericType
- && OutputStream.class != genericType
- && Writer.class != genericType
- && StreamingOutput.class != genericType
- && String.class != genericType
- && Response.class != genericType
+ && !InputStream.class.isAssignableFrom(type)
+ && !OutputStream.class.isAssignableFrom(type)
+ && !Writer.class.isAssignableFrom(type)
+ && !StreamingOutput.class.isAssignableFrom(type)
+ && !CharSequence.class.isAssignableFrom(type)
+ && !Response.class.isAssignableFrom(type)
&& !JsonStructure.class.isAssignableFrom(type);
}