[jackson-jaxrs-providers] 24/162: refactoring
Timo Aaltonen
tjaalton at moszumanska.debian.org
Mon Sep 8 22:16:24 UTC 2014
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 0551d471af63753b9f83afcc3e572a3a8baafdec
Author: Tatu Saloranta <tsaloranta at gmail.com>
Date: Sat Mar 16 11:36:24 2013 -0700
refactoring
---
.../jaxrs/base/JsonMappingExceptionMapper.java | 1 +
.../jaxrs/base/JsonParseExceptionMapper.java | 1 +
.../fasterxml/jackson/jaxrs/base/ProviderBase.java | 25 +-
.../jackson/jaxrs/base/cfg/EndpointConfigBase.java | 13 +
.../jackson/jaxrs/base/util/ClassKey.java | 2 +-
.../jackson/jaxrs/json/JacksonJsonProvider.java | 1 +
.../jackson/jaxrs/json/JsonEndpointConfig.java | 16 +-
.../jackson/jaxrs/json/JsonMapperConfigurator.java | 1 +
.../jaxrs/json/JsonMappingExceptionMapper.java | 1 +
.../jaxrs/json/JsonParseExceptionMapper.java | 1 +
.../jackson/jaxrs/json/TestStreamingOutput.java | 1 +
.../jackson/jaxrs/json/TestUntouchables.java | 1 +
.../jackson/jaxrs/smile/JacksonSmileProvider.java | 2 +
.../jaxrs/smile/JsonMappingExceptionMapper.java | 1 +
.../jaxrs/smile/JsonParseExceptionMapper.java | 1 +
.../jackson/jaxrs/smile/SmileEndpointConfig.java | 19 +
.../jaxrs/smile/SmileMapperConfigurator.java | 2 +
.../jackson/jaxrs/xml/JacksonXMLProvider.java | 557 ++-------------------
.../jaxrs/xml/JsonMappingExceptionMapper.java | 1 +
.../jaxrs/xml/JsonParseExceptionMapper.java | 1 +
.../jackson/jaxrs/xml/XMLEndpointConfig.java | 160 +-----
.../jackson/jaxrs/xml/XMLMapperConfigurator.java | 2 +
.../jackson/jaxrs/xml/TestUntouchables.java | 2 +-
23 files changed, 131 insertions(+), 681 deletions(-)
diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java
index 2e9a060..e03a2a1 100644
--- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java
+++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonMappingExceptionMapper.java
@@ -14,6 +14,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
+ @Override
public Response toResponse(JsonMappingException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java
index 55b0d0d..9a34ae7 100644
--- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java
+++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/JsonParseExceptionMapper.java
@@ -14,6 +14,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
+ @Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
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 61f59ff..9fe0563 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
@@ -309,6 +309,7 @@ public abstract class ProviderBase<
* that container will determine length from actual serialized
* output (if needed).
*/
+ @Override
public long getSize(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
{
/* In general figuring output size requires actual writing; usually not
@@ -328,6 +329,7 @@ public abstract class ProviderBase<
* for type (iff {@link #checkCanSerialize} has been called with
* true argument -- otherwise assumption is there will be a handler)
*/
+ @Override
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
{
if (!hasMatchingMediaType(mediaType)) {
@@ -363,6 +365,7 @@ public abstract class ProviderBase<
/**
* Method that JAX-RS container calls to serialize given value.
*/
+ @Override
public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream)
throws IOException
@@ -453,6 +456,7 @@ public abstract class ProviderBase<
* for type (iff {@link #checkCanDeserialize} has been called with
* true argument -- otherwise assumption is there will be a handler)
*/
+ @Override
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
{
if (!hasMatchingMediaType(mediaType)) {
@@ -489,6 +493,7 @@ public abstract class ProviderBase<
/**
* Method that JAX-RS container calls to deserialize given value.
*/
+ @Override
public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,String> httpHeaders, InputStream entityStream)
throws IOException
{
@@ -507,13 +512,25 @@ public abstract class ProviderBase<
}
}
ObjectReader reader = endpoint.getReader();
-
- JsonParser jp = reader.getFactory().createParser(entityStream);
- if (jp.nextToken() == null) {
- return null;
+ JsonParser jp = _createParser(reader, entityStream);
+ // If null is returned, considered to be empty stream
+ if (jp == null || jp.nextToken() == null) {
+ return null;
}
return reader.withType(genericType).readValue(jp);
}
+
+ /**
+ * Overridable helper method called to create a {@link JsonParser} for reading
+ * contents of given raw {@link InputStream}.
+ * May return null to indicate that Stream is empty; that is, contains no
+ * content.
+ */
+ protected JsonParser _createParser(ObjectReader reader, InputStream rawStream)
+ throws IOException
+ {
+ return reader.getFactory().createParser(rawStream);
+ }
/*
/**********************************************************
diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/cfg/EndpointConfigBase.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/cfg/EndpointConfigBase.java
index da7ec2a..76b56ec 100644
--- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/cfg/EndpointConfigBase.java
+++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/cfg/EndpointConfigBase.java
@@ -162,4 +162,17 @@ public abstract class EndpointConfigBase<THIS extends EndpointConfigBase<THIS>>
*/
public abstract Object modifyBeforeWrite(Object value);
+
+ /*
+ /**********************************************************
+ /* Helper methods
+ /**********************************************************
+ */
+
+ protected static <T> T[] nullIfEmpty(T[] arg) {
+ if (arg == null || arg.length == 0) {
+ return null;
+ }
+ return arg;
+ }
}
diff --git a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/util/ClassKey.java b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/util/ClassKey.java
index 587d48a..1ee6327 100644
--- a/base/src/main/java/com/fasterxml/jackson/jaxrs/base/util/ClassKey.java
+++ b/base/src/main/java/com/fasterxml/jackson/jaxrs/base/util/ClassKey.java
@@ -56,7 +56,7 @@ public final class ClassKey
*/
// Just need to sort by name, ok to collide (unless used in TreeMap/Set!)
- //@Override
+ @Override
public int compareTo(ClassKey other) {
return _className.compareTo(other._className);
}
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 a65d5c8..1aad274 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
@@ -129,6 +129,7 @@ public class JacksonJsonProvider
* Method that will return version information stored in and read from jar
* that contains this class.
*/
+ @Override
public Version version() {
return PackageVersion.VERSION;
}
diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java
index 6475d96..1b0b4e6 100644
--- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java
+++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonEndpointConfig.java
@@ -9,7 +9,6 @@ import com.fasterxml.jackson.databind.util.JSONWrappedObject;
import com.fasterxml.jackson.jaxrs.base.cfg.EndpointConfigBase;
import com.fasterxml.jackson.jaxrs.json.annotation.JSONP;
import com.fasterxml.jackson.jaxrs.json.annotation.JacksonFeatures;
-import com.fasterxml.jackson.jaxrs.json.annotation.JSONP.Def;
/**
* Container class for figuring out annotation-based configuration
@@ -55,7 +54,7 @@ public class JsonEndpointConfig
/* Abstract method impls, overrides
/**********************************************************
*/
-
+
@Override
protected void addAnnotation(Class<? extends Annotation> type,
Annotation annotation, boolean forWriting)
@@ -106,17 +105,4 @@ public class JsonEndpointConfig
}
return value;
}
-
- /*
- /**********************************************************
- /* Helper methods
- /**********************************************************
- */
-
- private static <T> T[] nullIfEmpty(T[] arg) {
- if (arg == null || arg.length == 0) {
- return null;
- }
- return arg;
- }
}
diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMapperConfigurator.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMapperConfigurator.java
index d19ade8..d3824d3 100644
--- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMapperConfigurator.java
+++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMapperConfigurator.java
@@ -73,6 +73,7 @@ public class JsonMapperConfigurator
/**********************************************************
*/
+ @Override
protected AnnotationIntrospector _resolveIntrospectors(Annotations[] annotationsToUse)
{
// Let's ensure there are no dups there first, filter out nulls
diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java
index 7926ac2..a195f93 100644
--- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java
+++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonMappingExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
@Deprecated
@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
+ @Override
public Response toResponse(JsonMappingException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java
index d51b9d8..28e70ff 100644
--- a/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java
+++ b/json/src/main/java/com/fasterxml/jackson/jaxrs/json/JsonParseExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
@Deprecated
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
+ @Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestStreamingOutput.java b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestStreamingOutput.java
index 52aa90d..4d78cf7 100644
--- a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestStreamingOutput.java
+++ b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestStreamingOutput.java
@@ -13,6 +13,7 @@ public class TestStreamingOutput extends JaxrsTestBase
// important: this can trick "canSerialize()" to include it:
public int getFoo() { return 3; }
+ @Override
public void write(OutputStream out) throws IOException {
out.write("OK".getBytes("UTF-8"));
}
diff --git a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestUntouchables.java b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestUntouchables.java
index 1a180cb..ab741bf 100644
--- a/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestUntouchables.java
+++ b/json/src/test/java/com/fasterxml/jackson/jaxrs/json/TestUntouchables.java
@@ -27,6 +27,7 @@ public class TestUntouchables
}
static class StreamingSubType implements StreamingOutput {
+ @Override
public void write(OutputStream output) { }
}
diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java
index 06e92da..74ea46c 100644
--- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java
+++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JacksonSmileProvider.java
@@ -118,6 +118,7 @@ extends ProviderBase<JacksonSmileProvider,
* Method that will return version information stored in and read from jar
* that contains this class.
*/
+ @Override
public Version version() {
return PackageVersion.VERSION;
}
@@ -184,6 +185,7 @@ extends ProviderBase<JacksonSmileProvider,
* not used by this method,
* but will be passed to {@link ContextResolver} as is.
*/
+ @Override
protected ObjectMapper _locateMapperViaProvider(Class<?> type, MediaType mediaType)
{
if (_providers != null) {
diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonMappingExceptionMapper.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonMappingExceptionMapper.java
index d03d9a3..b1bbbd0 100644
--- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonMappingExceptionMapper.java
+++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonMappingExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
+ @Override
public Response toResponse(JsonMappingException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonParseExceptionMapper.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonParseExceptionMapper.java
index c3037ee..1787f99 100644
--- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonParseExceptionMapper.java
+++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/JsonParseExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
+ @Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java
index 29c8644..35a1bb7 100644
--- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java
+++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileEndpointConfig.java
@@ -4,6 +4,7 @@ import java.lang.annotation.Annotation;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.jaxrs.base.cfg.EndpointConfigBase;
+import com.fasterxml.jackson.jaxrs.smile.annotation.JacksonFeatures;
/**
* Container class for figuring out annotation-based configuration
@@ -37,6 +38,24 @@ public class SmileEndpointConfig
}
@Override
+ protected void addAnnotation(Class<? extends Annotation> type,
+ Annotation annotation, boolean forWriting)
+ {
+ if (type == JacksonFeatures.class) {
+ JacksonFeatures feats = (JacksonFeatures) annotation;
+ if (forWriting) {
+ _serEnable = nullIfEmpty(feats.serializationEnable());
+ _serDisable = nullIfEmpty(feats.serializationDisable());
+ } else {
+ _deserEnable = nullIfEmpty(feats.deserializationEnable());
+ _deserDisable = nullIfEmpty(feats.deserializationDisable());
+ }
+ } else {
+ super.addAnnotation(type, annotation, forWriting);
+ }
+ }
+
+ @Override
public Object modifyBeforeWrite(Object value) {
// nothing to add
return value;
diff --git a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileMapperConfigurator.java b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileMapperConfigurator.java
index 0807876..70d9bce 100644
--- a/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileMapperConfigurator.java
+++ b/smile/src/main/java/com/fasterxml/jackson/jaxrs/smile/SmileMapperConfigurator.java
@@ -32,6 +32,7 @@ public class SmileMapperConfigurator
/**
* Method that locates, configures and returns {@link ObjectMapper} to use
*/
+ @Override
public synchronized ObjectMapper getConfiguredMapper() {
/* important: should NOT call mapper(); needs to return null
* if no instance has been passed or constructed
@@ -39,6 +40,7 @@ public class SmileMapperConfigurator
return _mapper;
}
+ @Override
public synchronized ObjectMapper getDefaultMapper() {
if (_defaultMapper == null) {
_defaultMapper = new ObjectMapper(new SmileFactory());
diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java
index 6d21a7f..e996367 100644
--- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java
+++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JacksonXMLProvider.java
@@ -2,25 +2,17 @@ package com.fasterxml.jackson.jaxrs.xml;
import java.io.*;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.*;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.ext.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
-import com.fasterxml.jackson.databind.util.LRUMap;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-import com.fasterxml.jackson.jaxrs.base.util.AnnotationBundleKey;
-import com.fasterxml.jackson.jaxrs.base.util.ClassKey;
-
+import com.fasterxml.jackson.jaxrs.base.ProviderBase;
/**
* Basic implementation of JAX-RS abstractions ({@link MessageBodyReader},
@@ -56,10 +48,11 @@ import com.fasterxml.jackson.jaxrs.base.util.ClassKey;
@Consumes({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
@Produces({MediaType.TEXT_XML, MediaType.APPLICATION_XML})
public class JacksonXMLProvider
- implements
- MessageBodyReader<Object>,
- MessageBodyWriter<Object>,
- Versioned
+ extends ProviderBase<JacksonXMLProvider,
+ XmlMapper, Annotations,
+ XMLEndpointConfig,
+ XMLMapperConfigurator
+>
{
/**
* Default annotation sets to use, if not explicitly defined during
@@ -69,91 +62,6 @@ public class JacksonXMLProvider
public final static Annotations[] BASIC_ANNOTATIONS = {
Annotations.JACKSON
};
-
- /**
- * Looks like we need to worry about accidental
- * data binding for types we shouldn't be handling. This is
- * probably not a very good way to do it, but let's start by
- * blacklisting things we are not to handle.
- *<p>
- * (why ClassKey? since plain old Class has no hashCode() defined,
- * lookups are painfully slow)
- */
- public final static HashSet<ClassKey> _untouchables = new HashSet<ClassKey>();
- static {
- // First, I/O things (direct matches)
- _untouchables.add(new ClassKey(java.io.InputStream.class));
- _untouchables.add(new ClassKey(java.io.Reader.class));
- _untouchables.add(new ClassKey(java.io.OutputStream.class));
- _untouchables.add(new ClassKey(java.io.Writer.class));
-
- // then some primitive types
- _untouchables.add(new ClassKey(char[].class));
-
- /* 27-Apr-2012, tatu: Grrrh. Looks like we need to consider these
- * untouchables, still, to allow users to access "raw" responses
- * if and as necessary. Latter is unfortunate in a way as it
- * prevents use of automatic base64 decoding but...
- */
- _untouchables.add(new ClassKey(String.class));
- _untouchables.add(new ClassKey(byte[].class));
-
- // Then core JAX-RS things
- _untouchables.add(new ClassKey(StreamingOutput.class));
- _untouchables.add(new ClassKey(Response.class));
- }
-
- /**
- * These are classes that we never use for reading
- * (never try to deserialize instances of these types).
- */
- public final static Class<?>[] _unreadableClasses = new Class<?>[] {
- InputStream.class, Reader.class
- };
-
- /**
- * These are classes that we never use for writing
- * (never try to serialize instances of these types).
- */
- public final static Class<?>[] _unwritableClasses = new Class<?>[] {
- OutputStream.class, Writer.class,
- StreamingOutput.class, Response.class
- };
-
- /*
- /**********************************************************
- /* Bit of caching
- /**********************************************************
- */
-
- /**
- * Cache for resolved endpoint configurations when reading XML
- */
- protected final LRUMap<AnnotationBundleKey, XMLEndpointConfig> _readers
- = new LRUMap<AnnotationBundleKey, XMLEndpointConfig>(16, 120);
-
- /**
- * Cache for resolved endpoint configurations when writing XML
- */
- protected final LRUMap<AnnotationBundleKey, XMLEndpointConfig> _writers
- = new LRUMap<AnnotationBundleKey, XMLEndpointConfig>(16, 120);
-
- /*
- /**********************************************************
- /* General configuration
- /**********************************************************
- */
-
- /**
- * Helper object used for encapsulating configuration aspects
- * of {@link XmlMapper}
- */
- protected final XMLMapperConfigurator _mapperConfig;
-
- /**
- * Set of types (classes) that provider should ignore for data binding
- */
- protected HashSet<ClassKey> _cfgCustomUntouchables;
/*
/**********************************************************
@@ -171,28 +79,6 @@ public class JacksonXMLProvider
/*
/**********************************************************
- /* Configuration
- /**********************************************************
- */
-
- /**
- * Whether we want to actually check that Jackson has
- * a serializer for given type. Since this should generally
- * be the case (due to auto-discovery) and since the call
- * to check availability can be bit expensive, defaults to false.
- */
- protected boolean _cfgCheckCanSerialize = false;
-
- /**
- * Whether we want to actually check that Jackson has
- * a deserializer for given type. Since this should generally
- * be the case (due to auto-discovery) and since the call
- * to check availability can be bit expensive, defaults to false.
- */
- protected boolean _cfgCheckCanDeserialize = false;
-
- /*
- /**********************************************************
/* Construction
/**********************************************************
*/
@@ -201,8 +87,7 @@ public class JacksonXMLProvider
* Default constructor, usually used when provider is automatically
* configured to be used with JAX-RS implementation.
*/
- public JacksonXMLProvider()
- {
+ public JacksonXMLProvider() {
this(null, BASIC_ANNOTATIONS);
}
@@ -215,8 +100,7 @@ public class JacksonXMLProvider
this(null, annotationsToUse);
}
- public JacksonXMLProvider(XmlMapper mapper)
- {
+ public JacksonXMLProvider(XmlMapper mapper) {
this(mapper, BASIC_ANNOTATIONS);
}
@@ -228,328 +112,42 @@ public class JacksonXMLProvider
* @param annotationsToUse Sets of annotations (Jackson, JAXB) that provider should
* support
*/
- public JacksonXMLProvider(XmlMapper mapper, Annotations[] annotationsToUse)
- {
- _mapperConfig = new XMLMapperConfigurator(mapper, annotationsToUse);
+ public JacksonXMLProvider(XmlMapper mapper, Annotations[] annotationsToUse) {
+ super(new XMLMapperConfigurator(mapper, annotationsToUse));
}
/**
* Method that will return version information stored in and read from jar
* that contains this class.
*/
+ @Override
public Version version() {
return PackageVersion.VERSION;
}
-
- /*
- /**********************************************************
- /* Configuring
- /**********************************************************
- */
-
- /**
- * Method for defining whether actual detection for existence of
- * a deserializer for type should be done when {@link #isReadable}
- * is called.
- */
- public void checkCanDeserialize(boolean state) { _cfgCheckCanDeserialize = state; }
-
- /**
- * Method for defining whether actual detection for existence of
- * a serializer for type should be done when {@link #isWriteable}
- * is called.
- */
- public void checkCanSerialize(boolean state) { _cfgCheckCanSerialize = state; }
-
- /**
- * Method for configuring which annotation sets to use (including none).
- * Annotation sets are defined in order decreasing precedence; that is,
- * first one has the priority over following ones.
- *
- * @param annotationsToUse Ordered list of annotation sets to use; if null,
- * default
- */
- public void setAnnotationsToUse(Annotations[] annotationsToUse) {
- _mapperConfig.setAnnotationsToUse(annotationsToUse);
- }
-
- /**
- * Method that can be used to directly define {@link XmlMapper} to use
- * for serialization and deserialization; if null, will use the standard
- * provider discovery from context instead. Default setting is null.
- */
- public void setMapper(XmlMapper m) {
- _mapperConfig.setMapper(m);
- }
-
- public JacksonXMLProvider configure(DeserializationFeature f, boolean state) {
- _mapperConfig.configure(f, state);
- return this;
- }
-
- public JacksonXMLProvider configure(SerializationFeature f, boolean state) {
- _mapperConfig.configure(f, state);
- return this;
- }
-
- public JacksonXMLProvider configure(JsonParser.Feature f, boolean state) {
- _mapperConfig.configure(f, state);
- return this;
- }
-
- public JacksonXMLProvider configure(JsonGenerator.Feature f, boolean state) {
- _mapperConfig.configure(f, state);
- return this;
- }
- public JacksonXMLProvider enable(DeserializationFeature f, boolean state) {
- _mapperConfig.configure(f, true);
- return this;
- }
-
- public JacksonXMLProvider enable(SerializationFeature f, boolean state) {
- _mapperConfig.configure(f, true);
- return this;
- }
-
- public JacksonXMLProvider enable(JsonParser.Feature f, boolean state) {
- _mapperConfig.configure(f, true);
- return this;
- }
-
- public JacksonXMLProvider enable(JsonGenerator.Feature f, boolean state) {
- _mapperConfig.configure(f, true);
- return this;
- }
-
- public JacksonXMLProvider disable(DeserializationFeature f, boolean state) {
- _mapperConfig.configure(f, false);
- return this;
- }
-
- public JacksonXMLProvider disable(SerializationFeature f, boolean state) {
- _mapperConfig.configure(f, false);
- return this;
- }
-
- public JacksonXMLProvider disable(JsonParser.Feature f, boolean state) {
- _mapperConfig.configure(f, false);
- return this;
- }
-
- public JacksonXMLProvider disable(JsonGenerator.Feature f, boolean state) {
- _mapperConfig.configure(f, false);
- return this;
- }
-
- /**
- * Method for marking specified type as "untouchable", meaning that provider
- * will not try to read or write values of this type (or its subtypes).
- *
- * @param type Type to consider untouchable; can be any kind of class,
- * including abstract class or interface. No instance of this type
- * (including subtypes, i.e. types assignable to this type) will
- * be read or written by provider
- */
- public void addUntouchable(Class<?> type)
- {
- if (_cfgCustomUntouchables == null) {
- _cfgCustomUntouchables = new HashSet<ClassKey>();
- }
- _cfgCustomUntouchables.add(new ClassKey(type));
- }
-
/*
/**********************************************************
- /* MessageBodyReader impl
+ /* Abstract method impls
/**********************************************************
*/
- /**
- * Method that JAX-RS container calls to try to check whether
- * values of given type (and media type) can be deserialized by
- * this provider.
- * Implementation will first check that expected media type is
- * an XML type (via call to {@link #isXMLType}; then verify
- * that type is not one of "untouchable" types (types we will never
- * automatically handle), and finally that there is a deserializer
- * for type (iff {@link #checkCanDeserialize} has been called with
- * true argument -- otherwise assumption is there will be a handler)
- */
- public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
- {
- if (!isXMLType(mediaType) || !isReadableType(type)) {
- return false;
- }
- // if we really want to verify that we can serialize, we'll check:
- if (_cfgCheckCanSerialize) {
- XmlMapper mapper = locateMapper(type, mediaType);
- if (!mapper.canDeserialize(mapper.constructType(type))) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Method that JAX-RS container calls to deserialize given value.
- */
- public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,String> httpHeaders, InputStream entityStream)
- throws IOException
- {
- AnnotationBundleKey key = new AnnotationBundleKey(annotations);
- XMLEndpointConfig endpoint;
- synchronized (_readers) {
- endpoint = _readers.get(key);
- }
- // not yet resolved (or not cached any more)? Resolve!
- if (endpoint == null) {
- XmlMapper mapper = locateMapper(type, mediaType);
- endpoint = XMLEndpointConfig.forReading(mapper, annotations);
- // and cache for future reuse
- synchronized (_readers) {
- _readers.put(key.immutableKey(), endpoint);
- }
- }
- ObjectReader reader = endpoint.getReader();
- // Fix for [Issue#4]: note, can not try to advance parser, XML parser complains
- PushbackInputStream wrappedStream = new PushbackInputStream(entityStream);
- int firstByte = wrappedStream.read();
- if (firstByte == -1) {
- return null;
- }
- wrappedStream.unread(firstByte);
- JsonParser jp = reader.getFactory().createParser(wrappedStream);
- return reader.withType(genericType).readValue(jp);
- }
-
- /*
- /**********************************************************
- /* MessageBodyWriter impl
- /**********************************************************
- */
-
- /**
- * Method that JAX-RS container calls to try to figure out
- * serialized length of given value. Since computation of
- * this length is about as expensive as serialization itself,
- * implementation will return -1 to denote "not known", so
- * that container will determine length from actual serialized
- * output (if needed).
- */
- public long getSize(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
- {
- /* In general figuring output size requires actual writing; usually not
- * worth it to write everything twice.
- */
- return -1;
+ @Override
+ protected XMLEndpointConfig _configForReading(XmlMapper mapper, Annotation[] annotations) {
+ return XMLEndpointConfig.forReading(mapper, annotations);
}
- /**
- * Method that JAX-RS container calls to try to check whether
- * given value (of specified type) can be serialized by
- * this provider.
- * Implementation will first check that expected media type is
- * an XML type (via call to {@link #isXMLType}; then verify
- * that type is not one of "untouchable" types (types we will never
- * automatically handle), and finally that there is a serializer
- * for type (iff {@link #checkCanSerialize} has been called with
- * true argument -- otherwise assumption is there will be a handler)
- */
- public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType)
- {
- if (!isXMLType(mediaType) || !isWritableType(type)) {
- return false;
- }
- // Also: if we really want to verify that we can deserialize, we'll check:
- if (_cfgCheckCanSerialize) {
- if (!locateMapper(type, mediaType).canSerialize(type)) {
- return false;
- }
- }
- return true;
+ @Override
+ protected XMLEndpointConfig _configForWriting(XmlMapper mapper, Annotation[] annotations) {
+ return XMLEndpointConfig.forWriting(mapper, annotations);
}
-
- /**
- * Method that JAX-RS container calls to serialize given value.
- */
- public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
- MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream)
- throws IOException
- {
- AnnotationBundleKey key = new AnnotationBundleKey(annotations);
- XMLEndpointConfig endpoint;
- synchronized (_writers) {
- endpoint = _writers.get(key);
- }
- // not yet resolved (or not cached any more)? Resolve!
- if (endpoint == null) {
- XmlMapper mapper = locateMapper(type, mediaType);
- endpoint = XMLEndpointConfig.forWriting(mapper, annotations);
- // and cache for future reuse
- synchronized (_writers) {
- _writers.put(key.immutableKey(), endpoint);
- }
- }
-
- ObjectWriter writer = endpoint.getWriter();
-
- /* 27-Feb-2009, tatu: Where can we find desired encoding? Within
- * HTTP headers?
- */
- JsonEncoding enc = findEncoding(mediaType, httpHeaders);
- JsonGenerator jg = writer.getFactory().createGenerator(entityStream, enc);
-
- // Want indentation?
- if (writer.isEnabled(SerializationFeature.INDENT_OUTPUT)) {
- jg.useDefaultPrettyPrinter();
- }
- // 04-Mar-2010, tatu: How about type we were given? (if any)
- JavaType rootType = 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'
- /* 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.
- */
- rootType = writer.getTypeFactory().constructType(genericType);
- /* 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.
- */
- if (rootType.getRawClass() == Object.class) {
- rootType = null;
- }
- }
- }
- // Most of the configuration now handled through EndpointConfig, ObjectWriter
- // but we may need to force root type:
- if (rootType != null) {
- writer = writer.withType(rootType);
- }
- writer.writeValue(jg, value);
- }
-
+
/**
- * Helper method to use for determining desired output encoding.
- * For now, will always just use UTF-8...
+ * @deprecated Since 2.2 use {@link #hasMatchingMediaType(MediaType)} instead
*/
- protected JsonEncoding findEncoding(MediaType mediaType, MultivaluedMap<String,Object> httpHeaders)
- {
- return JsonEncoding.UTF8;
+ @Deprecated
+ protected boolean isXMLType(MediaType mediaType) {
+ return hasMatchingMediaType(mediaType);
}
-
- /*
- /**********************************************************
- /* Overridable helper methods
- /**********************************************************
- */
/**
* Helper method used to check whether given media type
@@ -558,7 +156,8 @@ public class JacksonXMLProvider
* {@link MediaType#getSubtype} returns "xml" or something
* ending with "+xml".
*/
- protected boolean isXMLType(MediaType mediaType)
+ @Override
+ protected boolean hasMatchingMediaType(MediaType mediaType)
{
/* As suggested by Stephen D, there are 2 ways to check: either
* being as inclusive as possible (if subtype is "xml"), or
@@ -576,57 +175,6 @@ public class JacksonXMLProvider
*/
return true;
}
-
- /**
- * Helper method called to see if given type is readable, that is,
- * acceptable Java type to bind from XML
- */
- protected boolean isReadableType(Class<?> type)
- {
- /* Ok: looks like we must weed out some core types here; ones that
- * make no sense to try to bind from XML
- */
- if (_untouchables.contains(new ClassKey(type))) {
- return false;
- }
- // and there are some other abstract/interface types to exclude too:
- for (Class<?> cls : _unreadableClasses) {
- if (cls.isAssignableFrom(type)) {
- return false;
- }
- }
- // as well as possible custom exclusions
- if (_containedIn(type, _cfgCustomUntouchables)) {
- return false;
- }
- return true;
- }
-
-
- /**
- * Helper method called to see if given type is writable, that is,
- * acceptable Java type to write out as XML.
- */
- protected boolean isWritableType(Class<?> type)
- {
- /* Ok: looks like we must weed out some core types here; ones that
- * make no sense to try to write out as XML:
- */
- if (_untouchables.contains(new ClassKey(type))) {
- return false;
- }
- // but some are interface/abstract classes, so
- for (Class<?> cls : _unwritableClasses) {
- if (cls.isAssignableFrom(type)) {
- return false;
- }
- }
- // and finally, may have additional custom types to exclude
- if (_containedIn(type, _cfgCustomUntouchables)) {
- return false;
- }
- return true;
- }
/**
* Method called to locate {@link XmlMapper} to use for serialization
@@ -648,7 +196,8 @@ public class JacksonXMLProvider
* not used by this method,
* but will be passed to {@link ContextResolver} as is.
*/
- public XmlMapper locateMapper(Class<?> type, MediaType mediaType)
+ @Override
+ public XmlMapper _locateMapperViaProvider(Class<?> type, MediaType mediaType)
{
// First: were we configured with a specific instance?
XmlMapper m = _mapperConfig.getConfiguredMapper();
@@ -678,51 +227,21 @@ public class JacksonXMLProvider
/*
/**********************************************************
- /* Private/sub-class helper methods
+ /* Overrides
/**********************************************************
*/
- protected static boolean _containedIn(Class<?> mainType, HashSet<ClassKey> set)
- {
- if (set != null) {
- ClassKey key = new ClassKey(mainType);
- // First: type itself?
- if (set.contains(key)) return true;
- // Then supertypes (note: will not contain Object.class)
- for (Class<?> cls : findSuperTypes(mainType, null)) {
- key.reset(cls);
- if (set.contains(key)) return true;
- }
- }
- return false;
- }
-
- private static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore)
- {
- return findSuperTypes(cls, endBefore, new ArrayList<Class<?>>(8));
- }
-
- private static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore, List<Class<?>> result)
- {
- _addSuperTypes(cls, endBefore, result, false);
- return result;
- }
-
- private static void _addSuperTypes(Class<?> cls, Class<?> endBefore, Collection<Class<?>> result, boolean addClassItself)
+ @Override
+ protected JsonParser _createParser(ObjectReader reader, InputStream rawStream)
+ throws IOException
{
- if (cls == endBefore || cls == null || cls == Object.class) {
- return;
- }
- if (addClassItself) {
- if (result.contains(cls)) { // already added, no need to check supers
- return;
- }
- result.add(cls);
- }
- for (Class<?> intCls : cls.getInterfaces()) {
- _addSuperTypes(intCls, endBefore, result, true);
+ // Fix for [Issue#4]: note, can not try to advance parser, XML parser complains
+ PushbackInputStream wrappedStream = new PushbackInputStream(rawStream);
+ int firstByte = wrappedStream.read();
+ if (firstByte == -1) {
+ return null;
}
- _addSuperTypes(cls.getSuperclass(), endBefore, result, true);
+ wrappedStream.unread(firstByte);
+ return reader.getFactory().createParser(wrappedStream);
}
-
}
diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonMappingExceptionMapper.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonMappingExceptionMapper.java
index 83c26eb..7a9316f 100644
--- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonMappingExceptionMapper.java
+++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonMappingExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
+ @Override
public Response toResponse(JsonMappingException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonParseExceptionMapper.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonParseExceptionMapper.java
index 784ea3a..1623924 100644
--- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonParseExceptionMapper.java
+++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/JsonParseExceptionMapper.java
@@ -12,6 +12,7 @@ import javax.ws.rs.ext.Provider;
*/
@Provider
public class JsonParseExceptionMapper implements ExceptionMapper<JsonParseException> {
+ @Override
public Response toResponse(JsonParseException exception) {
return Response.status(Response.Status.BAD_REQUEST).entity(exception.getMessage()).type("text/plain").build();
}
diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java
index ee23c35..32534eb 100644
--- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java
+++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLEndpointConfig.java
@@ -2,11 +2,9 @@ package com.fasterxml.jackson.jaxrs.xml;
import java.lang.annotation.Annotation;
-import com.fasterxml.jackson.annotation.*;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
+
+import com.fasterxml.jackson.jaxrs.base.cfg.EndpointConfigBase;
import com.fasterxml.jackson.jaxrs.xml.annotation.JacksonFeatures;
/**
@@ -14,27 +12,8 @@ import com.fasterxml.jackson.jaxrs.xml.annotation.JacksonFeatures;
* for JAX-RS end points.
*/
public class XMLEndpointConfig
+ extends EndpointConfigBase<XMLEndpointConfig>
{
- // // General configuration
-
- protected Class<?> _activeView;
-
- protected String _rootName;
-
- // // Deserialization-only config
-
- protected DeserializationFeature[] _deserEnable;
- protected DeserializationFeature[] _deserDisable;
-
- protected ObjectReader _reader;
-
- // // Serialization-only config
-
- protected SerializationFeature[] _serEnable;
- protected SerializationFeature[] _serDisable;
-
- protected ObjectWriter _writer;
-
/*
/**********************************************************
/* Construction
@@ -58,129 +37,28 @@ public class XMLEndpointConfig
.initWriter(mapper)
;
}
-
- protected XMLEndpointConfig add(Annotation[] annotations, boolean forWriting)
+
+ @Override
+ protected void addAnnotation(Class<? extends Annotation> type,
+ Annotation annotation, boolean forWriting)
{
- // Same as [issue-10] with JSON provider; must check for null:
- if (annotations != null) {
- for (Annotation annotation : annotations) {
- Class<?> type = annotation.annotationType();
- if (type == JsonView.class) {
- // Can only use one view; but if multiple defined, use first (no exception)
- Class<?>[] views = ((JsonView) annotation).value();
- _activeView = (views.length > 0) ? views[0] : null;
- } else if (type == JsonRootName.class) {
- _rootName = ((JsonRootName) annotation).value();
- } else if (type == JacksonFeatures.class) {
- JacksonFeatures feats = (JacksonFeatures) annotation;
- if (forWriting) {
- _serEnable = nullIfEmpty(feats.serializationEnable());
- _serDisable = nullIfEmpty(feats.serializationDisable());
- } else {
- _deserEnable = nullIfEmpty(feats.deserializationEnable());
- _deserDisable = nullIfEmpty(feats.deserializationDisable());
- }
- } else if (type == JacksonAnnotationsInside.class) {
- // skip; processed below (in parent), so encountering here is of no use
+ if (type == JacksonFeatures.class) {
+ JacksonFeatures feats = (JacksonFeatures) annotation;
+ if (forWriting) {
+ _serEnable = nullIfEmpty(feats.serializationEnable());
+ _serDisable = nullIfEmpty(feats.serializationDisable());
} else {
- // For all unrecognized types, check meta-annotation(s) to see if they are bundles
- JacksonAnnotationsInside inside = type.getAnnotation(JacksonAnnotationsInside.class);
- if (inside != null) {
- add(type.getAnnotations(), forWriting);
- }
+ _deserEnable = nullIfEmpty(feats.deserializationEnable());
+ _deserDisable = nullIfEmpty(feats.deserializationDisable());
}
- }
- }
- return this;
- }
-
- protected XMLEndpointConfig initReader(ObjectMapper mapper)
- {
- // first common config
- if (_activeView != null) {
- _reader = mapper.readerWithView(_activeView);
- } else {
- _reader = mapper.reader();
- }
-
- if (_rootName != null) {
- _reader = _reader.withRootName(_rootName);
- }
- // Then deser features
- if (_deserEnable != null) {
- _reader = _reader.withFeatures(_deserEnable);
- }
- if (_deserDisable != null) {
- _reader = _reader.withoutFeatures(_deserDisable);
- }
- /* Important: we are NOT to close the underlying stream after
- * mapping, so we need to instruct parser:
- */
- _reader.getFactory().disable(JsonParser.Feature.AUTO_CLOSE_SOURCE);
-
- return this;
- }
-
- protected XMLEndpointConfig initWriter(ObjectMapper mapper)
- {
- // first common config
- if (_activeView != null) {
- _writer = mapper.writerWithView(_activeView);
} else {
- _writer = mapper.writer();
- }
- if (_rootName != null) {
- _writer = _writer.withRootName(_rootName);
- }
- // Then features
- if (_serEnable != null) {
- _writer = _writer.withFeatures(_serEnable);
- }
- if (_serDisable != null) {
- _writer = _writer.withoutFeatures(_serDisable);
- }
- // then others
-
- // Finally: couple of features we always set
-
- /* Important: we are NOT to close the underlying stream after
- * mapping, so we need to instruct parser:
- */
- _writer.getFactory().disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
-
- return this;
- }
-
- /*
- /**********************************************************
- /* Accessors
- /**********************************************************
- */
-
- public ObjectReader getReader() {
- if (_reader == null) { // sanity check, should never happen
- throw new IllegalStateException();
- }
- return _reader;
- }
-
- public ObjectWriter getWriter() {
- if (_writer == null) { // sanity check, should never happen
- throw new IllegalStateException();
+ super.addAnnotation(type, annotation, forWriting);
}
- return _writer;
}
- /*
- /**********************************************************
- /* Helper methods
- /**********************************************************
- */
-
- private static <T> T[] nullIfEmpty(T[] arg) {
- if (arg == null || arg.length == 0) {
- return null;
- }
- return arg;
+ @Override
+ public Object modifyBeforeWrite(Object value) {
+ // nothing to add
+ return value;
}
}
diff --git a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLMapperConfigurator.java b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLMapperConfigurator.java
index 3d5dbff..ee5cdce 100644
--- a/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLMapperConfigurator.java
+++ b/xml/src/main/java/com/fasterxml/jackson/jaxrs/xml/XMLMapperConfigurator.java
@@ -34,6 +34,7 @@ public class XMLMapperConfigurator
/**
* Method that locates, configures and returns {@link XmlMapper} to use
*/
+ @Override
public synchronized XmlMapper getConfiguredMapper() {
/* important: should NOT call mapper(); needs to return null
* if no instance has been passed or constructed
@@ -41,6 +42,7 @@ public class XMLMapperConfigurator
return _mapper;
}
+ @Override
public synchronized XmlMapper getDefaultMapper()
{
if (_defaultMapper == null) {
diff --git a/xml/src/test/java/com/fasterxml/jackson/jaxrs/xml/TestUntouchables.java b/xml/src/test/java/com/fasterxml/jackson/jaxrs/xml/TestUntouchables.java
index dcad7c3..87aac96 100644
--- a/xml/src/test/java/com/fasterxml/jackson/jaxrs/xml/TestUntouchables.java
+++ b/xml/src/test/java/com/fasterxml/jackson/jaxrs/xml/TestUntouchables.java
@@ -23,7 +23,7 @@ public class TestUntouchables
// Some users of JacksonJsonProvider override this method;
// changing to "private" would regress them.
@Override
- protected boolean isXMLType(MediaType mediaType) { return super.isXMLType(mediaType); }
+ protected boolean hasMatchingMediaType(MediaType mediaType) { return super.hasMatchingMediaType(mediaType); }
}
/*
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jackson-jaxrs-providers.git
More information about the pkg-java-commits
mailing list