public abstract class ProviderBase<THIS extends ProviderBase<THIS,MAPPER,EP_CONFIG,MAPPER_CONFIG>,MAPPER extends com.fasterxml.jackson.databind.ObjectMapper,EP_CONFIG extends EndpointConfigBase<EP_CONFIG>,MAPPER_CONFIG extends MapperConfiguratorBase<MAPPER_CONFIG,MAPPER>> extends Object implements javax.ws.rs.ext.MessageBodyReader<Object>, javax.ws.rs.ext.MessageBodyWriter<Object>, com.fasterxml.jackson.core.Versioned
Modifier and Type | Field and Description |
---|---|
protected boolean |
_cfgCheckCanDeserialize
Whether we want to actually check that Jackson has
a deserializer for given type.
|
protected boolean |
_cfgCheckCanSerialize
Whether we want to actually check that Jackson has
a serializer for given type.
|
protected HashMap<ClassKey,Boolean> |
_cfgCustomUntouchables
Map that contains overrides to default list of untouchable
types:
true meaning that entry is untouchable,
false that is is not. |
protected MAPPER_CONFIG |
_mapperConfig
Helper object used for encapsulating configuration aspects
of
ObjectMapper |
protected com.fasterxml.jackson.databind.util.LRUMap<AnnotationBundleKey,EP_CONFIG> |
_readers
Cache for resolved endpoint configurations when reading JSON data
|
static Class<?>[] |
_unreadableClasses |
static HashSet<ClassKey> |
_untouchables |
static Class<?>[] |
_unwritableClasses |
protected com.fasterxml.jackson.databind.util.LRUMap<AnnotationBundleKey,EP_CONFIG> |
_writers
Cache for resolved endpoint configurations when writing JSON data
|
static Class<?>[] |
DEFAULT_UNREADABLES
These are classes that we never use for reading
(never try to deserialize instances of these types).
|
protected static HashSet<ClassKey> |
DEFAULT_UNTOUCHABLES
Looks like we need to worry about accidental
data binding for types we shouldn't be handling.
|
static Class<?>[] |
DEFAULT_UNWRITABLES
These are classes that we never use for writing
(never try to serialize instances of these types).
|
Modifier | Constructor and Description |
---|---|
protected |
ProviderBase(MAPPER_CONFIG mconfig) |
Modifier and Type | Method and Description |
---|---|
protected static void |
_addSuperTypes(Class<?> cls,
Class<?> endBefore,
Collection<Class<?>> result,
boolean addClassItself) |
protected abstract EP_CONFIG |
_configForReading(MAPPER mapper,
Annotation[] annotations) |
protected abstract EP_CONFIG |
_configForWriting(MAPPER mapper,
Annotation[] annotations) |
protected static boolean |
_containedIn(Class<?> mainType,
HashSet<ClassKey> set) |
protected com.fasterxml.jackson.core.JsonParser |
_createParser(com.fasterxml.jackson.databind.ObjectReader reader,
InputStream rawStream)
Overridable helper method called to create a
JsonParser for reading
contents of given raw InputStream . |
protected Boolean |
_findCustomUntouchable(Class<?> mainType) |
protected boolean |
_isSpecialReadable(Class<?> type)
Overridable helper method used to allow handling of somewhat special
types for reading
|
protected abstract MAPPER |
_locateMapperViaProvider(Class<?> type,
javax.ws.rs.core.MediaType mediaType) |
void |
addUntouchable(Class<?> type)
Method for marking specified type as "untouchable", meaning that provider
will not try to read or write values of this type (or its subtypes).
|
void |
checkCanDeserialize(boolean state)
Method for defining whether actual detection for existence of
a deserializer for type should be done when
isReadable(java.lang.Class<?>, java.lang.reflect.Type, java.lang.annotation.Annotation[], javax.ws.rs.core.MediaType)
is called. |
void |
checkCanSerialize(boolean state)
Method for defining whether actual detection for existence of
a serializer for type should be done when
isWriteable(java.lang.Class<?>, java.lang.reflect.Type, java.lang.annotation.Annotation[], javax.ws.rs.core.MediaType)
is called. |
THIS |
configure(com.fasterxml.jackson.databind.DeserializationFeature f,
boolean state) |
THIS |
configure(com.fasterxml.jackson.core.JsonGenerator.Feature f,
boolean state) |
THIS |
configure(com.fasterxml.jackson.core.JsonParser.Feature f,
boolean state) |
THIS |
configure(com.fasterxml.jackson.databind.SerializationFeature f,
boolean state) |
THIS |
disable(com.fasterxml.jackson.databind.DeserializationFeature f,
boolean state) |
THIS |
disable(com.fasterxml.jackson.core.JsonGenerator.Feature f,
boolean state) |
THIS |
disable(com.fasterxml.jackson.core.JsonParser.Feature f,
boolean state) |
THIS |
disable(com.fasterxml.jackson.databind.SerializationFeature f,
boolean state) |
THIS |
enable(com.fasterxml.jackson.databind.DeserializationFeature f,
boolean state) |
THIS |
enable(com.fasterxml.jackson.core.JsonGenerator.Feature f,
boolean state) |
THIS |
enable(com.fasterxml.jackson.core.JsonParser.Feature f,
boolean state) |
THIS |
enable(com.fasterxml.jackson.databind.SerializationFeature f,
boolean state) |
protected com.fasterxml.jackson.core.JsonEncoding |
findEncoding(javax.ws.rs.core.MediaType mediaType,
javax.ws.rs.core.MultivaluedMap<String,Object> httpHeaders)
Helper method to use for determining desired output encoding.
|
protected static List<Class<?>> |
findSuperTypes(Class<?> cls,
Class<?> endBefore) |
protected static List<Class<?>> |
findSuperTypes(Class<?> cls,
Class<?> endBefore,
List<Class<?>> result) |
long |
getSize(Object value,
Class<?> type,
Type genericType,
Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType)
Method that JAX-RS container calls to try to figure out
serialized length of given value.
|
protected abstract boolean |
hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)
Helper method used to check whether given media type
is JSON type or sub type.
|
boolean |
isReadable(Class<?> type,
Type genericType,
Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType)
Method that JAX-RS container calls to try to check whether
values of given type (and media type) can be deserialized by
this provider.
|
boolean |
isWriteable(Class<?> type,
Type genericType,
Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType)
Method that JAX-RS container calls to try to check whether
given value (of specified type) can be serialized by
this provider.
|
MAPPER |
locateMapper(Class<?> type,
javax.ws.rs.core.MediaType mediaType)
Method called to locate
ObjectMapper to use for serialization
and deserialization. |
Object |
readFrom(Class<Object> type,
Type genericType,
Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType,
javax.ws.rs.core.MultivaluedMap<String,String> httpHeaders,
InputStream entityStream)
Method that JAX-RS container calls to deserialize given value.
|
void |
removeUntouchable(Class<?> type)
Method for removing definition of specified type as untouchable:
usually only
|
void |
setAnnotationsToUse(Annotations[] annotationsToUse)
Method for configuring which annotation sets to use (including none).
|
void |
setMapper(MAPPER m)
Method that can be used to directly define
ObjectMapper to use
for serialization and deserialization; if null, will use the standard
provider discovery from context instead. |
void |
writeTo(Object value,
Class<?> type,
Type genericType,
Annotation[] annotations,
javax.ws.rs.core.MediaType mediaType,
javax.ws.rs.core.MultivaluedMap<String,Object> httpHeaders,
OutputStream entityStream)
Method that JAX-RS container calls to serialize given value.
|
protected static final HashSet<ClassKey> DEFAULT_UNTOUCHABLES
(why ClassKey? since plain old Class has no hashCode() defined, lookups are painfully slow)
public static final Class<?>[] DEFAULT_UNREADABLES
public static final Class<?>[] DEFAULT_UNWRITABLES
protected HashMap<ClassKey,Boolean> _cfgCustomUntouchables
true
meaning that entry is untouchable,
false
that is is not.protected boolean _cfgCheckCanSerialize
protected boolean _cfgCheckCanDeserialize
public static final Class<?>[] _unreadableClasses
public static final Class<?>[] _unwritableClasses
protected final com.fasterxml.jackson.databind.util.LRUMap<AnnotationBundleKey,EP_CONFIG extends EndpointConfigBase<EP_CONFIG>> _readers
protected final com.fasterxml.jackson.databind.util.LRUMap<AnnotationBundleKey,EP_CONFIG extends EndpointConfigBase<EP_CONFIG>> _writers
protected final MAPPER_CONFIG extends MapperConfiguratorBase<MAPPER_CONFIG,MAPPER> _mapperConfig
ObjectMapper
protected ProviderBase(MAPPER_CONFIG mconfig)
public void checkCanDeserialize(boolean state)
isReadable(java.lang.Class<?>, java.lang.reflect.Type, java.lang.annotation.Annotation[], javax.ws.rs.core.MediaType)
is called.public void checkCanSerialize(boolean state)
isWriteable(java.lang.Class<?>, java.lang.reflect.Type, java.lang.annotation.Annotation[], javax.ws.rs.core.MediaType)
is called.public void addUntouchable(Class<?> type)
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 providerpublic void removeUntouchable(Class<?> type)
public void setAnnotationsToUse(Annotations[] annotationsToUse)
annotationsToUse
- Ordered list of annotation sets to use; if null,
defaultpublic void setMapper(MAPPER m)
ObjectMapper
to use
for serialization and deserialization; if null, will use the standard
provider discovery from context instead. Default setting is null.public THIS configure(com.fasterxml.jackson.databind.DeserializationFeature f, boolean state)
public THIS configure(com.fasterxml.jackson.databind.SerializationFeature f, boolean state)
public THIS configure(com.fasterxml.jackson.core.JsonParser.Feature f, boolean state)
public THIS configure(com.fasterxml.jackson.core.JsonGenerator.Feature f, boolean state)
public THIS enable(com.fasterxml.jackson.databind.DeserializationFeature f, boolean state)
public THIS enable(com.fasterxml.jackson.databind.SerializationFeature f, boolean state)
public THIS enable(com.fasterxml.jackson.core.JsonParser.Feature f, boolean state)
public THIS enable(com.fasterxml.jackson.core.JsonGenerator.Feature f, boolean state)
public THIS disable(com.fasterxml.jackson.databind.DeserializationFeature f, boolean state)
public THIS disable(com.fasterxml.jackson.databind.SerializationFeature f, boolean state)
public THIS disable(com.fasterxml.jackson.core.JsonParser.Feature f, boolean state)
public THIS disable(com.fasterxml.jackson.core.JsonGenerator.Feature f, boolean state)
protected abstract boolean hasMatchingMediaType(javax.ws.rs.core.MediaType mediaType)
MediaType.getSubtype()
returns "json" or something
ending with "+json".protected abstract MAPPER _locateMapperViaProvider(Class<?> type, javax.ws.rs.core.MediaType mediaType)
protected abstract EP_CONFIG _configForReading(MAPPER mapper, Annotation[] annotations)
protected abstract EP_CONFIG _configForWriting(MAPPER mapper, Annotation[] annotations)
public long getSize(Object value, Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
getSize
in interface javax.ws.rs.ext.MessageBodyWriter<Object>
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
#isJsonType
; 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 checkCanSerialize(boolean)
has been called with
true argument -- otherwise assumption is there will be a handler)isWriteable
in interface javax.ws.rs.ext.MessageBodyWriter<Object>
public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) throws IOException
writeTo
in interface javax.ws.rs.ext.MessageBodyWriter<Object>
IOException
protected com.fasterxml.jackson.core.JsonEncoding findEncoding(javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<String,Object> httpHeaders)
public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType)
#isJsonType
; 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 checkCanDeserialize(boolean)
has been called with
true argument -- otherwise assumption is there will be a handler)isReadable
in interface javax.ws.rs.ext.MessageBodyReader<Object>
public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType, javax.ws.rs.core.MultivaluedMap<String,String> httpHeaders, InputStream entityStream) throws IOException
readFrom
in interface javax.ws.rs.ext.MessageBodyReader<Object>
IOException
protected com.fasterxml.jackson.core.JsonParser _createParser(com.fasterxml.jackson.databind.ObjectReader reader, InputStream rawStream) throws IOException
JsonParser
for reading
contents of given raw InputStream
.
May return null to indicate that Stream is empty; that is, contains no
content.IOException
public MAPPER locateMapper(Class<?> type, javax.ws.rs.core.MediaType mediaType)
ObjectMapper
to use for serialization
and deserialization. If an instance has been explicitly defined by
setMapper(MAPPER)
(or non-null instance passed in constructor), that
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
ObjectMapper
instance (one constructed with default constructor
and not modified in any way)type
- Class of object being serialized or deserialized;
not checked at this point, since it is assumed that unprocessable
classes have been already weeded out,
but will be passed to ContextResolver
as is.mediaType
- Declared media type for the instance to process:
not used by this method,
but will be passed to ContextResolver
as is.protected boolean _isSpecialReadable(Class<?> type)
protected static List<Class<?>> findSuperTypes(Class<?> cls, Class<?> endBefore, List<Class<?>> result)
protected static void _addSuperTypes(Class<?> cls, Class<?> endBefore, Collection<Class<?>> result, boolean addClassItself)
Copyright © 2012-2013 FasterXML. All Rights Reserved.