blob: 50fabae0123f7ba477548bcea379bac5efa587a1 [file] [log] [blame]
/*
* Copyright (c) 2012, 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:
// Blaise Doughan - 2.5 - initial implementation
// Marcel Valovy - 2.6.0 - added case insensitive unmarshalling property
package org.eclipse.persistence.internal.oxm;
import javax.xml.validation.Schema;
import org.eclipse.persistence.internal.core.sessions.CoreAbstractSession;
import org.eclipse.persistence.internal.oxm.mappings.Descriptor;
import org.eclipse.persistence.internal.oxm.record.UnmarshalRecord;
import org.eclipse.persistence.oxm.attachment.XMLAttachmentUnmarshaller;
import org.xml.sax.ErrorHandler;
public abstract class Unmarshaller<
ABSTRACT_SESSION extends CoreAbstractSession,
CONTEXT extends Context,
DESCRIPTOR extends Descriptor,
ID_RESOLVER extends IDResolver,
MEDIA_TYPE extends MediaType,
ROOT extends Root,
UNMARSHALLER_HANDLER extends UnmarshallerHandler,
UNMARSHALLER_LISTENER extends Unmarshaller.Listener> {
protected CONTEXT context;
private UNMARSHALLER_LISTENER unmarshalListener;
protected Unmarshaller(CONTEXT context) {
this.context = context;
}
/**
* Copy constructor
*/
protected Unmarshaller(Unmarshaller unmarshaller) {
this.context = (CONTEXT) unmarshaller.getContext();
this.unmarshalListener = (UNMARSHALLER_LISTENER) unmarshaller.getUnmarshalListener();
}
/**
* INTERNAL
*/
public abstract ROOT createRoot();
/**
* INTERNAL
*/
public abstract UnmarshalRecord createRootUnmarshalRecord(Class clazz);
/**
* INTERNAL
*/
public abstract UnmarshalRecord createUnmarshalRecord(DESCRIPTOR descriptor, ABSTRACT_SESSION session);
public abstract XMLAttachmentUnmarshaller getAttachmentUnmarshaller();
/**
* Value that will be used to prefix attributes.
* Ignored unmarshalling XML.
*/
public abstract String getAttributePrefix();
/**
* Return the instance of XMLContext that was used to create this instance
* of Unmarshaller.
*/
public CONTEXT getContext() {
return context;
}
/**
* Get the ErrorHandler set on this Unmarshaller
* @return the ErrorHandler set on this Unmarshaller
*/
public abstract ErrorHandler getErrorHandler();
/**
* Return this Unmarshaller's custom IDResolver.
* @see IDResolver
* @return the custom IDResolver, or null if one has not been specified.
*/
public abstract ID_RESOLVER getIDResolver();
/**
* Get the MediaType for this unmarshaller.
* See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy
* If not set the default is MediaType.APPLICATION_XML
* @return MediaType
*/
public abstract MEDIA_TYPE getMediaType();
/**
* Name of the NamespaceResolver to be used during unmarshal
* Ignored unmarshalling XML.
*/
public abstract NamespaceResolver getNamespaceResolver();
/**
* Get the namespace separator used during unmarshal operations.
* If mediaType is application/json '.' is the default
* Ignored unmarshalling XML.
*/
public abstract char getNamespaceSeparator();
/**
* Return the property for a given key, if one exists.
*
*/
public abstract Object getProperty(Object key);
public abstract Schema getSchema();
/**
* INTERNAL:
* This is the text handler during unmarshal operations.
*/
public abstract StrBuffer getStringBuffer();
/**
* Get the class that will be instantiated to handled unmapped content
* Class must implement the org.eclipse.persistence.oxm.unmapped.UnmappedContentHandler interface
*/
public abstract Class getUnmappedContentHandlerClass();
/**
* INTERNAL:
* Returns the AttributeGroup or the name of the AttributeGroup to be used to
* unmarshal.
*/
public abstract Object getUnmarshalAttributeGroup();
public abstract UNMARSHALLER_HANDLER getUnmarshallerHandler();
public UNMARSHALLER_LISTENER getUnmarshalListener() {
return unmarshalListener;
}
/**
* Name of the property to marshal/unmarshal as a wrapper on the text() mappings
* Ignored unmarshalling XML.
*/
public abstract String getValueWrapper();
/**
* INTERNAL
* @return true if the media type is application/json, else false.
* @since EclipseLink 2.6.0
*/
public abstract boolean isApplicationJSON();
/**
* INTERNAL
* @return true if the media type is application/xml, else false.
* @since EclipseLink 2.6.0
*/
public abstract boolean isApplicationXML();
/**
* Return if this Unmarshaller should try to automatically determine
* the MediaType of the document (instead of using the MediaType set
* by setMediaType)
*/
public abstract boolean isAutoDetectMediaType();
/**
* Return whether this Unmarshaller should perform case insensitive unmarshalling.
*/
public abstract boolean isCaseInsensitive();
/**
* Determine if the @XMLRootElement should be marshalled when present.
* Ignored unmarshalling XML.
*/
public abstract boolean isIncludeRoot();
public abstract boolean isResultAlwaysXMLRoot();
public abstract boolean isWrapperAsCollectionName();
public abstract void setIDResolver(ID_RESOLVER idResolver);
public abstract boolean shouldWarnOnUnmappedElement();
public void setUnmarshalListener(UNMARSHALLER_LISTENER unmarshalListener) {
this.unmarshalListener = unmarshalListener;
}
/**
* <p>An implementation of UnmarshalListener can be set on an Unmarshaller to
* provide additional behaviour during unmarshal operations.</p>
*/
public interface Listener {
/**
* Event that will be called after objects are unmarshalled.
*
* @param target the object that was unmarshalled.
* @param parent the owning object of the object that was unmarshalled. This may be null.
*/
void afterUnmarshal(Object target, Object parent);
/**
* Event that will be called before objects are unmarshalled.
*
* @param target A newly created instance of the object to be unmarshalled.
* @param parent the owning object of the object that will be unmarshalled. This may be null.
*/
void beforeUnmarshal(Object target, Object parent);
}
/**
* Returns json type configuration.
*
* @return json type configuration
* @since 2.6.0
*/
public abstract JsonTypeConfiguration getJsonTypeConfiguration();
}