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

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

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

import java.io.IOException;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider;
import com.fasterxml.jackson.dataformat.xml.util.DefaultXmlPrettyPrinter;
import com.fasterxml.jackson.dataformat.xml.util.XmlRootNameLookup;

/**
 * Customized {@link ObjectMapper} that will read and write XML instead of JSON,
 * using XML-backed {@link com.fasterxml.jackson.core.JsonFactory}
 * implementation ({@link XmlFactory}).
 *

* Mapper itself overrides some aspects of functionality to try to handle * data binding aspects as similar to JAXB as possible. */ public class XmlMapper extends ObjectMapper { private static final long serialVersionUID = -724333029147285918L; protected final static JacksonXmlModule DEFAULT_XML_MODULE = new JacksonXmlModule(); // need to hold on to module instance just in case copy() is used protected final JacksonXmlModule _xmlModule; /* /********************************************************** /* Life-cycle: construction, configuration /********************************************************** */ public XmlMapper() { this(new XmlFactory()); } /** @since 2.4 */ public XmlMapper(XMLInputFactory inputF, XMLOutputFactory outF) { this(new XmlFactory(inputF, outF)); } /** @since 2.4 */ public XmlMapper(XMLInputFactory inputF) { this(new XmlFactory(inputF)); } public XmlMapper(XmlFactory xmlFactory) { this(xmlFactory, DEFAULT_XML_MODULE); } public XmlMapper(JacksonXmlModule module) { this(new XmlFactory(), module); } public XmlMapper(XmlFactory xmlFactory, JacksonXmlModule module) { /* Need to override serializer provider (due to root name handling); * deserializer provider fine as is */ super(xmlFactory, new XmlSerializerProvider(new XmlRootNameLookup()), null); _xmlModule = module; // but all the rest is done via Module interface! if (module != null) { registerModule(module); } } // @since 2.1 @Override public XmlMapper copy() { _checkInvalidCopy(XmlMapper.class); return new XmlMapper((XmlFactory) _jsonFactory.copy(), _xmlModule); } @Override public Version version() { return PackageVersion.VERSION; } /* /********************************************************** /* Additional XML-specific configurations /********************************************************** */ /** * Method called by {@link JacksonXmlModule} to pass configuration * information to {@link XmlFactory}, during registration. * * @since 2.1 */ protected void setXMLTextElementName(String name) { ((XmlFactory) _jsonFactory).setXMLTextElementName(name); } /* /********************************************************** /* Access to configuration settings /********************************************************** */ /** * @deprecated Since 2.1, use {@link #getFactory} instead */ @Override @Deprecated public XmlFactory getJsonFactory() { return (XmlFactory) _jsonFactory; } @Override public XmlFactory getFactory() { return (XmlFactory) _jsonFactory; } public ObjectMapper configure(ToXmlGenerator.Feature f, boolean state) { ((XmlFactory)_jsonFactory).configure(f, state); return this; } public ObjectMapper configure(FromXmlParser.Feature f, boolean state) { ((XmlFactory)_jsonFactory).configure(f, state); return this; } public ObjectMapper enable(ToXmlGenerator.Feature f) { ((XmlFactory)_jsonFactory).enable(f); return this; } public ObjectMapper enable(FromXmlParser.Feature f) { ((XmlFactory)_jsonFactory).enable(f); return this; } public ObjectMapper disable(ToXmlGenerator.Feature f) { ((XmlFactory)_jsonFactory).disable(f); return this; } public ObjectMapper disable(FromXmlParser.Feature f) { ((XmlFactory)_jsonFactory).disable(f); return this; } /* /********************************************************** /* XML-specific access /********************************************************** */ /** * Method for reading a single XML value from given XML-specific input * source; useful for incremental data-binding, combining traversal using * basic Stax {@link XMLStreamReader} with data-binding by Jackson. * * @since 2.4 */ public T readValue(XMLStreamReader r, Class valueType) throws IOException { return readValue(r, _typeFactory.constructType(valueType)); } /** * Method for reading a single XML value from given XML-specific input * source; useful for incremental data-binding, combining traversal using * basic Stax {@link XMLStreamReader} with data-binding by Jackson. * * @since 2.4 */ public T readValue(XMLStreamReader r, TypeReference valueTypeRef) throws IOException { return readValue(r, _typeFactory.constructType(valueTypeRef)); } /** * Method for reading a single XML value from given XML-specific input * source; useful for incremental data-binding, combining traversal using * basic Stax {@link XMLStreamReader} with data-binding by Jackson. * * @since 2.4 */ @SuppressWarnings("resource") public T readValue(XMLStreamReader r, JavaType valueType) throws IOException { FromXmlParser p = getFactory().createParser(r); return super.readValue(p, valueType); } /** * Method for serializing given value using specific {@link XMLStreamReader}: * useful when building large XML files by binding individual items, one at * a time. * * @since 2.4 */ public void writeValue(XMLStreamWriter w0, Object value) throws IOException { @SuppressWarnings("resource") ToXmlGenerator g = getFactory().createGenerator(w0); super.writeValue(g, value); /* NOTE: above call should do flush(); and we should NOT close here. * Finally, 'g' has no buffers to release. */ } /* /********************************************************** /* Overridden methods /********************************************************** */ /** * XML indentation differs from JSON indentation, thereby * need to change default pretty-printer */ @Override protected PrettyPrinter _defaultPrettyPrinter() { return new DefaultXmlPrettyPrinter(); } /* /********************************************************** /* Helper methods /********************************************************** */ }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy