diff -Nru jackson-jaxrs-providers-2.7.3/base/pom.xml jackson-jaxrs-providers-2.8.5/base/pom.xml
--- jackson-jaxrs-providers-2.7.3/base/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,7 +4,7 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-base
Jackson-JAXRS-base
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/annotation/package-info.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/annotation/package-info.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/annotation/package-info.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/annotation/package-info.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,12 @@
+/**
+ * Package that contains annotations applicable to all content types.
+ * Currently defined are:
+ *
+ * {@link com.fasterxml.jackson.jaxrs.annotation.JacksonFeatures} allows
+ * enabling and/or disabling {@link com.fasterxml.jackson.databind.DeserializationFeature}s
+ * and {@link com.fasterxml.jackson.databind.SerializationFeature}s for individual
+ * endpoints.
+ *
+ *
+ */
+package com.fasterxml.jackson.jaxrs.annotation;
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java 2016-11-16 02:14:44.000000000 +0000
@@ -4,15 +4,16 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
/**
* Implementation if {@link ExceptionMapper} to send down a "400 Bad Request"
* response in the event that unmappable JSON is received.
+ *
+ * Note that {@link javax.ws.rs.ext.Provider} annotation was include up to
+ * Jackson 2.7, but removed from 2.8 (as per [jaxrs-providers#22]
*
* @since 2.2
*/
-@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper {
@Override
public Response toResponse(JsonMappingException exception) {
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java 2016-11-16 02:14:44.000000000 +0000
@@ -4,15 +4,16 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
/**
* Implementation of {@link ExceptionMapper} to send down a "400 Bad Request"
* in the event unparsable JSON is received.
+ *
+ * Note that {@link javax.ws.rs.ext.Provider} annotation was include up to
+ * Jackson 2.7, but removed from 2.8 (as per [jaxrs-providers#22]
*
* @since 2.2
*/
-@Provider
public class JsonParseExceptionMapper implements ExceptionMapper {
@Override
public Response toResponse(JsonParseException exception) {
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS1NoContentExceptionSupplier.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS1NoContentExceptionSupplier.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS1NoContentExceptionSupplier.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS1NoContentExceptionSupplier.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,18 @@
+package com.fasterxml.jackson.jaxrs.base.nocontent;
+
+import com.fasterxml.jackson.jaxrs.base.NoContentExceptionSupplier;
+
+import java.io.IOException;
+
+/**
+ * Create plain IOException for JaxRS 1.x because {@link javax.ws.rs.core.NoContentException}
+ * has been introduced in JaxRS 2.x
+ */
+public class JaxRS1NoContentExceptionSupplier implements NoContentExceptionSupplier
+{
+ @Override
+ public IOException createNoContentException()
+ {
+ return new IOException(NO_CONTENT_MESSAGE);
+ }
+}
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS2NoContentExceptionSupplier.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS2NoContentExceptionSupplier.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS2NoContentExceptionSupplier.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/nocontent/JaxRS2NoContentExceptionSupplier.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,16 @@
+package com.fasterxml.jackson.jaxrs.base.nocontent;
+
+import com.fasterxml.jackson.jaxrs.base.NoContentExceptionSupplier;
+
+import javax.ws.rs.core.NoContentException;
+import java.io.IOException;
+
+/**
+ * This supplier creates fair NoContentException from JaxRS 2.x
+ */
+public class JaxRS2NoContentExceptionSupplier implements NoContentExceptionSupplier {
+ @Override
+ public IOException createNoContentException() {
+ return new NoContentException(NoContentExceptionSupplier.NO_CONTENT_MESSAGE);
+ }
+}
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/NoContentExceptionSupplier.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/NoContentExceptionSupplier.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/NoContentExceptionSupplier.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/NoContentExceptionSupplier.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,13 @@
+package com.fasterxml.jackson.jaxrs.base;
+
+import java.io.IOException;
+
+/**
+ * Implementors of this class contains strategies for NoContentException creation
+ */
+public interface NoContentExceptionSupplier
+{
+ String NO_CONTENT_MESSAGE = "No content (empty input stream)";
+
+ IOException createNoContentException();
+}
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/base/ProviderBase.java 2016-11-16 02:14:44.000000000 +0000
@@ -14,6 +14,8 @@
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.fasterxml.jackson.jaxrs.base.nocontent.JaxRS1NoContentExceptionSupplier;
+import com.fasterxml.jackson.jaxrs.base.nocontent.JaxRS2NoContentExceptionSupplier;
import com.fasterxml.jackson.jaxrs.cfg.*;
import com.fasterxml.jackson.jaxrs.util.ClassKey;
import com.fasterxml.jackson.jaxrs.util.LRUMap;
@@ -34,15 +36,10 @@
*/
public final static String HEADER_CONTENT_TYPE_OPTIONS = "X-Content-Type-Options";
- /**
- * Since class javax.ws.rs.core.NoContentException
only exists in
- * JAX-RS 2.0, but we need 1.1 compatibility, need to (unfortunately!) dynamically
- * load class.
- */
protected final static String CLASS_NAME_NO_CONTENT_EXCEPTION = "javax.ws.rs.core.NoContentException";
- protected final static String NO_CONTENT_MESSAGE = "No content (empty input stream)";
-
+ protected final NoContentExceptionSupplier noContentExceptionSupplier = _createNoContentExceptionSupplier();
+
/**
* Looks like we need to worry about accidental
* data binding for types we shouldn't be handling. This is
@@ -453,6 +450,9 @@
*/
protected abstract boolean hasMatchingMediaType(MediaType mediaType);
+ /**
+ * Helper method that is called if no mapper has been explicitly configured.
+ */
protected abstract MAPPER _locateMapperViaProvider(Class> type, MediaType mediaType);
protected EP_CONFIG _configForReading(MAPPER mapper,
@@ -552,7 +552,7 @@
}
return true;
}
-
+
/**
* Method that JAX-RS container calls to serialize given value.
*/
@@ -562,20 +562,8 @@
MultivaluedMap httpHeaders, OutputStream entityStream)
throws IOException
{
- AnnotationBundleKey key = new AnnotationBundleKey(annotations, type);
- EP_CONFIG endpoint;
- synchronized (_writers) {
- endpoint = _writers.get(key);
- }
- // not yet resolved (or not cached any more)? Resolve!
- if (endpoint == null) {
- MAPPER mapper = locateMapper(type, mediaType);
- endpoint = _configForWriting(mapper, annotations, _defaultWriteView);
- // and cache for future reuse
- synchronized (_writers) {
- _writers.put(key.immutableKey(), endpoint);
- }
- }
+ EP_CONFIG endpoint = _endpointForWriting(value, type, genericType, annotations,
+ mediaType, httpHeaders);
// Any headers we should write?
_modifyHeaders(value, type, genericType, annotations, httpHeaders, endpoint);
@@ -594,12 +582,12 @@
}
JavaType rootType = null;
- if (genericType != null && value != null) {
+ if ((genericType != null) && (value != null)) {
// 10-Jan-2011, tatu: as per [JACKSON-456], it's not safe to just force root
// type since it prevents polymorphic type serialization. Since we really
// just need this for generics, let's only use generic type if it's truly generic.
- if (genericType.getClass() != Class.class) { // generic types are other impls of 'java.lang.reflect.Type'
+ if (!(genericType instanceof Class>)) { // generic types are other impls of 'java.lang.reflect.Type'
// This is still not exactly right; should root type be further
// specialized with 'value.getClass()'? Let's see how well this works before
// trying to come up with more complete solution.
@@ -608,7 +596,9 @@
// since forcing of type will then force use of content serializer, which is
// generally not the intent. Fix may require addition of functionality in databind
- rootType = writer.getTypeFactory().constructType(genericType);
+ TypeFactory typeFactory = writer.getTypeFactory();
+ JavaType baseType = typeFactory.constructType(genericType);
+ rootType = typeFactory.constructSpecializedType(baseType, type);
/* 26-Feb-2011, tatu: To help with [JACKSON-518], we better recognize cases where
* type degenerates back into "Object.class" (as is the case with plain TypeVariable,
* for example), and not use that.
@@ -663,7 +653,7 @@
EP_CONFIG endpoint)
throws IOException
{
- // [Issue#6]: Add "nosniff" header?
+ // Add "nosniff" header?
if (isEnabled(JaxRSFeature.ADD_NO_SNIFF_HEADER)) {
httpHeaders.add(HEADER_CONTENT_TYPE_OPTIONS, "nosniff");
}
@@ -684,7 +674,32 @@
g.disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
return g;
}
-
+
+ protected EP_CONFIG _endpointForWriting(Object value, Class> type, Type genericType,
+ Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders)
+ {
+ // 29-Jun-2016, tatu: As per [jaxrs-providers#86] allow skipping caching
+ if (!isEnabled(JaxRSFeature.CACHE_ENDPOINT_WRITERS)) {
+ return _configForWriting(locateMapper(type, mediaType), annotations, _defaultWriteView);
+ }
+
+ EP_CONFIG endpoint;
+ AnnotationBundleKey key = new AnnotationBundleKey(annotations, type);
+ synchronized (_writers) {
+ endpoint = _writers.get(key);
+ }
+ // not yet resolved (or not cached any more)? Resolve!
+ if (endpoint == null) {
+ MAPPER mapper = locateMapper(type, mediaType);
+ endpoint = _configForWriting(mapper, annotations, _defaultWriteView);
+ // and cache for future reuse
+ synchronized (_writers) {
+ _writers.put(key.immutableKey(), endpoint);
+ }
+ }
+ return endpoint;
+ }
+
/*
/**********************************************************
/* MessageBodyReader impl
@@ -748,20 +763,9 @@
InputStream entityStream)
throws IOException
{
- AnnotationBundleKey key = new AnnotationBundleKey(annotations, type);
- EP_CONFIG endpoint;
- synchronized (_readers) {
- endpoint = _readers.get(key);
- }
- // not yet resolved (or not cached any more)? Resolve!
- if (endpoint == null) {
- MAPPER mapper = locateMapper(type, mediaType);
- endpoint = _configForReading(mapper, annotations, _defaultReadView);
- // and cache for future reuse
- synchronized (_readers) {
- _readers.put(key.immutableKey(), endpoint);
- }
- }
+ EP_CONFIG endpoint = _endpointForReading(type, genericType, annotations,
+ mediaType, httpHeaders);
+
ObjectReader reader = endpoint.getReader();
JsonParser p = _createParser(reader, entityStream);
@@ -829,6 +833,38 @@
return p;
}
+ /**
+ * Overridable helper method that will basically fetch representation of the
+ * endpoint that can be used to get {@link ObjectReader} to use for deserializing
+ * content
+ *
+ * @since 2.8
+ */
+ protected EP_CONFIG _endpointForReading(Class type, Type genericType, Annotation[] annotations,
+ MediaType mediaType, MultivaluedMap httpHeaders)
+ {
+ // 29-Jun-2016, tatu: As per [jaxrs-providers#86] allow skipping caching
+ if (!isEnabled(JaxRSFeature.CACHE_ENDPOINT_READERS)) {
+ return _configForReading(locateMapper(type, mediaType), annotations, _defaultReadView);
+ }
+
+ EP_CONFIG endpoint;
+ AnnotationBundleKey key = new AnnotationBundleKey(annotations, type);
+ synchronized (_readers) {
+ endpoint = _readers.get(key);
+ }
+ // not yet resolved (or not cached any more)? Resolve!
+ if (endpoint == null) {
+ MAPPER mapper = locateMapper(type, mediaType);
+ endpoint = _configForReading(mapper, annotations, _defaultReadView);
+ // and cache for future reuse
+ synchronized (_readers) {
+ _readers.put(key.immutableKey(), endpoint);
+ }
+ }
+ return endpoint;
+ }
+
/*
/**********************************************************
/* Overridable helper methods
@@ -837,15 +873,30 @@
/**
* Method called to locate {@link ObjectMapper} to use for serialization
- * and deserialization. If an instance has been explicitly defined by
+ * and deserialization. Exact logic depends on setting of
+ * {@link JaxRSFeature#DYNAMIC_OBJECT_MAPPER_LOOKUP}.
+ *
+ *
+ * If {@link JaxRSFeature#DYNAMIC_OBJECT_MAPPER_LOOKUP} is disabled (default
+ * setting unless changed), behavior is as follows:
+ *
+ * If an instance has been explicitly defined by
* {@link #setMapper} (or non-null instance passed in constructor), that
- * will be used.
- * If not, will try to locate it using standard JAX-RS
+ * will be used.
+ *
+ * If not, will try to locate it using standard JAX-RS
* ContextResolver
mechanism, if it has been properly configured
* to access it (by JAX-RS runtime).
- * Finally, if no mapper is found, will return a default unconfigured
+ *
+ * Finally, if no mapper is found, will return a default unconfigured
* {@link ObjectMapper} instance (one constructed with default constructor
* and not modified in any way)
+ *
+ *
+ *
+ * If {@link JaxRSFeature#DYNAMIC_OBJECT_MAPPER_LOOKUP} is enabled, steps
+ * 1 and 2 are reversed, such that JAX-RS ContextResolver
+ * is first used, and only if none is defined will configured mapper be used.
*
* @param type Class of object being serialized or deserialized;
* not checked at this point, since it is assumed that unprocessable
@@ -857,7 +908,21 @@
*/
public MAPPER locateMapper(Class> type, MediaType mediaType)
{
- // First: were we configured with a specific instance?
+ // 29-Jun-2016, tatu: As per [jaxrs-providers#86] may want to do provider lookup first
+ if (isEnabled(JaxRSFeature.DYNAMIC_OBJECT_MAPPER_LOOKUP)) {
+ MAPPER m = _locateMapperViaProvider(type, mediaType);
+ if (m == null) {
+ m = _mapperConfig.getConfiguredMapper();
+ if (m == null) {
+ m = _mapperConfig.getDefaultMapper();
+ }
+ }
+ return m;
+ }
+
+ // Otherwise start with (pre-)configured Mapper and only check provider
+ // if not found
+
MAPPER m = _mapperConfig.getConfiguredMapper();
if (m == null) {
// If not, maybe we can get one configured via context?
@@ -909,18 +974,9 @@
*/
protected IOException _createNoContentException()
{
- Class> cls = null;
- try {
- cls = Class.forName(CLASS_NAME_NO_CONTENT_EXCEPTION);
- Constructor> ctor = cls.getDeclaredConstructor(String.class);
- if (ctor != null) {
- return (IOException) ctor.newInstance(NO_CONTENT_MESSAGE);
- }
- } catch (Exception e) { // no can do...
- }
- return new IOException(NO_CONTENT_MESSAGE);
+ return noContentExceptionSupplier.createNoContentException();
}
-
+
/*
/**********************************************************
/* Private/sub-class helper methods
@@ -995,4 +1051,24 @@
private final THIS _this() {
return (THIS) this;
}
+
+ /**
+ * Since class javax.ws.rs.core.NoContentException
only exists in
+ * JAX-RS 2.0, but we want to have 1.x compatibility, need to dynamically select exception supplier
+ */
+ private static NoContentExceptionSupplier _createNoContentExceptionSupplier() {
+ try {
+ Class cls = Class.forName(CLASS_NAME_NO_CONTENT_EXCEPTION);
+ Constructor> ctor = cls.getDeclaredConstructor(String.class);
+ if (ctor != null) {
+ return new JaxRS2NoContentExceptionSupplier();
+ } else {
+ return new JaxRS1NoContentExceptionSupplier();
+ }
+ } catch (ClassNotFoundException ex) {
+ return new JaxRS1NoContentExceptionSupplier();
+ } catch (NoSuchMethodException e) {
+ return new JaxRS1NoContentExceptionSupplier();
+ }
+ }
}
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/cfg/JaxRSFeature.java 2016-11-16 02:14:44.000000000 +0000
@@ -10,9 +10,9 @@
public enum JaxRSFeature implements ConfigFeature
{
/*
- /******************************************************
+ /**********************************************************
/* Input handling
- /******************************************************
+ /**********************************************************
*/
/**
@@ -26,11 +26,11 @@
* but this is not defined in JAX-RS 1.x.
*/
ALLOW_EMPTY_INPUT(true),
-
+
/*
- /******************************************************
+ /**********************************************************
/* HTTP headers
- /******************************************************
+ /**********************************************************
*/
/**
@@ -44,9 +44,56 @@
ADD_NO_SNIFF_HEADER(false),
/*
- /******************************************************
+ /**********************************************************
+ /* Caching, related
+ /**********************************************************
+ */
+
+ /**
+ * Feature that may be enabled to force dynamic lookup of ObjectMapper
+ * via JAX-RS Provider interface, regardless of whether MapperConfigurator
+ * has explicitly configured mapper or not; if disabled, static configuration will
+ * take precedence.
+ * Note that if this feature is enabled, it typically makes sense to also disable
+ * {@link JaxRSFeature#CACHE_ENDPOINT_READERS} and {@link JaxRSFeature#CACHE_ENDPOINT_WRITERS}
+ * since caching would prevent lookups.
+ *
+ * Feature is disabled by default.
+ *
+ * @since 2.8
+ */
+ DYNAMIC_OBJECT_MAPPER_LOOKUP(false),
+
+ /**
+ * [jaxrs-providers#86]: Feature that determines whether provider will cache endpoint
+ * definitions for reading or not (including caching of actual ObjectReader
to use).
+ * Feature may be disabled if reconfiguration or alternate isntance of ObjectMapper
is needed.
+ *
+ * Note that disabling of the feature may add significant amount of overhead for processing.
+ *
+ * Feature is enabled by default.
+ *
+ * @since 2.8
+ */
+ CACHE_ENDPOINT_READERS(true),
+
+ /**
+ * [jaxrs-providers#86]: Feature that determines whether provider will cache endpoint
+ * definitions for writing or not (including caching of actual ObjectWriter
to use).
+ * Feature may be disabled if reconfiguration or alternate isntance of ObjectMapper
is needed.
+ *
+ * Note that disabling of the feature may add significant amount of overhead for processing.
+ *
+ * Feature is enabled by default.
+ *
+ * @since 2.8
+ */
+ CACHE_ENDPOINT_WRITERS(true),
+
+ /*
+ /**********************************************************
/* Other
- /******************************************************
+ /**********************************************************
*/
;
@@ -71,5 +118,6 @@
@Override
public int getMask() { return (1 << ordinal()); }
+ @Override
public boolean enabledIn(int flags) { return (flags & getMask()) != 0; }
}
diff -Nru jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/util/package-info.java jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/util/package-info.java
--- jackson-jaxrs-providers-2.7.3/base/src/main/java/com/fasterxml/jackson/jaxrs/util/package-info.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/base/src/main/java/com/fasterxml/jackson/jaxrs/util/package-info.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,4 @@
+/**
+ * Miscellaneous helper classes used by providers.
+ */
+package com.fasterxml.jackson.jaxrs.util;
diff -Nru jackson-jaxrs-providers-2.7.3/cbor/pom.xml jackson-jaxrs-providers-2.8.5/cbor/pom.xml
--- jackson-jaxrs-providers-2.7.3/cbor/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/cbor/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,7 +4,7 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-cbor-provider
Jackson-JAXRS-CBOR
diff -Nru jackson-jaxrs-providers-2.7.3/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java jackson-jaxrs-providers-2.8.5/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java
--- jackson-jaxrs-providers-2.7.3/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/JacksonCBORProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -43,8 +43,8 @@
* @author Tatu Saloranta
*/
@Provider
-@Consumes(CBORMediaTypes.APPLICATION_JACKSON_CBOR)
-@Produces(CBORMediaTypes.APPLICATION_JACKSON_CBOR)
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonCBORProvider
extends ProviderBase
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.0-rc3-SNAPSHOT
+ 2.8.5
+
+ com.fasterxml.jackson.datatype
jackson-datatype-jaxrs
Jackson-JAXRS-Datatypes
bundle
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/Jaxrs2TypesModule.java jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/Jaxrs2TypesModule.java
--- jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/Jaxrs2TypesModule.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/Jaxrs2TypesModule.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,48 @@
+package com.fasterxml.jackson.datatype.jaxrs;
+
+import javax.ws.rs.core.Link;
+
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+/**
+ * Simple datatype module that adds serialization and deserialization
+ * support for following JAX-RS 2.0 types:
+ *
+ * {@link javax.ws.rs.core.Link}: serialized using "link header" representation
+ *
+ *
+ *
+ * @since 2.8
+ */
+public class Jaxrs2TypesModule extends SimpleModule
+{
+ private static final long serialVersionUID = 1L;
+
+ public Jaxrs2TypesModule() {
+ super(PackageVersion.VERSION);
+
+ // 26-Dec-2015, tatu: TODO: add custom serializers/deserializers for Link,
+ // other new JAX-RS 2.0 datatypes.
+
+ addDeserializer(Link.class, new LinkDeserializer());
+
+ addSerializer(Link.class, new ToStringSerializer(Link.class));
+ }
+
+ // yes, will try to avoid duplicate registrations (if MapperFeature enabled)
+ @Override
+ public String getModuleName() {
+ return getClass().getSimpleName();
+ }
+
+ @Override
+ public int hashCode() {
+ return getClass().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ return this == o;
+ }
+}
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/JaxRsModule.java jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/JaxRsModule.java
--- jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/JaxRsModule.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/JaxRsModule.java 1970-01-01 00:00:00.000000000 +0000
@@ -1,31 +0,0 @@
-package com.fasterxml.jackson.datatype.jaxrs;
-
-import com.fasterxml.jackson.databind.module.SimpleModule;
-
-public class JaxRsModule extends SimpleModule
-{
- private static final long serialVersionUID = 1L;
-
- public JaxRsModule() {
- super(PackageVersion.VERSION);
-
- // 26-Dec-2015, tatu: TODO: add custom serializers/deserializers for Link,
- // other new JAX-RS 2.0 datatypes.
- }
-
- // yes, will try to avoid duplicate registrations (if MapperFeature enabled)
- @Override
- public String getModuleName() {
- return getClass().getSimpleName();
- }
-
- @Override
- public int hashCode() {
- return getClass().hashCode();
- }
-
- @Override
- public boolean equals(Object o) {
- return this == o;
- }
-}
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/LinkDeserializer.java jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/LinkDeserializer.java
--- jackson-jaxrs-providers-2.7.3/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/LinkDeserializer.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/main/java/com/fasterxml/jackson/datatype/jaxrs/LinkDeserializer.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,55 @@
+package com.fasterxml.jackson.datatype.jaxrs;
+
+import java.io.IOException;
+
+import javax.ws.rs.core.Link;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
+
+/**
+ * @since 2.8
+ */
+public class LinkDeserializer extends StdScalarDeserializer
+{
+ private static final long serialVersionUID = 1L;
+
+ public LinkDeserializer() {
+ super(Link.class);
+ }
+
+ @Override
+ public Link deserialize(JsonParser p, DeserializationContext ctxt)
+ throws IOException
+ {
+ String text = p.getValueAsString();
+ if (text != null) { // has String representation
+ // should we check for empty, and if so, should it become null-value/empty-value?
+ return Link.valueOf(text);
+ }
+ JsonToken t = p.getCurrentToken();
+ if (t == JsonToken.START_ARRAY && ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
+ p.nextToken();
+ final Link value = deserialize(p, ctxt);
+ if (p.nextToken() != JsonToken.END_ARRAY) {
+ handleMissingEndArrayForSingle(p, ctxt);
+ }
+ return value;
+ }
+ if (t == JsonToken.VALUE_EMBEDDED_OBJECT) {
+ Object ob = p.getEmbeddedObject();
+ if (ob == null) {
+ return null;
+ }
+ if (ob instanceof Link) {
+ return (Link) ob;
+ }
+ }
+ return (Link) ctxt.handleUnexpectedToken(_valueClass, p);
+ }
+
+}
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module jackson-jaxrs-providers-2.8.5/datatypes/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module
--- jackson-jaxrs-providers-2.7.3/datatypes/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module 2016-11-16 02:14:44.000000000 +0000
@@ -1 +1 @@
-com.fasterxml.jackson.datatype.jaxrs.JaxRsModule
+com.fasterxml.jackson.datatype.jaxrs.Jaxrs2TypesModule
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/LinkTest.java jackson-jaxrs-providers-2.8.5/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/LinkTest.java
--- jackson-jaxrs-providers-2.7.3/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/LinkTest.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/LinkTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,24 @@
+package com.fasterxml.jackson.datatype.jaxrs;
+
+import javax.ws.rs.core.Link;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class LinkTest extends ModuleTestBase
+{
+ private final ObjectMapper MAPPER = mapperWithModule();
+
+ public void testLink() throws Exception
+ {
+ Link input = Link.fromUri("http://dot.com?foo=bar")
+ .type("someType")
+ .build();
+ String json = MAPPER.writeValueAsString(input);
+
+ Link output = MAPPER.readValue(json, Link.class);
+
+ assertNotNull(output);
+
+ assertEquals(input, output);
+ }
+}
diff -Nru jackson-jaxrs-providers-2.7.3/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/ModuleTestBase.java jackson-jaxrs-providers-2.8.5/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/ModuleTestBase.java
--- jackson-jaxrs-providers-2.7.3/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/ModuleTestBase.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/datatypes/src/test/java/com/fasterxml/jackson/datatype/jaxrs/ModuleTestBase.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,60 @@
+package com.fasterxml.jackson.datatype.jaxrs;
+
+import java.util.Arrays;
+
+import com.fasterxml.jackson.core.*;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public abstract class ModuleTestBase
+ extends junit.framework.TestCase
+{
+ protected ObjectMapper mapperWithModule() {
+ return new ObjectMapper()
+ .registerModule(new Jaxrs2TypesModule());
+ }
+
+ /*
+ /**********************************************************
+ /* Additional assertion methods
+ /**********************************************************
+ */
+
+ protected void assertToken(JsonToken expToken, JsonToken actToken)
+ {
+ if (actToken != expToken) {
+ fail("Expected token "+expToken+", current token "+actToken);
+ }
+ }
+
+ protected void assertToken(JsonToken expToken, JsonParser jp)
+ {
+ assertToken(expToken, jp.getCurrentToken());
+ }
+
+ protected void verifyException(Throwable e, String... matches)
+ {
+ String msg = e.getMessage();
+ String lmsg = (msg == null) ? "" : msg.toLowerCase();
+ for (String match : matches) {
+ String lmatch = match.toLowerCase();
+ if (lmsg.indexOf(lmatch) >= 0) {
+ return;
+ }
+ }
+ fail("Expected an exception with one of substrings ("+Arrays.asList(matches)+"): got one with message \""+msg+"\"");
+ }
+
+ /*
+ /**********************************************************
+ /* Other helper methods
+ /**********************************************************
+ */
+
+ public String quote(String str) {
+ return '"'+str+'"';
+ }
+
+ protected String aposToQuotes(String json) {
+ return json.replace("'", "\"");
+ }
+}
diff -Nru jackson-jaxrs-providers-2.7.3/debian/changelog jackson-jaxrs-providers-2.8.5/debian/changelog
--- jackson-jaxrs-providers-2.7.3/debian/changelog 2016-04-09 22:27:20.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/changelog 2017-02-05 22:39:06.000000000 +0000
@@ -1,3 +1,23 @@
+jackson-jaxrs-providers (2.8.5-2) unstable; urgency=medium
+
+ * Team upload.
+ * Modify buildsystem patch for jackson-core 2.8.6 and build-depend
+ on this version in debian/control. Addresses FTBFS (Closes: #852919).
+
+ -- tony mancill Sun, 05 Feb 2017 14:39:06 -0800
+
+jackson-jaxrs-providers (2.8.5-1) unstable; urgency=medium
+
+ * Team upload.
+ * New upstream release
+ - New build dependency on libjaxrs-api-java
+ * Build the jackson-jaxrs-{cbor,xml,yaml}-provider modules
+ * Inherit from the parent POM and simplified the packaging
+ * Merged the Build-Depends-Indep field into Build-Depends
+ * Switch to debhelper level 10
+
+ -- Emmanuel Bourg Wed, 21 Dec 2016 15:01:56 +0100
+
jackson-jaxrs-providers (2.7.3-1) unstable; urgency=medium
* Team upload.
diff -Nru jackson-jaxrs-providers-2.7.3/debian/compat jackson-jaxrs-providers-2.8.5/debian/compat
--- jackson-jaxrs-providers-2.7.3/debian/compat 2016-04-09 07:44:58.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/compat 2017-02-05 22:39:06.000000000 +0000
@@ -1 +1 @@
-9
+10
diff -Nru jackson-jaxrs-providers-2.7.3/debian/control jackson-jaxrs-providers-2.8.5/debian/control
--- jackson-jaxrs-providers-2.7.3/debian/control 2016-04-09 22:13:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/control 2017-02-05 22:39:06.000000000 +0000
@@ -3,15 +3,24 @@
Priority: optional
Maintainer: Debian Java Maintainers
Uploaders: Timo Aaltonen
-Build-Depends: debhelper (>= 9), default-jdk, maven-debian-helper (>= 1.5),
- xmlstarlet,
-Build-Depends-Indep:
- libjackson2-core-java (>= 2.7.3),
- libjackson2-databind-java (>= 2.7.3),
+Build-Depends:
+ debhelper (>= 10),
+ default-jdk,
+ libbuild-helper-maven-plugin-java,
+ libjackson2-core-java (>= 2.8.6),
+ libjackson2-databind-java (>= 2.8.6),
+ libjackson2-dataformat-cbor (>= 2.7.3),
libjackson2-dataformat-smile (>= 2.7.3),
+ libjackson2-dataformat-xml-java (>= 2.8.6),
+ libjackson2-dataformat-yaml (>= 2.8.6),
libjackson2-module-jaxb-annotations-java (>= 2.4),
+ libjaxrs-api-java,
libjsr311-api-java,
libmaven-bundle-plugin-java,
+ libreplacer-java,
+ libwoodstox-java,
+ maven-debian-helper (>= 1.5),
+ xmlstarlet
Standards-Version: 3.9.8
Vcs-Git: https://anonscm.debian.org/git/pkg-java/jackson-jaxrs-providers.git
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/jackson-jaxrs-providers.git
diff -Nru jackson-jaxrs-providers-2.7.3/debian/libjackson2-jaxrs-providers-java.poms jackson-jaxrs-providers-2.8.5/debian/libjackson2-jaxrs-providers-java.poms
--- jackson-jaxrs-providers-2.7.3/debian/libjackson2-jaxrs-providers-java.poms 2016-04-09 22:09:29.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/libjackson2-jaxrs-providers-java.poms 2017-02-05 22:39:06.000000000 +0000
@@ -25,10 +25,10 @@
# --site-xml=: Optional, the location for site.xml if it needs to be installed.
# Empty by default. [mh_install]
#
-pom.xml --no-parent --has-package-version
-base/pom.xml --has-package-version
-cbor/pom.xml --ignore
-json/pom.xml --has-package-version
-smile/pom.xml --has-package-version
-xml/pom.xml --ignore
-yaml/pom.xml --ignore
+pom.xml --has-package-version
+base/pom.xml --has-package-version --java-lib
+cbor/pom.xml --has-package-version --java-lib
+json/pom.xml --has-package-version --java-lib
+smile/pom.xml --has-package-version --java-lib
+xml/pom.xml --has-package-version --java-lib
+yaml/pom.xml --has-package-version --java-lib
diff -Nru jackson-jaxrs-providers-2.7.3/debian/maven.ignoreRules jackson-jaxrs-providers-2.8.5/debian/maven.ignoreRules
--- jackson-jaxrs-providers-2.7.3/debian/maven.ignoreRules 2016-04-09 22:09:29.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/maven.ignoreRules 2017-02-05 22:39:06.000000000 +0000
@@ -1,10 +1,11 @@
-com.fasterxml.jackson.jaxrs jackson-jaxrs-cbor-provider bundle * * *
-com.fasterxml.jackson.jaxrs jackson-jaxrs-xml-provider bundle * * *
-com.google.code.maven-replacer-plugin replacer * * * *
com.sun.jersey jersey-core * * * *
com.sun.jersey jersey-server * * * *
com.sun.jersey jersey-servlet * * * *
org.eclipse.jetty jetty-server * * * *
org.eclipse.jetty jetty-servlet * * * *
org.jboss.resteasy resteasy-jackson2-provider * * * *
+org.jboss.resteasy resteasy-jaxrs * * * *
+org.glassfish.jersey.core jersey-server * * * *
+org.glassfish.jersey.containers jersey-container-servlet * * * *
+junit junit * * * *
diff -Nru jackson-jaxrs-providers-2.7.3/debian/maven.publishedRules jackson-jaxrs-providers-2.8.5/debian/maven.publishedRules
--- jackson-jaxrs-providers-2.7.3/debian/maven.publishedRules 2016-04-09 22:09:29.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/maven.publishedRules 2017-02-05 22:39:06.000000000 +0000
@@ -1,5 +1,8 @@
com.fasterxml.jackson.jaxrs jackson-jaxrs-providers pom s/2\..*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-base * s/2\..*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-cbor-provider * s/2\..*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider * s/2\..*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-smile-provider * s/2\..*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-xml-provider * s/2\..*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-yaml-provider * s/2\..*/2.x/ * *
diff -Nru jackson-jaxrs-providers-2.7.3/debian/maven.rules jackson-jaxrs-providers-2.8.5/debian/maven.rules
--- jackson-jaxrs-providers-2.7.3/debian/maven.rules 2016-04-09 22:12:39.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/maven.rules 2017-02-05 22:39:06.000000000 +0000
@@ -1,9 +1,18 @@
+com.fasterxml.jackson jackson-parent pom s/.*/debian/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-base * s/.*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-cbor-provider * s/.*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider * s/.*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-smile-provider * s/.*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-xml-provider * s/.*/2.x/ * *
+com.fasterxml.jackson.jaxrs jackson-jaxrs-yaml-provider * s/.*/2.x/ * *
com.fasterxml.jackson.jaxrs jackson-jaxrs-providers pom s/.*/2.x/ * *
com.fasterxml.jackson.core jackson-core * s/.*/2.x/ * *
com.fasterxml.jackson.core jackson-databind * s/.*/2.x/ * *
com.fasterxml.jackson.module jackson-module-jaxb-annotations * s/.*/2.x/ * *
+com.fasterxml.jackson.dataformat jackson-dataformat-cbor * s/.*/2.x/ * *
com.fasterxml.jackson.dataformat jackson-dataformat-smile * s/.*/2.x/ * *
+com.fasterxml.jackson.dataformat jackson-dataformat-xml * s/.*/2.x/ * *
+com.fasterxml.jackson.dataformat jackson-dataformat-yaml * s/.*/2.x/ * *
+junit junit * s/.*/4.x/ * *
+org.codehaus.woodstox s/woodstox-core-asl/woodstox-core-lgpl/ * s/.*/debian/ * *
diff -Nru jackson-jaxrs-providers-2.7.3/debian/patches/fix-bundle-dependencies.patch jackson-jaxrs-providers-2.8.5/debian/patches/fix-bundle-dependencies.patch
--- jackson-jaxrs-providers-2.7.3/debian/patches/fix-bundle-dependencies.patch 2016-04-09 22:09:03.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/patches/fix-bundle-dependencies.patch 2017-02-05 22:39:06.000000000 +0000
@@ -1,20 +1,90 @@
--- a/smile/pom.xml
+++ b/smile/pom.xml
-@@ -34,6 +34,7 @@
+@@ -34,12 +34,14 @@
jackson-jaxrs-base
- com.fasterxml.jackson.jaxrs
- 2.7.3
+ ${project.groupId}
+ ${project.version}
+ bundle
+ com.fasterxml.jackson.core
+ jackson-core
+ ${version.jackson.core}
++ bundle
+
+
+ com.fasterxml.jackson.core
--- a/json/pom.xml
+++ b/json/pom.xml
+@@ -34,12 +34,14 @@
+ jackson-jaxrs-base
+ ${project.groupId}
+ ${project.version}
++ bundle
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${version.jackson.core}
++ bundle
+
+
+ com.fasterxml.jackson.core
+--- a/xml/pom.xml
++++ b/xml/pom.xml
+@@ -33,6 +33,7 @@
+ jackson-jaxrs-base
+ ${project.groupId}
+ ${project.version}
++ bundle
+
+
+
+--- a/cbor/pom.xml
++++ b/cbor/pom.xml
@@ -34,6 +34,7 @@
jackson-jaxrs-base
- com.fasterxml.jackson.jaxrs
- 2.7.3
+ ${project.groupId}
+ ${project.version}
++ bundle
+
+
+
+--- a/yaml/pom.xml
++++ b/yaml/pom.xml
+@@ -35,6 +35,7 @@
+ jackson-jaxrs-base
+ ${project.groupId}
+ ${project.version}
+ bundle
+@@ -64,12 +65,14 @@
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ ${project.version}
++ bundle
+ test
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-smile-provider
+ ${project.version}
++ bundle
+ test
+
+
+--- a/pom.xml
++++ b/pom.xml
+@@ -33,7 +33,7 @@
+
+ UTF-8
+
+- 2.8.5
++ 2.8.6
+ ${version.jackson.core}
+
+ ${version.dataformats}
diff -Nru jackson-jaxrs-providers-2.7.3/debian/patches/fix-using-bundle.diff jackson-jaxrs-providers-2.8.5/debian/patches/fix-using-bundle.diff
--- jackson-jaxrs-providers-2.7.3/debian/patches/fix-using-bundle.diff 2016-04-09 22:05:13.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/patches/fix-using-bundle.diff 1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
---- a/pom.xml
-+++ b/pom.xml
-@@ -109,4 +109,16 @@
-
-
-
-+
-+
-+
-+
-+ org.apache.felix
-+ maven-bundle-plugin
-+ 2.3.5
-+ true
-+
-+
-+
-+
-
diff -Nru jackson-jaxrs-providers-2.7.3/debian/patches/force-core-version.diff jackson-jaxrs-providers-2.8.5/debian/patches/force-core-version.diff
--- jackson-jaxrs-providers-2.7.3/debian/patches/force-core-version.diff 2016-04-09 21:49:08.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/patches/force-core-version.diff 1970-01-01 00:00:00.000000000 +0000
@@ -1,89 +0,0 @@
---- a/base/pom.xml
-+++ b/base/pom.xml
-@@ -32,12 +32,12 @@
-
- com.fasterxml.jackson.core
- jackson-core
-- ${version.jackson.core}
-+ 2.7.3
-
-
- com.fasterxml.jackson.core
- jackson-databind
-- ${version.jackson.core}
-+ 2.7.3
-
-
-
---- a/json/pom.xml
-+++ b/json/pom.xml
-@@ -32,25 +32,25 @@
-
-
- jackson-jaxrs-base
-- ${project.groupId}
-- ${project.version}
-+ com.fasterxml.jackson.jaxrs
-+ 2.7.3
-
-
-
- com.fasterxml.jackson.core
- jackson-core
-- ${version.jackson.core}
-+ 2.7.3
-
-
- com.fasterxml.jackson.core
- jackson-databind
-- ${version.jackson.core}
-+ 2.7.3
-
-
-
- com.fasterxml.jackson.module
- jackson-module-jaxb-annotations
-- ${version.jackson.jaxb}
-+ 2.7.3
-
-
-
---- a/smile/pom.xml
-+++ b/smile/pom.xml
-@@ -32,30 +32,30 @@
-
-
- jackson-jaxrs-base
-- ${project.groupId}
-- ${project.version}
-+ com.fasterxml.jackson.jaxrs
-+ 2.7.3
-
-
-
- com.fasterxml.jackson.core
- jackson-core
-- ${version.jackson.core}
-+ 2.7.3
-
-
- com.fasterxml.jackson.core
- jackson-databind
-- ${version.jackson.core}
-+ 2.7.3
-
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-smile
-- ${version.jackson.smile}
-+ 2.7.3
-
-
-
- com.fasterxml.jackson.module
- jackson-module-jaxb-annotations
-- ${version.jackson.jaxb}
-+ 2.7.3
-
-
-
diff -Nru jackson-jaxrs-providers-2.7.3/debian/patches/series jackson-jaxrs-providers-2.8.5/debian/patches/series
--- jackson-jaxrs-providers-2.7.3/debian/patches/series 2016-04-09 22:14:05.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/patches/series 2017-02-05 22:39:06.000000000 +0000
@@ -1,3 +1 @@
-force-core-version.diff
-fix-using-bundle.diff
fix-bundle-dependencies.patch
diff -Nru jackson-jaxrs-providers-2.7.3/debian/replace-generate.sh jackson-jaxrs-providers-2.8.5/debian/replace-generate.sh
--- jackson-jaxrs-providers-2.7.3/debian/replace-generate.sh 2016-04-09 07:44:58.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/replace-generate.sh 1970-01-01 00:00:00.000000000 +0000
@@ -1,34 +0,0 @@
-#!/bin/sh
-
-# Simple replacement for mavan-replacer-plugin
-
-set -e
-
-TARGET=$1; shift
-
-TEMPLATE=$TARGET.in
-
-get_attr() {
- < pom.xml xmlstarlet sel \
- -N pom=http://maven.apache.org/POM/4.0.0 \
- -T -t -v $1
-}
-
-package=$(dirname $TARGET | sed -e 's,.*src/main/java/\(.*\)$,\1,' | tr / .)
-projectversion=$(get_attr '/pom:project/pom:version')
-projectgroupid=$(get_attr '/pom:project/pom:groupId')
-projectartifactid=$(get_attr '/pom:project/pom:artifactId')
-
-sed \
- -e "s,@package@,$package,g" \
- -e "s,@projectversion@,$projectversion,g" \
- -e "s,@projectgroupid@,$projectgroupid,g" \
- -e "s,@projectartifactid@,$projectartifactid,g" \
- < $TEMPLATE > $TARGET.t
-
-if grep -i '@[a-z]*@' $TARGET.t >&2; then
- echo 'Not all tags were
- replaced' >&2 exit 1
-fi
-
-mv $TARGET.t $TARGET
diff -Nru jackson-jaxrs-providers-2.7.3/debian/rules jackson-jaxrs-providers-2.8.5/debian/rules
--- jackson-jaxrs-providers-2.7.3/debian/rules 2016-04-09 22:27:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/debian/rules 2017-02-05 22:39:06.000000000 +0000
@@ -1,23 +1,7 @@
#!/usr/bin/make -f
-VERSION_FILES = \
- json/src/main/java/com/fasterxml/jackson/jaxrs/json/PackageVersion.java \
- xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/PackageVersion.java \
- smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/PackageVersion.java \
- cbor/src/main/java/com/fasterxml/jackson/jaxrs/cbor/PackageVersion.java
-
%:
- dh $@ --buildsystem=maven
-
-override_dh_auto_configure:
- for file in $(VERSION_FILES); do \
- sh debian/replace-generate.sh $$file \
- ; done
- dh_auto_configure
-
-override_dh_auto_clean:
- rm -f $(VERSION_FILES)
- dh_auto_clean
+ dh $@
get-orig-source:
uscan --download-current-version --force-download --rename
diff -Nru jackson-jaxrs-providers-2.7.3/.gitattributes jackson-jaxrs-providers-2.8.5/.gitattributes
--- jackson-jaxrs-providers-2.7.3/.gitattributes 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/.gitattributes 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,3 @@
+# Do not merge `pom.xml` from older version, as it will typically conflict
+
+pom.xml merge=ours
diff -Nru jackson-jaxrs-providers-2.7.3/json/pom.xml jackson-jaxrs-providers-2.8.5/json/pom.xml
--- jackson-jaxrs-providers-2.7.3/json/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,7 +4,7 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-json-provider
Jackson-JAXRS-JSON
@@ -53,11 +53,21 @@
${version.jackson.jaxb}
-
+
+
org.jboss.resteasy
resteasy-jackson2-provider
- 3.0.6.Final
+ 3.0.17.Final
+ test
+
+
+ org.jboss.resteasy
+ resteasy-jaxrs
+ 3.0.17.Final
test
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java jackson-jaxrs-providers-2.8.5/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java
--- jackson-jaxrs-providers-2.7.3/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java 1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-package com.fasterxml.jackson.jaxrs.json;
-
-import javax.ws.rs.ext.Provider;
-
-/**
- * @deprecated Since 2.2 use {@link com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper} instead.
- */
-@Deprecated
-@Provider
-public class JsonMappingExceptionMapper extends com.fasterxml.jackson.jaxrs.base.JsonMappingExceptionMapper { }
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java jackson-jaxrs-providers-2.8.5/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java
--- jackson-jaxrs-providers-2.7.3/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java 1970-01-01 00:00:00.000000000 +0000
@@ -1,10 +0,0 @@
-package com.fasterxml.jackson.jaxrs.json;
-
-import javax.ws.rs.ext.Provider;
-
-/**
- * @deprecated Use {@link com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper} instead.
- */
-@Deprecated
-@Provider
-public class JsonParseExceptionMapper extends com.fasterxml.jackson.jaxrs.base.JsonParseExceptionMapper { }
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/SimpleEndpointTestBase.java jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/SimpleEndpointTestBase.java
--- jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/SimpleEndpointTestBase.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/dw/SimpleEndpointTestBase.java 2016-11-16 02:14:44.000000000 +0000
@@ -1,20 +1,58 @@
package com.fasterxml.jackson.jaxrs.json.dw;
-import java.io.*;
-import java.net.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map.Entry;
-import javax.ws.rs.*;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Invocation.Builder;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.Link;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
import org.eclipse.jetty.server.Server;
import org.junit.Assert;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
public abstract class SimpleEndpointTestBase extends ResourceTestBase
{
@@ -40,6 +78,105 @@
}
}
+ protected static abstract class Page {
+
+ public static final String PREV_PAGE_REL = "prev";
+ public static final String NEXT_PAGE_REL = "next";
+
+ public final Link getPreviousPageLink() {
+ return getLink(PREV_PAGE_REL);
+ }
+
+ public final Link getNextPageLink() {
+ return getLink(NEXT_PAGE_REL);
+ }
+
+ public abstract List getEntities();
+
+ public abstract Link getLink(String rel);
+
+ }
+
+ @JsonPropertyOrder({ "entities", "links" })
+ @JsonAutoDetect(fieldVisibility = Visibility.ANY, creatorVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
+ protected static class PageImpl extends Page {
+
+ protected static class JsonLinkSerializer extends JsonSerializer {
+
+ static final String HREF_PROPERTY = "href";
+
+ @Override
+ public void serialize(Link link, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeStringField(HREF_PROPERTY, link.getUri().toString());
+ for (Entry entry : link.getParams().entrySet()) {
+ jsonGenerator.writeStringField(entry.getKey(), entry.getValue());
+ }
+ jsonGenerator.writeEndObject();
+ }
+
+ }
+
+ protected static class JsonLinkDeserializer extends JsonDeserializer {
+
+ @Override
+ public Link deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
+ throws IOException {
+ Link link = null;
+ JsonNode jsonNode = jsonParser.getCodec(). readTree(jsonParser);
+ JsonNode hrefJsonNode = jsonNode.get(JsonLinkSerializer.HREF_PROPERTY);
+ if (hrefJsonNode != null) {
+ Link.Builder linkBuilder = Link.fromUri(hrefJsonNode.asText());
+ Iterator fieldNamesIterator = jsonNode.fieldNames();
+ while (fieldNamesIterator.hasNext()) {
+ String fieldName = fieldNamesIterator.next();
+ if (!JsonLinkSerializer.HREF_PROPERTY.equals(fieldName)) {
+ linkBuilder.param(fieldName, jsonNode.get(fieldName).asText());
+ }
+ }
+ link = linkBuilder.build();
+ }
+ return link;
+ }
+
+ }
+
+ private final List entities;
+ @JsonSerialize(contentUsing = JsonLinkSerializer.class)
+ @JsonDeserialize(contentUsing = JsonLinkDeserializer.class)
+ private final List links;
+
+ protected PageImpl() {
+ this.entities = new ArrayList<>();
+ this.links = new ArrayList<>();
+ }
+
+ public void addEntities(E... entitities) {
+ Collections.addAll(this.entities, entitities);
+ }
+
+ public void addLinks(Link... links) {
+ Collections.addAll(this.links, links);
+ }
+
+ @Override
+ public List getEntities() {
+ return this.entities;
+ }
+
+ @Override
+ public Link getLink(String rel) {
+ for (Link link : this.links) {
+ if (link.getRel().equals(rel)) {
+ return link;
+ }
+ }
+ return null;
+ }
+
+ }
+
@Path("/point")
public static class SimpleResource
{
@@ -57,6 +194,13 @@
return new Point(1, 2);
}
+ @Path("/custom")
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON, "application/vnd.com.example.v1+json" })
+ public Point getPointCustomMediaType() {
+ return new Point(1, 2);
+ }
+
@Path("/max")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@@ -142,6 +286,9 @@
@Path("/dynamic")
public static class DynamicTypingResource
{
+ @Context
+ private UriInfo uriInfo;
+
@GET
@Path("single")
@Produces(MediaType.APPLICATION_JSON)
@@ -155,6 +302,53 @@
public List getPoints() {
return Arrays.asList(getPoint());
}
+
+ @GET
+ @Path("genericPageEntity")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPointsAsGenericPageEntity() {
+ PageImpl page = new PageImpl<>();
+ page.addEntities(getPoint());
+ URI selfUri = UriBuilder.fromUri(this.uriInfo.getBaseUri()).path(DynamicTypingResource.class)
+ .path(DynamicTypingResource.class, "getPointsAsGenericPageEntity").build();
+ page.addLinks(Link.fromUri(selfUri).rel("self").build());
+ return Response.ok(new GenericEntity>(page) {
+ }).build();
+ }
+
+ @GET
+ @Path("genericPageImplEntity")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPointsAsGenericPageImplEntity() {
+ PageImpl page = new PageImpl<>();
+ page.addEntities(getPoint());
+ URI selfUri = UriBuilder.fromUri(this.uriInfo.getBaseUri()).path(DynamicTypingResource.class)
+ .path(DynamicTypingResource.class, "getPointsAsGenericPageImplEntity").build();
+ page.addLinks(Link.fromUri(selfUri).rel("self").build());
+ return Response.ok(new GenericEntity>(page) {
+ }).build();
+ }
+
+ @GET
+ @Path("genericCollectionEntity")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPointsAsGenericCollectionEntity() {
+ Collection list = new ArrayList<>();
+ list.add(getPoint());
+ return Response.ok(new GenericEntity>(list) {
+ }).build();
+ }
+
+ @GET
+ @Path("genericCollectionImplEntity")
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response getPointsAsGenericCollectionImplEntity() {
+ ArrayList list = new ArrayList<>();
+ list.add(getPoint());
+ return Response.ok(new GenericEntity>(list) {
+ }).build();
+ }
+
}
public static class SimpleRawApp extends JsonApplicationWithJackson {
@@ -200,6 +394,7 @@
Server server = startServer(TEST_PORT, SimpleResourceApp.class);
URL urlJS = new URL("http://localhost:"+TEST_PORT+"/point/javascript");
URL urlJsonX = new URL("http://localhost:"+TEST_PORT+"/point/jsonx");
+ URL urlCustom = new URL("http://localhost:"+TEST_PORT+"/point/custom");
try {
HttpURLConnection conn = (HttpURLConnection) urlJS.openConnection();
@@ -241,6 +436,21 @@
assertEquals(1, p.x);
assertEquals(2, p.y);
conn.disconnect();
+
+ conn = (HttpURLConnection) urlCustom.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+json");
+ assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
+ in = conn.getInputStream();
+ p = null;
+ try {
+ p = mapper.readValue(in, Point.class);
+ } finally {
+ in.close();
+ }
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+ conn.disconnect();
} finally {
server.stop();
}
@@ -384,4 +594,73 @@
fail("Expected p.z == 3, was "+p.z+"; most likely due to incorrect serialization using base type (issue #60)");
}
}
+
+ // for [#87], problems with GenericEntity where type != rawType
+ public void testDynamicTypingGenericPageEntity() throws Exception {
+ testDynamicTypingPage(URI.create("http://localhost:" + TEST_PORT + "/dynamic/genericPageEntity"));
+ }
+
+ // for [#87], problems with GenericEntity where type != rawType
+ public void testDynamicTypingGenericPageImplEntity() throws Exception {
+ testDynamicTypingPage(URI.create("http://localhost:" + TEST_PORT + "/dynamic/genericPageImplEntity"));
+ }
+
+ // for [#87], problems with GenericEntity where type != rawType
+ private void testDynamicTypingPage(URI uri) throws Exception {
+ Server server = startServer(TEST_PORT, SimpleDynamicTypingApp.class);
+ Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
+ try {
+ Builder invocationBuilder = client.target(uri).request(MediaType.APPLICATION_JSON_TYPE);
+
+ // Test that JSON serialization on server side correctly take
+ // @JsonAutoDetect into account
+ String response = invocationBuilder.get(String.class);
+ assertFalse(response.contains("previousPageLink"));
+
+ PageImpl page = invocationBuilder.get(new GenericType>() {
+ });
+ Link expectedLink = Link.fromUri(uri).rel("self").build();
+ Link currentLink = page.getLink("self");
+ assertEquals(expectedLink, currentLink);
+ } finally {
+ server.stop();
+ client.close();
+ }
+ }
+
+ // for [#87], problems with GenericEntity where type != rawType
+ public void testDynamicTypingGenericCollectionEntity() throws Exception {
+ testDynamicTypingCollection(URI.create("http://localhost:" + TEST_PORT + "/dynamic/genericCollectionEntity"));
+ }
+
+ // for [#87], problems with GenericEntity where type != rawType
+ public void testDynamicTypingGenericCollectionImplEntity() throws Exception {
+ testDynamicTypingCollection(URI
+ .create("http://localhost:" + TEST_PORT + "/dynamic/genericCollectionImplEntity"));
+ }
+
+ // for [#87], problems with GenericEntity where type != rawType
+ private void testDynamicTypingCollection(URI uri) throws Exception {
+ Server server = startServer(TEST_PORT, SimpleDynamicTypingApp.class);
+ Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
+ try {
+ ArrayList collection = client.target(uri).request(MediaType.APPLICATION_JSON_TYPE)
+ .get(new GenericType>() {
+ });
+ assertNotNull(collection);
+ assertEquals(1, collection.size());
+ // ensure we got a valid Point
+ ExtendedPoint p = collection.iterator().next();
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+ if (p.z != 3) {
+ fail("Expected p.z == 3, was " + p.z
+ + "; most likely due to incorrect serialization using base type (issue #60)");
+ }
+ } finally {
+ server.stop();
+ client.close();
+ }
+ }
+
}
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/AnnotationTest.java jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/AnnotationTest.java
--- jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/AnnotationTest.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/AnnotationTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -3,7 +3,8 @@
import javax.servlet.Servlet;
import com.fasterxml.jackson.jaxrs.json.dw.AnnotationTestBase;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import org.glassfish.jersey.servlet.ServletContainer;
public class AnnotationTest extends AnnotationTestBase {
@Override
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/SimpleEndpointTest.java jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/SimpleEndpointTest.java
--- jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/SimpleEndpointTest.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/SimpleEndpointTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -3,7 +3,8 @@
import javax.servlet.Servlet;
import com.fasterxml.jackson.jaxrs.json.dw.SimpleEndpointTestBase;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import org.glassfish.jersey.servlet.ServletContainer;
public class SimpleEndpointTest extends SimpleEndpointTestBase {
@Override
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/WriteModificationsTest.java jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/WriteModificationsTest.java
--- jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/WriteModificationsTest.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/jersey/WriteModificationsTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -3,7 +3,8 @@
import javax.servlet.Servlet;
import com.fasterxml.jackson.jaxrs.json.dw.WriteModificationsTestBase;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import org.glassfish.jersey.servlet.ServletContainer;
public class WriteModificationsTest extends WriteModificationsTestBase {
@Override
diff -Nru jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestJSONVersions.java jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestJSONVersions.java
--- jackson-jaxrs-providers-2.7.3/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestJSONVersions.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestJSONVersions.java 2016-11-16 02:14:44.000000000 +0000
@@ -19,7 +19,7 @@
private void assertVersion(Versioned vers)
{
final Version v = vers.version();
- assertFalse("Should find version information (got "+v+")", v.isUknownVersion());
+ assertFalse("Should find version information (got "+v+")", v.isUnknownVersion());
Version exp = PackageVersion.VERSION;
assertEquals(exp.toFullString(), v.toFullString());
assertEquals(exp, v);
diff -Nru jackson-jaxrs-providers-2.7.3/pom.xml jackson-jaxrs-providers-2.8.5/pom.xml
--- jackson-jaxrs-providers-2.7.3/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,38 +4,36 @@
com.fasterxml.jackson
jackson-parent
- 2.7
+ 2.8
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
Jackson JAX-RS
- 2.7.3
+ 2.8.5
pom
Parent for Jackson JAX-RS providers
base
-
cbor
json
smile
xml
yaml
- http://wiki.fasterxml.com/JacksonHome
+ http://github.com/FasterXML/jackson-jaxrs-providers
scm:git:git@github.com:FasterXML/jackson-jaxrs-providers.git
scm:git:git@github.com:FasterXML/jackson-jaxrs-providers.git
http://github.com/FasterXML/jackson-jaxrs-providers
- jackson-jaxrs-providers-2.7.3
+ jackson-jaxrs-providers-2.8.5
UTF-8
- 2.7.3
+ 2.8.5
${version.jackson.core}
${version.dataformats}
@@ -45,12 +43,12 @@
${version.jackson.core}
-
- 1.17.1
- 8.1.10.v20130312
+
+ 2.22.2
+ 9.2.13.v20150730
- [1.1.1,2.1)
+ [2.0,2.1)
@@ -62,12 +60,8 @@
javax.ws.rs
- jsr311-api
- 1.1.1
-
+ 2.0.1
provided
@@ -76,6 +70,12 @@
NOTE: use 1.2 as that's JDK 1.5; later (1.8) versions need JDK 1.6
-->
+
+ junit
+ junit
+ test
+
+
org.eclipse.jetty
jetty-server
@@ -90,23 +90,44 @@
- com.sun.jersey
- jersey-core
- ${version.jersey}
- test
-
-
- com.sun.jersey
+ org.glassfish.jersey.core
jersey-server
${version.jersey}
test
+
+
+ com.google.guava
+ guava
+
+
+ org.slf4j
+ slf4j-api
+
+
- com.sun.jersey
- jersey-servlet
+ org.glassfish.jersey.containers
+ jersey-container-servlet
${version.jersey}
test
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ 3.2.0
+
+
+ <_nouses>false
+
+
+
+
+
+
diff -Nru jackson-jaxrs-providers-2.7.3/README.md jackson-jaxrs-providers-2.8.5/README.md
--- jackson-jaxrs-providers-2.7.3/README.md 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/README.md 2016-11-16 02:14:44.000000000 +0000
@@ -6,7 +6,7 @@
* [Smile](https://github.com/FasterXML/jackson-dataformat-smile) (binary JSON)
* [CBOR](https://github.com/FasterXML/jackson-dataformat-cbor) (another kind of binary JSON)
* [XML](https://github.com/FasterXML/jackson-dataformat-xml)
-* [YAML](https://github.com/FasterXML/jackson-dataformat-yaml) (starting with 2.6.0, to be released)
+* [YAML](https://github.com/FasterXML/jackson-dataformat-yaml)
Providers implement JAX-RS `MessageBodyReader` and `MessageBodyWriter` handlers for specific
data formats. They also contain SPI settings for auto-registration.
@@ -17,7 +17,7 @@
## Status
-As of Jackson 2.2, this module replaces individual JAX-RS provider modules that were used with earlier Jackson versions.
+Module is fully functional and considered mature.
## Maven dependency
@@ -27,13 +27,13 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-json-provider
- 2.5.4
+ 2.7.4
```
(above is for JSON provider; modify appropriately for other providers)
-## Usage
+## Usage: registering providers
Due to auto-registration, it should be possible to simply add Maven dependency
(or include jar if using other build systems) and let JAX-RS implementation discover
@@ -42,10 +42,26 @@
To use Jackson with Jersey see [their documentation](https://jersey.java.net/documentation/latest/media.html#json.jackson).
+### Usage: registering supporting datatypes module
+
+As of Jackson 2.8, there is a small supporting datatype module, `jackson-datatype-jaxrs` (see under `datatypes/`).
+It will not be auto-registered automatically (unless user calls `ObjectMapper.findAndRegisterModules()`); instead,
+user has to register it by normal means:
+
+```java
+ObjectMapper mapper = new ObjectMapper();
+mapper.registerModule(new Jaxrs2TypesModule());
+// and then register mapper with JAX-RS provider(s)
+```
+
+and ensuring that configured mapper is used by JAX-RS providers.
+
+It is possible that later versions of providers may offer additional ways to get datatype module registered.
+
### Annotations on resources
In addition to annotation value classes, it is also possible to use a subset
-of Jackson annotations with provider (versions 2.3.0 and above).
+of Jackson annotations with provider.
Here is a short list of supported annotations that work with all formats:
diff -Nru jackson-jaxrs-providers-2.7.3/release-notes/CREDITS jackson-jaxrs-providers-2.8.5/release-notes/CREDITS
--- jackson-jaxrs-providers-2.7.3/release-notes/CREDITS 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/release-notes/CREDITS 2016-11-16 02:14:44.000000000 +0000
@@ -41,3 +41,14 @@
M. Tarık Yurt (mtyurt@github)
* Contributed #68: Add YAML provider
(2.6.0)
+
+Nick Kleinschmidt (kleinsch@github)
+
+* Reported, contributed fix for #80: Non-JSON providers don't
+ support custom MIME types with extensions
+ (2.7.4)
+
+Tim Ward (timothyjward@github)
+
+* Contributed #93: Jackson OSGi metadata is incomplete
+ (2.8.5)
diff -Nru jackson-jaxrs-providers-2.7.3/release-notes/VERSION jackson-jaxrs-providers-2.8.5/release-notes/VERSION
--- jackson-jaxrs-providers-2.7.3/release-notes/VERSION 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/release-notes/VERSION 2016-11-16 02:14:44.000000000 +0000
@@ -9,6 +9,42 @@
=== Releases ===
------------------------------------------------------------------------
+2.8.5 (16-Nov-2016)
+
+#91: Implemented dynamic selection of NoContentException to try to
+ support JAX-RS 1.x.
+ (contributed by Spikhalskiy@github)
+#93: Jackson OSGi metadata is incomplete
+ (contributed by Tim W)
+
+2.8.4 (14-Oct-2016)
+2.8.3 (17-Sep-2016)
+2.8.2 (30-Aug-2016)
+
+No changes since 2.8.1
+
+2.8.1 (20-Jul-2016)
+
+#87: JacksonJaxbJsonProvider should use the real "value.getClass()" to build the root type
+
+2.8.0 (05-Jul-2016)
+
+#22: Remove `@Provider` annotation from `JsonParseExceptionMapper` and
+ `JsonMappingExceptionMapper`
+#48: Support compact serialization of `javax.ws.rs.core.Link`, deserialization
+#82: Upgrade JAX-RS dependency to 2.0
+#86: ContextResolver must be called first when provided
+ (requested by NicoNes@github)
+
+2.7.5 (11-Jun-2016)
+
+No change since 2.7.4
+
+2.7.4 (29-Apr-2016)
+
+#80: Non-JSON providers don't support custom MIME types with extensions
+ (reported and fixed by Nick K)
+
2.7.3 (16-Mar-2016)
2.7.2 (27-Feb-2016)
2.7.1 (02-Feb-2016)
@@ -19,6 +55,9 @@
No changes since 2.6.
+2.6.6 (05-Apr-2016)
+2.6.5 (19-Jan-2016)
+2.6.4 (07-Dec-2015)
2.6.3 (12-Oct-2015)
2.6.2 (15-Sep-2015)
2.6.1 (09-Aug-2015)
diff -Nru jackson-jaxrs-providers-2.7.3/smile/pom.xml jackson-jaxrs-providers-2.8.5/smile/pom.xml
--- jackson-jaxrs-providers-2.7.3/smile/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,7 +4,7 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-smile-provider
Jackson-JAXRS-Smile
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonJaxbSmileProvider.java jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonJaxbSmileProvider.java
--- jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonJaxbSmileProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonJaxbSmileProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -2,6 +2,7 @@
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -22,8 +23,8 @@
* in sync if changed.
*/
@Provider
-@Consumes(SmileMediaTypes.APPLICATION_JACKSON_SMILE)
-@Produces(SmileMediaTypes.APPLICATION_JACKSON_SMILE)
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonJaxbSmileProvider extends JacksonSmileProvider {
/**
* Default annotation sets to use, if not explicitly defined during
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java
--- jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -43,8 +43,8 @@
* @author Tatu Saloranta
*/
@Provider
-@Consumes(SmileMediaTypes.APPLICATION_JACKSON_SMILE)
-@Produces(SmileMediaTypes.APPLICATION_JACKSON_SMILE)
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonSmileProvider
extends ProviderBase
- * Also continues supporting functionality, such as
- * exception mappers that can simplify handling of
- * error conditions.
- *
- * There are two default provider classes:
- *
- * {@link com.fasterxml.jackson.jaxrs.smile.JacksonSmileProvider} is the basic
- * provider configured to use Jackson annotations
- *
- * {@link com.fasterxml.jackson.jaxrs.smile.JacksonJaxbSmileProvider} is extension
- * of the basic provider, configured to additionally use JAXB annotations,
- * in addition to (or in addition of, if so configured) Jackson annotations.
- *
- *
- */
-package com.fasterxml.jackson.jaxrs.smile;
\ No newline at end of file
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/package-info.java jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/package-info.java
--- jackson-jaxrs-providers-2.7.3/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/package-info.java 1970-01-01 00:00:00.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/package-info.java 2016-11-16 02:14:44.000000000 +0000
@@ -0,0 +1,21 @@
+/**
+ * Jackson-based JAX-RS provider that can automatically
+ * serialize and deserialize resources for
+ * Smile content type.
+ *
+ * Also continues supporting functionality, such as
+ * exception mappers that can simplify handling of
+ * error conditions.
+ *
+ * There are two default provider classes:
+ *
+ * {@link com.fasterxml.jackson.jaxrs.smile.JacksonSmileProvider} is the basic
+ * provider configured to use Jackson annotations
+ *
+ * {@link com.fasterxml.jackson.jaxrs.smile.JacksonJaxbSmileProvider} is extension
+ * of the basic provider, configured to additionally use JAXB annotations,
+ * in addition to (or in addition of, if so configured) Jackson annotations.
+ *
+ *
+ */
+package com.fasterxml.jackson.jaxrs.smile;
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/dw/SimpleEndpointTestBase.java jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/dw/SimpleEndpointTestBase.java
--- jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/dw/SimpleEndpointTestBase.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/dw/SimpleEndpointTestBase.java 2016-11-16 02:14:44.000000000 +0000
@@ -34,6 +34,13 @@
public Point getPoint() {
return new Point(1, 2);
}
+
+ @Path("/custom")
+ @GET
+ @Produces({ "application/vnd.com.example.v1+smile" })
+ public Point getPointCustom() {
+ return new Point(1, 2);
+ }
}
public static class SimpleResourceApp extends SmileApplicationWithJackson {
@@ -74,6 +81,28 @@
p = mapper.readValue(in, Point.class);
in.close();
} finally {
+ server.stop();
+ }
+ // ensure we got a valid Point
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+ }
+
+ public void testCustomMediaTypeWithSmileExtension() throws Exception
+ {
+ final ObjectMapper mapper = new ObjectMapper(new SmileFactory());
+ Server server = startServer(TEST_PORT, SimpleResourceApp.class);
+ Point p;
+
+ try {
+ final URL url = new URL("http://localhost:" + TEST_PORT + "/point/custom");
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+smile");
+ InputStream in = conn.getInputStream();
+ p = mapper.readValue(in, Point.class);
+ in.close();
+ } finally {
server.stop();
}
// ensure we got a valid Point
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/jersey/SimpleEndpointTest.java jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/jersey/SimpleEndpointTest.java
--- jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/jersey/SimpleEndpointTest.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/jersey/SimpleEndpointTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -3,7 +3,8 @@
import javax.servlet.Servlet;
import com.fasterxml.jackson.jaxrs.smile.dw.SimpleEndpointTestBase;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import org.glassfish.jersey.servlet.ServletContainer;
public class SimpleEndpointTest extends SimpleEndpointTestBase {
@Override
diff -Nru jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/TestSmileVersions.java jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/TestSmileVersions.java
--- jackson-jaxrs-providers-2.7.3/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/TestSmileVersions.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/smile/src/test/java/com/fasterxml/jackson/jaxrs/smile/TestSmileVersions.java 2016-11-16 02:14:44.000000000 +0000
@@ -19,7 +19,7 @@
private void assertVersion(Versioned vers)
{
final Version v = vers.version();
- assertFalse("Should find version information (got "+v+")", v.isUknownVersion());
+ assertFalse("Should find version information (got "+v+")", v.isUnknownVersion());
Version exp = PackageVersion.VERSION;
assertEquals(exp.toFullString(), v.toFullString());
assertEquals(exp, v);
diff -Nru jackson-jaxrs-providers-2.7.3/.travis.yml jackson-jaxrs-providers-2.8.5/.travis.yml
--- jackson-jaxrs-providers-2.7.3/.travis.yml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/.travis.yml 2016-11-16 02:14:44.000000000 +0000
@@ -2,3 +2,10 @@
jdk:
- oraclejdk7
+ - oraclejdk8
+
+# whitelist
+branches:
+ only:
+ - master
+ - "2.7"
diff -Nru jackson-jaxrs-providers-2.7.3/xml/pom.xml jackson-jaxrs-providers-2.8.5/xml/pom.xml
--- jackson-jaxrs-providers-2.7.3/xml/pom.xml 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/xml/pom.xml 2016-11-16 02:14:44.000000000 +0000
@@ -4,7 +4,7 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-xml-provider
Jackson-JAXRS-XML
diff -Nru jackson-jaxrs-providers-2.7.3/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonJaxbXMLProvider.java jackson-jaxrs-providers-2.8.5/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonJaxbXMLProvider.java
--- jackson-jaxrs-providers-2.7.3/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonJaxbXMLProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonJaxbXMLProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -23,8 +23,8 @@
* in sync if changed.
*/
@Provider
-@Consumes({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
-@Produces({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonJaxbXMLProvider extends JacksonXMLProvider {
/**
* Default annotation sets to use, if not explicitly defined during
diff -Nru jackson-jaxrs-providers-2.7.3/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java jackson-jaxrs-providers-2.8.5/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java
--- jackson-jaxrs-providers-2.7.3/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -45,8 +45,8 @@
* @author Tatu Saloranta
*/
@Provider
-@Consumes({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
-@Produces({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonXMLProvider
extends ProviderBase
com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
- 2.7.3
+ 2.8.5
jackson-jaxrs-yaml-provider
Jackson-JAXRS-YAML
@@ -58,6 +58,20 @@
jackson-module-jaxb-annotations
${version.jackson.jaxb}
+
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ ${project.version}
+ test
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-smile-provider
+ ${project.version}
+ test
+
diff -Nru jackson-jaxrs-providers-2.7.3/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonJaxbYAMLProvider.java jackson-jaxrs-providers-2.8.5/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonJaxbYAMLProvider.java
--- jackson-jaxrs-providers-2.7.3/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonJaxbYAMLProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonJaxbYAMLProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -5,6 +5,7 @@
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
/**
@@ -22,8 +23,8 @@
* in sync if changed.
*/
@Provider
-@Consumes({ YAMLMediaTypes.TEXT_JACKSON_YAML, YAMLMediaTypes.APPLICATION_JACKSON_YAML })
-@Produces({ YAMLMediaTypes.TEXT_JACKSON_YAML, YAMLMediaTypes.APPLICATION_JACKSON_YAML })
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonJaxbYAMLProvider extends JacksonYAMLProvider {
/**
* Default annotation sets to use, if not explicitly defined during
diff -Nru jackson-jaxrs-providers-2.7.3/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonYAMLProvider.java jackson-jaxrs-providers-2.8.5/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonYAMLProvider.java
--- jackson-jaxrs-providers-2.7.3/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonYAMLProvider.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/yaml/src/main/java/com/fasterxml/jackson/jaxrs/yaml/JacksonYAMLProvider.java 2016-11-16 02:14:44.000000000 +0000
@@ -51,8 +51,8 @@
* @author Tatu Saloranta
*/
@Provider
-@Consumes({ YAMLMediaTypes.TEXT_JACKSON_YAML, YAMLMediaTypes.APPLICATION_JACKSON_YAML })
-@Produces({ YAMLMediaTypes.TEXT_JACKSON_YAML, YAMLMediaTypes.APPLICATION_JACKSON_YAML })
+@Consumes(MediaType.WILDCARD) // NOTE: required to support "non-standard" JSON variants
+@Produces(MediaType.WILDCARD)
public class JacksonYAMLProvider
extends ProviderBase getSingletons() {
HashSet singletons = new HashSet();
- singletons.add(_provider);
+ for(Object provider : _providers) {
+ singletons.add(provider);
+ }
singletons.add(_resource);
return singletons;
}
@@ -41,7 +43,7 @@
protected static abstract class YAMLApplicationWithJackson extends YAMLApplication
{
public YAMLApplicationWithJackson(Object resource) {
- super(new JacksonYAMLProvider(), resource);
+ super(resource, new JacksonYAMLProvider());
}
}
diff -Nru jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/dw/SimpleEndpointTestBase.java jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/dw/SimpleEndpointTestBase.java
--- jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/dw/SimpleEndpointTestBase.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/dw/SimpleEndpointTestBase.java 2016-11-16 02:14:44.000000000 +0000
@@ -1,7 +1,12 @@
package com.fasterxml.jackson.jaxrs.yaml.dw;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.smile.SmileFactory;
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import com.fasterxml.jackson.jaxrs.smile.JacksonSmileProvider;
+import com.fasterxml.jackson.jaxrs.smile.SmileMediaTypes;
+import com.fasterxml.jackson.jaxrs.yaml.JacksonYAMLProvider;
import com.fasterxml.jackson.jaxrs.yaml.YAMLMediaTypes;
import org.eclipse.jetty.server.Server;
@@ -10,9 +15,11 @@
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.io.InputStream;
+import java.net.HttpURLConnection;
import java.net.URL;
public abstract class SimpleEndpointTestBase extends ResourceTestBase
@@ -37,12 +44,42 @@
public Point getPoint() {
return new Point(1, 2);
}
+
+ @GET
+ @Path("/custom")
+ @Produces({ "application/vnd.com.example.v1+yaml" })
+ public Point getPointCustom() {
+ return new Point(1, 2);
+ }
+ }
+
+ @Path("/point")
+ public static class MultiMediaTypeResource
+ {
+ @GET
+ @Produces({
+ YAMLMediaTypes.APPLICATION_JACKSON_YAML,
+ "application/vnd.com.example.v1+yaml",
+ MediaType.APPLICATION_JSON,
+ "application/vnd.com.example.v1+json",
+ SmileMediaTypes.APPLICATION_JACKSON_SMILE,
+ "application/vnd.com.example.v1+smile"
+ })
+ public Point getPoint() {
+ return new Point(1, 2);
+ }
}
public static class SimpleResourceApp extends YAMLApplicationWithJackson {
public SimpleResourceApp() { super(new SimpleResource()); }
}
+ public static class MultiMediaTypeResourceApp extends YAMLApplication {
+ public MultiMediaTypeResourceApp() {
+ super(new MultiMediaTypeResource(), new JacksonYAMLProvider(), new JacksonJsonProvider(), new JacksonSmileProvider());
+ }
+ }
+
private final static byte[] UNTOUCHABLE_RESPONSE = new byte[] { 1, 2, 3, 4 };
@Path("/raw")
@@ -93,6 +130,125 @@
}
}
+ public void testCustomMediaTypeWithYamlExtension() throws Exception
+ {
+ final ObjectMapper mapper = new YAMLMapper();
+ Server server = startServer(TEST_PORT, SimpleResourceApp.class);
+ Point p;
+
+ try {
+ final URL url = new URL("http://localhost:" + TEST_PORT + "/point/custom");
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+yaml");
+ InputStream in = conn.getInputStream();
+ p = mapper.readValue(in, Point.class);
+ in.close();
+ } finally {
+ server.stop();
+ }
+ // ensure we got a valid Point
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+ }
+
+ // Tests that if multiple providers are registered, content negotiation works properly across regular and irregular
+ // mime types
+ public void testMultipleMediaTypes() throws Exception
+ {
+ Server server = startServer(TEST_PORT, MultiMediaTypeResourceApp.class);
+ final URL url = new URL("http://localhost:" + TEST_PORT + "/point");
+ Point p;
+
+ final ObjectMapper yamlMapper = new YAMLMapper();
+ final ObjectMapper jsonMapper = new ObjectMapper();
+ final ObjectMapper smileMapper = new ObjectMapper(new SmileFactory());
+
+ try {
+
+ // Standard YAML
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", YAMLMediaTypes.APPLICATION_JACKSON_YAML);
+ InputStream in = conn.getInputStream();
+ assertEquals(YAMLMediaTypes.APPLICATION_JACKSON_YAML, conn.getHeaderField("Content-Type"));
+ p = yamlMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+ // Custom media type YAML
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+yaml");
+ in = conn.getInputStream();
+ assertEquals("application/vnd.com.example.v1+yaml", conn.getHeaderField("Content-Type"));
+ p = yamlMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+
+ // Standard JSON
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", MediaType.APPLICATION_JSON);
+ in = conn.getInputStream();
+ assertEquals(MediaType.APPLICATION_JSON, conn.getHeaderField("Content-Type"));
+ p = jsonMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+ // Custom media type JSON
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+json");
+ in = conn.getInputStream();
+ assertEquals("application/vnd.com.example.v1+json", conn.getHeaderField("Content-Type"));
+ p = jsonMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+ // Standard Smile
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", SmileMediaTypes.APPLICATION_JACKSON_SMILE);
+ in = conn.getInputStream();
+ assertEquals(SmileMediaTypes.APPLICATION_JACKSON_SMILE, conn.getHeaderField("Content-Type"));
+ p = smileMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+ // Custom media type Smile
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "application/vnd.com.example.v1+smile");
+ in = conn.getInputStream();
+ assertEquals("application/vnd.com.example.v1+smile", conn.getHeaderField("Content-Type"));
+ p = smileMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+
+ // If everything is acceptable, YAML should be used because it occurs first in the @Produces annotation
+ conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestProperty("Accept", "*/*");
+ in = conn.getInputStream();
+ assertEquals(YAMLMediaTypes.APPLICATION_JACKSON_YAML, conn.getHeaderField("Content-Type"));
+ p = yamlMapper.readValue(in, Point.class);
+ in.close();
+ assertNotNull(p);
+ assertEquals(1, p.x);
+ assertEquals(2, p.y);
+ } finally {
+ server.stop();
+ }
+
+ }
+
// [Issue#34] Verify that Untouchables act the way as they should
@SuppressWarnings("resource")
public void testUntouchables() throws Exception
diff -Nru jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/jersey/SimpleEndpointTest.java jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/jersey/SimpleEndpointTest.java
--- jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/jersey/SimpleEndpointTest.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/jersey/SimpleEndpointTest.java 2016-11-16 02:14:44.000000000 +0000
@@ -1,7 +1,8 @@
package com.fasterxml.jackson.jaxrs.yaml.jersey;
import com.fasterxml.jackson.jaxrs.yaml.dw.SimpleEndpointTestBase;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+import org.glassfish.jersey.servlet.ServletContainer;
import javax.servlet.Servlet;
diff -Nru jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/TestYAMLVersions.java jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/TestYAMLVersions.java
--- jackson-jaxrs-providers-2.7.3/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/TestYAMLVersions.java 2016-03-17 01:09:34.000000000 +0000
+++ jackson-jaxrs-providers-2.8.5/yaml/src/test/java/com/fasterxml/jackson/jaxrs/yaml/TestYAMLVersions.java 2016-11-16 02:14:44.000000000 +0000
@@ -19,7 +19,7 @@
private void assertVersion(Versioned vers)
{
final Version v = vers.version();
- assertFalse("Should find version information (got "+v+")", v.isUknownVersion());
+ assertFalse("Should find version information (got "+v+")", v.isUnknownVersion());
Version exp = PackageVersion.VERSION;
assertEquals(exp.toFullString(), v.toFullString());
assertEquals(exp, v);