package com.fasterxml.jackson.module.jaxb;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.Version;
Module that can be registered to add support for JAXB annotations.
It does basically equivalent of
objectMapper.setAnnotationIntrospector(...);
with combination of JaxbAnnotationIntrospector
and existing default introspector(s) (if any), depending on configuration (by default, JAXB annotations are used as Priority.PRIMARY
annotations). /**
* Module that can be registered to add support for JAXB annotations.
* It does basically equivalent of
*<pre>
* objectMapper.setAnnotationIntrospector(...);
*</pre>
* with combination of {@link JaxbAnnotationIntrospector} and existing
* default introspector(s) (if any), depending on configuration
* (by default, JAXB annotations are used as {@link Priority#PRIMARY}
* annotations).
*/
public class JaxbAnnotationModule extends com.fasterxml.jackson.databind.Module
{
Enumeration that defines how we use JAXB Annotations: either
as "primary" annotations (before any other already configured
introspector -- most likely default JacksonAnnotationIntrospector) or
as "secondary" annotations (after any other already configured
introspector(s)).
Default choice is PRIMARY
Note that if you want to use JAXB annotations as the only annotations, you must directly set annotation introspector by calling ObjectMapper.setAnnotationIntrospector
.
/**
* Enumeration that defines how we use JAXB Annotations: either
* as "primary" annotations (before any other already configured
* introspector -- most likely default JacksonAnnotationIntrospector) or
* as "secondary" annotations (after any other already configured
* introspector(s)).
*<p>
* Default choice is <b>PRIMARY</b>
*<p>
* Note that if you want to use JAXB annotations as the only annotations,
* you must directly set annotation introspector by calling
* {@link com.fasterxml.jackson.databind.ObjectMapper#setAnnotationIntrospector}.
*/
public enum Priority {
PRIMARY, SECONDARY;
}
Priority to use when registering annotation introspector: default value is Priority.PRIMARY
. /**
* Priority to use when registering annotation introspector: default
* value is {@link Priority#PRIMARY}.
*/
protected Priority _priority = Priority.PRIMARY;
If the introspector is explicitly set or passed, we'll hold on to that
until registration.
Since: 2.7
/**
* If the introspector is explicitly set or passed, we'll hold on to that
* until registration.
*
* @since 2.7
*/
protected JaxbAnnotationIntrospector _introspector;
Value to pass to JaxbAnnotationIntrospector.setNonNillableInclusion
if defined and non-null. Since: 2.7
/**
* Value to pass to
* {@link JaxbAnnotationIntrospector#setNonNillableInclusion}
* if defined and non-null.
*
* @since 2.7
*/
protected JsonInclude.Include _nonNillableInclusion;
/*
/**********************************************************
/* Life cycle
/**********************************************************
*/
public JaxbAnnotationModule() { }
Since: 2.7
/**
* @since 2.7
*/
public JaxbAnnotationModule(JaxbAnnotationIntrospector intr) {
_introspector = intr;
}
@Override
public String getModuleName() {
return getClass().getSimpleName();
}
@Override
public Version version() {
return PackageVersion.VERSION;
}
@Override
public void setupModule(SetupContext context)
{
JaxbAnnotationIntrospector intr = _introspector;
if (intr == null) {
intr = new JaxbAnnotationIntrospector(context.getTypeFactory());
if (_nonNillableInclusion != null) {
intr.setNonNillableInclusion(_nonNillableInclusion);
}
}
switch (_priority) {
case PRIMARY:
context.insertAnnotationIntrospector(intr);
break;
case SECONDARY:
context.appendAnnotationIntrospector(intr);
break;
}
}
/*
/**********************************************************
/* Configuration
/**********************************************************
*/
Method for defining whether JAXB annotations should be added
as primary or secondary annotations (compared to already registered
annotations).
NOTE: method MUST be called before registering the module -- calling
afterwards will not have any effect on previous registrations.
/**
* Method for defining whether JAXB annotations should be added
* as primary or secondary annotations (compared to already registered
* annotations).
*<p>
* NOTE: method MUST be called before registering the module -- calling
* afterwards will not have any effect on previous registrations.
*/
public JaxbAnnotationModule setPriority(Priority p) {
_priority = p;
return this;
}
public Priority getPriority() { return _priority; }
Since: 2.7
/**
* @since 2.7
*/
public JaxbAnnotationModule setNonNillableInclusion(JsonInclude.Include incl) {
_nonNillableInclusion = incl;
if (_introspector != null) {
_introspector.setNonNillableInclusion(incl);
}
return this;
}
Since: 2.7
/**
* @since 2.7
*/
public JsonInclude.Include getNonNillableInclusion() {
return _nonNillableInclusion;
}
}