/*
 * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.jersey.moxy.json;

import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.ext.ContextResolver;
import javax.xml.bind.Marshaller;

import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.eclipse.persistence.jaxb.UnmarshallerProperties;
import org.eclipse.persistence.oxm.XMLConstants;

Configuration class for MOXy JSON provider.
Author:Michal Gajdos
/** * Configuration class for MOXy JSON provider. * * @author Michal Gajdos */
public final class MoxyJsonConfig { private final Map<String, Object> marshallerProperties = new HashMap<>(); private final Map<String, Object> unmarshallerProperties = new HashMap<>();
Create a new configuration for MOXyJsonProvider and initialize default properties.
See Also:
/** * Create a new configuration for {@link org.eclipse.persistence.jaxb.rs.MOXyJsonProvider} and initialize default properties. * * @see #MoxyJsonConfig(boolean) */
public MoxyJsonConfig() { this(true); }
Create a new configuration for MOXyJsonProvider. If the initDefaultProperties is set to true then the following values are set:
Params:
  • initDefaultProperties – flag to determine whether the default values of properties mentioned above should be set or not.
/** * Create a new configuration for {@link org.eclipse.persistence.jaxb.rs.MOXyJsonProvider}. If the * {@code initDefaultProperties} is set to {@code true} then the following values are set: * <ul> * <li>{@link javax.xml.bind.Marshaller#JAXB_FORMATTED_OUTPUT} - {@code false}</li> * <li>{@link org.eclipse.persistence.jaxb.JAXBContextProperties#JSON_INCLUDE_ROOT} - {@code false}</li> * <li>{@link org.eclipse.persistence.jaxb.MarshallerProperties#JSON_MARSHAL_EMPTY_COLLECTIONS} - {@code true}</li> * <li>{@link org.eclipse.persistence.jaxb.JAXBContextProperties#JSON_NAMESPACE_SEPARATOR} - * {@link org.eclipse.persistence.oxm.XMLConstants#DOT}</li> * </ul> * * @param initDefaultProperties flag to determine whether the default values of properties mentioned above should be set or * not. */
public MoxyJsonConfig(final boolean initDefaultProperties) { if (initDefaultProperties) { // javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT setFormattedOutput(false); // org.eclipse.persistence.jaxb.JAXBContextProperties.JSON_INCLUDE_ROOT setIncludeRoot(false); // org.eclipse.persistence.jaxb.MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS setMarshalEmptyCollections(true); // org.eclipse.persistence.jaxb.JAXBContextProperties.JSON_NAMESPACE_SEPARATOR setNamespaceSeparator(XMLConstants.DOT); } }
Copy constructor.
Params:
  • that – config to make a copy of.
/** * Copy constructor. * * @param that config to make a copy of. */
private MoxyJsonConfig(final MoxyJsonConfig that) { this.marshallerProperties.putAll(that.marshallerProperties); this.unmarshallerProperties.putAll(that.unmarshallerProperties); }
Set the value of the property for both Marshaller / Unmarshaller.
Params:
  • name – name of the property.
  • value – value of the property.
Returns:a MoxyJsonConfig instance.
/** * Set the value of the property for both {@code Marshaller} / {@code Unmarshaller}. * * @param name name of the property. * @param value value of the property. * @return a {@code MoxyJsonConfig} instance. */
public MoxyJsonConfig property(final String name, final Object value) { marshallerProperty(name, value); unmarshallerProperty(name, value); return this; }
Set the value of the property for used Marshaller.
Params:
  • name – name of the property.
  • value – value of the property.
Returns:a MoxyJsonConfig instance.
/** * Set the value of the property for used {@code Marshaller}. * * @param name name of the property. * @param value value of the property. * @return a {@code MoxyJsonConfig} instance. */
public MoxyJsonConfig marshallerProperty(final String name, final Object value) { marshallerProperties.put(name, value); return this; }
Set the value of the property for used Unmarshaller.
Params:
  • name – name of the property.
  • value – value of the property.
Returns:a MoxyJsonConfig instance.
/** * Set the value of the property for used {@code Unmarshaller}. * * @param name name of the property. * @param value value of the property. * @return a {@code MoxyJsonConfig} instance. */
public MoxyJsonConfig unmarshallerProperty(final String name, final Object value) { unmarshallerProperties.put(name, value); return this; }
Add properties from the given map to the existing marshaller properties.
Params:
  • marshallerProperties – map of marshaller properties.
Returns:a MoxyJsonConfig instance.
/** * Add properties from the given map to the existing marshaller properties. * * @param marshallerProperties map of marshaller properties. * @return a {@code MoxyJsonConfig} instance. */
public MoxyJsonConfig setMarshallerProperties(final Map<String, Object> marshallerProperties) { this.marshallerProperties.putAll(marshallerProperties); return this; }
Add properties from the given map to the existing unmarshaller properties.
Params:
  • unmarshallerProperties – map of unmarshaller properties.
Returns:a MoxyJsonConfig instance.
/** * Add properties from the given map to the existing unmarshaller properties. * * @param unmarshallerProperties map of unmarshaller properties. * @return a {@code MoxyJsonConfig} instance. */
public MoxyJsonConfig setUnmarshallerProperties(final Map<String, Object> unmarshallerProperties) { this.unmarshallerProperties.putAll(unmarshallerProperties); return this; }
Get marshaller properties.
Returns:mutable map of marshaller properties.
/** * Get marshaller properties. * * @return mutable map of marshaller properties. */
public Map<String, Object> getMarshallerProperties() { return marshallerProperties; }
Get unmarshaller properties.
Returns:mutable map of unmarshaller properties.
/** * Get unmarshaller properties. * * @return mutable map of unmarshaller properties. */
public Map<String, Object> getUnmarshallerProperties() { return unmarshallerProperties; }
See Also:
  • getAttributePrefix.getAttributePrefix()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#getAttributePrefix() */
public String getAttributePrefix() { return (String) marshallerProperties.get(MarshallerProperties.JSON_ATTRIBUTE_PREFIX); }
See Also:
  • setAttributePrefix.setAttributePrefix(String)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setAttributePrefix(String) */
public MoxyJsonConfig setAttributePrefix(final String attributePrefix) { if (attributePrefix != null) { marshallerProperties.put(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, attributePrefix); unmarshallerProperties.put(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, attributePrefix); } else { marshallerProperties.remove(MarshallerProperties.JSON_ATTRIBUTE_PREFIX); unmarshallerProperties.remove(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX); } return this; }
See Also:
  • isFormattedOutput.isFormattedOutput()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#isFormattedOutput() */
public boolean isFormattedOutput() { return (Boolean) marshallerProperties.get(Marshaller.JAXB_FORMATTED_OUTPUT); }
See Also:
  • setFormattedOutput.setFormattedOutput(boolean)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setFormattedOutput(boolean) */
public MoxyJsonConfig setFormattedOutput(final boolean formattedOutput) { marshallerProperties.put(Marshaller.JAXB_FORMATTED_OUTPUT, formattedOutput); return this; }
See Also:
  • isIncludeRoot.isIncludeRoot()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#isIncludeRoot() */
public boolean isIncludeRoot() { return (Boolean) marshallerProperties.get(MarshallerProperties.JSON_INCLUDE_ROOT); }
See Also:
  • setIncludeRoot.setIncludeRoot(boolean)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setIncludeRoot(boolean) */
public MoxyJsonConfig setIncludeRoot(final boolean includeRoot) { marshallerProperties.put(MarshallerProperties.JSON_INCLUDE_ROOT, includeRoot); unmarshallerProperties.put(UnmarshallerProperties.JSON_INCLUDE_ROOT, includeRoot); return this; }
See Also:
  • isMarshalEmptyCollections.isMarshalEmptyCollections()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#isMarshalEmptyCollections() */
public boolean isMarshalEmptyCollections() { return (Boolean) marshallerProperties.get(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS); }
See Also:
  • setMarshalEmptyCollections.setMarshalEmptyCollections(boolean)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setMarshalEmptyCollections(boolean) */
public MoxyJsonConfig setMarshalEmptyCollections(final boolean marshalEmptyCollections) { marshallerProperties.put(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, marshalEmptyCollections); return this; }
See Also:
  • getNamespacePrefixMapper.getNamespacePrefixMapper()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#getNamespacePrefixMapper() */
public Map<String, String> getNamespacePrefixMapper() { return (Map<String, String>) marshallerProperties.get(MarshallerProperties.NAMESPACE_PREFIX_MAPPER); }
See Also:
  • setNamespacePrefixMapper.setNamespacePrefixMapper(Map)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setNamespacePrefixMapper(java.util.Map) */
public MoxyJsonConfig setNamespacePrefixMapper(final Map<String, String> namespacePrefixMapper) { if (namespacePrefixMapper != null) { marshallerProperties.put(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, namespacePrefixMapper); unmarshallerProperties.put(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, namespacePrefixMapper); } else { marshallerProperties.remove(MarshallerProperties.NAMESPACE_PREFIX_MAPPER); unmarshallerProperties.remove(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER); } return this; }
See Also:
  • getNamespaceSeparator.getNamespaceSeparator()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#getNamespaceSeparator() */
public char getNamespaceSeparator() { return (Character) marshallerProperties.get(MarshallerProperties.JSON_NAMESPACE_SEPARATOR); }
See Also:
  • setNamespaceSeparator.setNamespaceSeparator(char)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setNamespaceSeparator(char) */
public MoxyJsonConfig setNamespaceSeparator(final char namespaceSeparator) { marshallerProperties.put(MarshallerProperties.JSON_NAMESPACE_SEPARATOR, namespaceSeparator); unmarshallerProperties.put(UnmarshallerProperties.JSON_NAMESPACE_SEPARATOR, namespaceSeparator); return this; }
See Also:
  • getValueWrapper.getValueWrapper()
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#getValueWrapper() */
public String getValueWrapper() { return (String) marshallerProperties.get(MarshallerProperties.JSON_VALUE_WRAPPER); }
See Also:
  • setValueWrapper.setValueWrapper(String)
/** * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider#setValueWrapper(String) */
public MoxyJsonConfig setValueWrapper(final String valueWrapper) { if (valueWrapper != null) { marshallerProperties.put(MarshallerProperties.JSON_VALUE_WRAPPER, valueWrapper); unmarshallerProperties.put(UnmarshallerProperties.JSON_VALUE_WRAPPER, valueWrapper); } else { marshallerProperties.remove(MarshallerProperties.JSON_VALUE_WRAPPER); unmarshallerProperties.remove(UnmarshallerProperties.JSON_VALUE_WRAPPER); } return this; }
Create a context resolver for a current state of this MoxyJsonConfig.
Returns:context resolver for this config.
/** * Create a {@link ContextResolver context resolver} for a current state of this {@code MoxyJsonConfig}. * * @return context resolver for this config. */
public ContextResolver<MoxyJsonConfig> resolver() { return new ContextResolver<MoxyJsonConfig>() { private final MoxyJsonConfig config = new MoxyJsonConfig(MoxyJsonConfig.this); @Override public MoxyJsonConfig getContext(final Class<?> type) { return config; } }; } }