All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.jackson.dataformat.xml.JacksonXmlModule Maven / Gradle / Ivy

The newest version!
package com.fasterxml.jackson.dataformat.xml;

import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
import com.fasterxml.jackson.dataformat.xml.deser.XmlBeanDeserializerModifier;
import com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializerModifier;

/**
 * Module that implements most functionality needed to support producing and
 * consuming XML instead of JSON.
 */
public class JacksonXmlModule
    extends SimpleModule
    implements java.io.Serializable
{
    private static final long serialVersionUID = 1L;

    /**
     * Determination of whether indexed properties (arrays, Lists) that are not explicitly
     * annotated (with {@link com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper}
     * or equivalent) should default to using implicit wrapper (with same name as property) or not.
     * If enabled, wrapping is used by default; if false, it is not.
     *

* Note that JAXB annotation introspector always assumes "do not wrap by default". * Jackson annotations have different default due to backwards compatibility. * * @since 2.1 */ protected boolean _cfgDefaultUseWrapper = JacksonXmlAnnotationIntrospector.DEFAULT_USE_WRAPPER; /** * Name used for pseudo-property used for returning XML Text value (which does * not have actual element name to use). Defaults to empty String, but * may be changed for interoperability reasons: JAXB, for example, uses * "value" as name. * * @since 2.1 */ protected String _cfgNameForTextElement = FromXmlParser.DEFAULT_UNNAMED_TEXT_PROPERTY; /* /********************************************************************** /* Life-cycle: construction /********************************************************************** */ public JacksonXmlModule() { super("JackxonXmlModule", PackageVersion.VERSION); } @Override public void setupModule(SetupContext context) { // Need to modify BeanDeserializer, BeanSerializer that are used context.addBeanSerializerModifier(new XmlBeanSerializerModifier()); context.addBeanDeserializerModifier(new XmlBeanDeserializerModifier(_cfgNameForTextElement)); // as well as AnnotationIntrospector context.insertAnnotationIntrospector(_constructIntrospector()); // and finally inform XmlFactory about overrides, if need be: if (_cfgNameForTextElement != FromXmlParser.DEFAULT_UNNAMED_TEXT_PROPERTY) { XmlMapper m = (XmlMapper) context.getOwner(); m.setXMLTextElementName(_cfgNameForTextElement); } /* Usually this would be the first call; but here anything added will * be stuff user may has added, so do it afterwards instead. */ super.setupModule(context); } /* /********************************************************************** /* Life-cycle: configuration /********************************************************************** */ /** * Method that can be used to define whether {@link AnnotationIntrospector} * we register will use wrapper for indexed (List, array) properties or not, * if there are no explicit annotations. * See {@link com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper} * for details. *

* Note that method MUST be called before registering the module; otherwise change * will not have any effect. * * @param state Whether to enable or disable "use wrapper for non-annotated List properties" * * @since 2.1 */ public void setDefaultUseWrapper(boolean state) { _cfgDefaultUseWrapper = state; } /** * Method that can be used to define alternate "virtual name" to use * for XML CDATA segments; that is, text values. Default name is empty String * (""); but some frameworks use other names: JAXB, for example, uses * "value". *

* Note that method MUST be called before registering the module; otherwise change * will not have any effect. * * @param name Virtual name to use when exposing XML character data sections * * @since 2.1 */ public void setXMLTextElementName(String name) { _cfgNameForTextElement = name; } /* /********************************************************************** /* Internal methods /********************************************************************** */ protected AnnotationIntrospector _constructIntrospector() { return new JacksonXmlAnnotationIntrospector(_cfgDefaultUseWrapper); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy