This is an automated email from the git hooks/post-receive script. tjaalton pushed a commit to branch master in repository jackson-jaxrs-providers.
commit fa284b83e2f1dd7aa0380ed6ee7f5f4af41b7157 Author: Tatu Saloranta <[email protected]> Date: Sat May 25 16:32:43 2013 -0700 Fixed #14 --- .../fasterxml/jackson/jaxrs/base/ProviderBase.java | 32 ++++++++-- .../jackson/jaxrs/json/JacksonJsonProvider.java | 24 +++++++- .../jackson/jaxrs/json/dw/TestSimpleEndpoint.java | 71 ++++++++++++++++++---- release-notes/VERSION | 2 + 4 files changed, 111 insertions(+), 18 deletions(-) diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java index 34775e5..d0f58b2 100644 --- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java +++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java @@ -305,13 +305,37 @@ public abstract class ProviderBase< /* Abstract methods sub-classes need to implement /********************************************************** */ + + /** + * Helper method used to check whether given media type + * is supported by this provider for read operations + * (when binding input data such as POST body). + *<p> + * Default implementation simply calls {@link #hasMatchingMediaType}. + * + * @since 2.3 + */ + protected boolean hasMatchingMediaTypeForReading(MediaType mediaType) { + return hasMatchingMediaType(mediaType); + } + + /** + * Helper method used to check whether given media type + * is supported by this provider for writing operations, + * such as when converting response object to response + * body of request (like GET or POST). + *<p> + * Default implementation simply calls {@link #hasMatchingMediaType}. + * + * @since 2.3 + */ + protected boolean hasMatchingMediaTypeForWriting(MediaType mediaType) { + return hasMatchingMediaType(mediaType); + } /** * Helper method used to check whether given media type - * is JSON type or sub type. - * Current implementation essentially checks to see whether - * {@link MediaType#getSubtype} returns "json" or something - * ending with "+json". + * is supported by this provider. * * @since 2.2 */ diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java index 923207f..b6c7568 100644 --- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java +++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JacksonJsonProvider.java @@ -51,6 +51,10 @@ public class JacksonJsonProvider ObjectMapper, JsonEndpointConfig, JsonMapperConfigurator> { + public final static String MIME_JAVASCRIPT = "application/javascript"; + + public final static String MIME_JAVASCRIPT_MS = "application/x-javascript"; + /** * Default annotation sets to use, if not explicitly defined during * construction: only Jackson annotations are used for the base @@ -158,7 +162,16 @@ public class JacksonJsonProvider protected boolean isJsonType(MediaType mediaType) { return hasMatchingMediaType(mediaType); } - + + /** + * Helper method used to check whether given media type + * is supported by this provider. + * Current implementation essentially checks to see whether + * {@link MediaType#getSubtype} returns "json" or something + * ending with "+json". + * + * @since 2.2 + */ @Override protected boolean hasMatchingMediaType(MediaType mediaType) { @@ -171,10 +184,15 @@ public class JacksonJsonProvider if (mediaType != null) { // Ok: there are also "xxx+json" subtypes, which count as well String subtype = mediaType.getSubtype(); - return "json".equalsIgnoreCase(subtype) || subtype.endsWith("+json"); + // [Issue#6]: also allow 'application/javascript' + return "json".equalsIgnoreCase(subtype) || subtype.endsWith("+json") + || "javascript".equals(subtype) + // apparently Microsoft once again has interesting alternative types? + || "x-javascript".equals(subtype) + ; } /* Not sure if this can happen; but it seems reasonable - * that we can at least produce json without media type? + * that we can at least produce JSON without media type? */ return true; } diff --git a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/TestSimpleEndpoint.java b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/TestSimpleEndpoint.java index 7a09be8..1bc5aa3 100644 --- a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/TestSimpleEndpoint.java +++ b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/TestSimpleEndpoint.java @@ -1,7 +1,7 @@ package com.fasterxml.jackson.jaxrs.json.dw; import java.io.*; -import java.net.URL; +import java.net.*; import java.util.*; import javax.ws.rs.GET; @@ -12,6 +12,7 @@ import javax.ws.rs.core.MediaType; import org.eclipse.jetty.server.Server; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.fasterxml.jackson.jaxrs.json.JaxrsTestBase; @@ -19,14 +20,21 @@ public class TestSimpleEndpoint extends JaxrsTestBase { static class Point { public int x, y; + + protected Point() { } + public Point(int x, int y) { + this.x = x; + this.y = y; + } } @Path("/point") - public static class SimpleResource { + public static class SimpleResource + { @GET - @Produces(MediaType.APPLICATION_JSON) + @Produces({ MediaType.APPLICATION_JSON, "application/javascript" }) public Point getPoint() { - return new Point(); + return new Point(1, 2); } } @@ -57,16 +65,57 @@ public class TestSimpleEndpoint extends JaxrsTestBase public void testStandardJson() throws Exception { + final ObjectMapper mapper = new ObjectMapper(); Server server = startServer(6061, SimpleResourceApp.class); InputStream in = new URL("http://localhost:6061/point").openStream(); - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - int i; - - while ((i = in.read()) >= 0) { - bytes.write((byte) i); + Point p; + + try { + p = mapper.readValue(in, Point.class); + } finally { + in.close(); + server.stop(); } -// System.out.println("Bytes: "+bytes.size()+" -> "+bytes.toString("UTF-8")); - server.stop(); + // ensure we got a valid Point + assertNotNull(p); + assertEquals(1, p.x); + assertEquals(2, p.y); } + public void testAcceptJavascriptType() throws Exception + { + final ObjectMapper mapper = new ObjectMapper(); + Server server = startServer(6062, SimpleResourceApp.class); + URL url = new URL("http://localhost:6062/point"); + + try { + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + // First: verify that weird types are not supported... + conn.setRequestProperty("Accept", "foo/bar"); + conn.connect(); + assertEquals(HttpURLConnection.HTTP_NOT_ACCEPTABLE, conn.getResponseCode()); + conn.disconnect(); + + // try again with somewhat non-standard, but supported JSON-like type (application/javascript) + conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty("Accept", "application/javascript"); +// conn.setRequestProperty("Accept", "application/json"); + assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode()); + InputStream in = conn.getInputStream(); + Point p; + try { + p = mapper.readValue(in, Point.class); + } finally { + in.close(); + } + assertNotNull(p); + assertEquals(1, p.x); + assertEquals(2, p.y); + } finally { + server.stop(); + } + + } + } diff --git a/release-notes/VERSION b/release-notes/VERSION index ac6f818..7211873 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -11,6 +11,8 @@ Changes: (reported by Bill Burke (from Resteasy)) #12: OSGi imports missing dependency from json/smile/xml to base package (reported by Matt Bishop) +#14: Allow "application/javascript" type for JSON provider + (requested by Stephan202@github) ------------------------------------------------------------------------ === History: === -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jackson-jaxrs-providers.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

