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

org.eclipse.persistence.oxm.XMLUnmarshaller Maven / Gradle / Ivy

There is a newer version: 5.0.0-B03
Show newest version
/*
 * Copyright (c) 1998, 2021 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,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.oxm;

import java.net.URL;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;

import org.eclipse.persistence.core.sessions.CoreSession;
import org.eclipse.persistence.internal.oxm.record.UnmarshalRecord;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.oxm.schema.XMLSchemaReference;

/**
 * 

Class used to unmarshal XML {@literal &} JSON to objects. * *

Create an XMLUnmarshaller from an XMLContext.
* Code Sample
* * XMLContext context = new XMLContext("mySessionName");
* XMLUnmarshaller unmarshaller = context.createUnmarshaller();
*
* *

XML can be unmarshalled from the following inputs:

    *
  • java.io.File
  • *
  • java.io.InputStream
  • *
  • java.io.Reader
  • *
  • java.net.URL
  • *
  • javax.xml.transform.Source
  • *
  • org.w3c.dom.Node
  • *
  • org.xml.sax.InputSource
  • *
* *

XML that can be unmarshalled is XML which has a root tag that corresponds * to a default root element on an XMLDescriptor in the TopLink project associated * with the XMLContext. * * @see org.eclipse.persistence.oxm.XMLContext */ public class XMLUnmarshaller extends org.eclipse.persistence.internal.oxm.XMLUnmarshaller implements Cloneable { public static final int NONVALIDATING = org.eclipse.persistence.internal.oxm.XMLUnmarshaller.NONVALIDATING; public static final int SCHEMA_VALIDATION = org.eclipse.persistence.internal.oxm.XMLUnmarshaller.SCHEMA_VALIDATION; public static final int DTD_VALIDATION = org.eclipse.persistence.internal.oxm.XMLUnmarshaller.DTD_VALIDATION; protected XMLUnmarshaller(XMLContext xmlContext) { this(xmlContext, null); setMediaType(MediaType.APPLICATION_XML); } protected XMLUnmarshaller(XMLContext xmlContext, Map parserFeatures) { super(xmlContext, parserFeatures); setMediaType(MediaType.APPLICATION_XML); } // Copy Constructor protected XMLUnmarshaller(XMLUnmarshaller xmlUnmarshaller) { super(xmlUnmarshaller); setValidationMode(xmlUnmarshaller.getValidationMode()); } @Override public XMLUnmarshaller clone() { return new XMLUnmarshaller(this); } /** * INTERNAL * @since 2.5.0 */ @Override public XMLRoot createRoot() { return new XMLRoot(); } /** * INTERNAL * @since 2.5.0 */ @Override public UnmarshalRecord createUnmarshalRecord(XMLDescriptor xmlDescriptor, AbstractSession session) { org.eclipse.persistence.oxm.record.UnmarshalRecord wrapper = (org.eclipse.persistence.oxm.record.UnmarshalRecord) xmlDescriptor.getObjectBuilder().createRecord(session); return wrapper.getUnmarshalRecord(); } /** * Get the MediaType for this xmlUnmarshaller. * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy * If not set the default is MediaType.APPLICATION_XML * @since 2.4 * @return MediaType */ @Override public MediaType getMediaType(){ return super.getMediaType(); } @Override public XMLUnmarshalListener getUnmarshalListener() { return super.getUnmarshalListener(); } @Override public void setUnmarshalListener(XMLUnmarshalListener listener) { super.setUnmarshalListener(listener); } @Override public XMLUnmarshallerHandler getUnmarshallerHandler() { if (null == xmlUnmarshallerHandler) { xmlUnmarshallerHandler = new XMLUnmarshallerHandler(this); } return xmlUnmarshallerHandler; } /** * Return the instance of XMLContext that was used to create this instance * of XMLUnmarshaller. */ @Override public XMLContext getXMLContext() { return getContext(); } /** * Set the MediaType for this xmlUnmarshaller. * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy * @since 2.4 */ @Override public void setMediaType(MediaType mediaType) { super.setMediaType(mediaType); } /** * Set the validation mode. * This method sets the validation mode of the parser to one of the 3 types: * NONVALIDATING, DTD_VALIDATION and SCHEMA_VALIDATION. * By default, the unmarshaller is set to be NONVALIDATING * @param validationMode sets the type of the validation mode to be used **/ public void setValidationMode(int validationMode) { if (validationMode == SCHEMA_VALIDATION) { initializeSchemas(); } platformUnmarshaller.setValidationMode(validationMode); } /** * Set the XMLContext used by this instance of XMLUnmarshaller. */ @Override public void setXMLContext(XMLContext value) { context = value; } /** * Return this Unmarshaller's custom IDResolver. * @see IDResolver * @since 2.3.3 * @return the custom IDResolver, or null if one has not been specified. */ @Override public IDResolver getIDResolver() { return super.getIDResolver(); } /** * Set this Unmarshaller's custom IDResolver. * @see IDResolver * @since 2.3.3 */ @Override public void setIDResolver(IDResolver idResolver) { super.setIDResolver(idResolver); } @Override protected void initialize(Map parserFeatures) { super.initialize(parserFeatures); // Waiting on XDK to fix bug #3697940 to enable this code //initializeSchemas(); setValidationMode(NONVALIDATING); } private void initializeSchemas() { if (!schemasAreInitialized) { HashSet schemas = new HashSet(); Iterator xmlDescriptors; XMLDescriptor xmlDescriptor; XMLSchemaReference xmlSchemaReference; int numberOfSessions = context.getSessions().size(); for (int x = 0; x < numberOfSessions; x++) { xmlDescriptors = ((CoreSession)context.getSessions().get(x)).getDescriptors().values().iterator(); URL schemaURL; while (xmlDescriptors.hasNext()) { xmlDescriptor = (XMLDescriptor)xmlDescriptors.next(); xmlSchemaReference = xmlDescriptor.getSchemaReference(); if (null != xmlSchemaReference) { schemaURL = xmlSchemaReference.getURL(); if (null != schemaURL) { schemas.add(schemaURL.toString()); } } } } schemas.remove(null); platformUnmarshaller.setSchemas(schemas.toArray()); schemasAreInitialized = true; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy