org.castor.xml.InternalContext Maven / Gradle / Ivy
/*
* Copyright 2007 Joachim Grueneis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.castor.xml;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.mapping.MappingLoader;
import org.exolab.castor.util.RegExpEvaluator;
import org.exolab.castor.xml.Introspector;
import org.exolab.castor.xml.NodeType;
import org.exolab.castor.xml.OutputFormat;
import org.exolab.castor.xml.ResolverException;
import org.exolab.castor.xml.Serializer;
import org.exolab.castor.xml.XMLClassDescriptorResolver;
import org.exolab.castor.xml.util.ResolverStrategy;
import org.xml.sax.DocumentHandler;
import org.xml.sax.Parser;
import org.xml.sax.XMLReader;
/**
* The internal context is meant as center piece providing (and keeping) all
* information that is required by Marshaller, Unmarshaller, SourceGenerator,
* MappingTool, SchemaReader and SchemaWriter. It is created, filled with
* initial data and put into all other parts of Castor by {@link XMLContext}.
* It is NOT meant to be directly instantiated by user implementations!
* For all other objects it provides access to Castor state information
* (e.g. known descriptors) and configuration values.
*
* @author Joachim Grueneis
* @since 1.1.2
*/
public interface InternalContext {
/**
* Instructs Castor to load class descriptors from the mapping given.
* @param mapping Castor XML mapping (file), from which the required class
* descriptors will be derived.
* @throws MappingException If the {@link Mapping} cannot be loaded and analyzed successfully.
*/
public abstract void addMapping(final Mapping mapping) throws MappingException;
/**
* Loads the class descriptor for the class instance specified. The use of this method is useful
* when no mapping is used, as happens when the domain classes has been generated
* using the XML code generator (in which case instead of a mapping file class
* descriptor files will be generated).
*
* @param clazz the class for which the associated descriptor should be loaded.
* @throws ResolverException in case that resolving the Class fails fatally
*/
public abstract void addClass(final Class clazz) throws ResolverException;
/**
* Loads the class descriptor for the class instance specified. The use of this method is useful
* when no mapping is used, as happens when the domain classes hase been generated
* using the XML code generator (in which case instead of a mapping file class
* descriptor files will be generated).
*
* @param clazzes the classes for which the associated descriptor should be loaded.
* @throws ResolverException in case that resolving the Class fails fatally
*/
public abstract void addClasses(final Class[] clazzes) throws ResolverException;
/**
* Loads class descriptors from the package specified. The use of this method is useful
* when no mapping is used, as happens when the domain classes hase been generated
* using the XML code generator (in which case instead of a mapping file class
* descriptor files will be generated).
*
* Please note that this functionality will work only if you provide the .castor.cdr
* file with your generated classes (as generated by the XML code generator).
*
* @param packageName The package name for the (descriptor) classes
* @throws ResolverException
* If there's a problem loading class descriptors for the given package.
*/
public abstract void addPackage(final String packageName) throws ResolverException;
/**
* Loads class descriptors from the packages specified. The use of this method is useful
* when no mapping is used, as happens when the domain classes hase been generated
* using the XML code generator (in which case instead of a mapping file class
* descriptor files will be generated).
*
* Please note that this functionality will work only if you provide the .castor.cdr
* files with your generated classes (as generated by the XML code generator).
*
* @param packageNames The package names for the (descriptor) classes
* @throws ResolverException
* If there's a problem loading class descriptors for the given package.
*/
public abstract void addPackages(final String[] packageNames) throws ResolverException;
/**
* Sets an application-specific {@link XMLClassDescriptorResolver} instance.
* @param xmlClassDescriptorResolver the resolver to use
*/
public abstract void setResolver(final XMLClassDescriptorResolver xmlClassDescriptorResolver);
/**
* To set properties for marshalling and unmarshalling behavior.
* @param propertyName name of the property to set
* @param value the value to set to
*/
public abstract void setProperty(final String propertyName, final Object value);
/**
* To get the value of a specific property.
* @param propertyName name of the Property
* @return the value (Object) of the property
*/
public abstract Object getProperty(final String propertyName);
/**
* Returns the naming conventions to use for the XML framework.
*
* @return the naming conventions to use for the XML framework
*/
public abstract XMLNaming getXMLNaming();
/**
* Returns the naming conventions to use for the XML framework.
* @param classLoader the class loader to be used when instantiating a new naming instance
* @return the naming conventions to use for the XML framework
* @TODO: Joachim should be synchronized, shouldn't it be??
*/
public abstract XMLNaming getXMLNaming(final ClassLoader classLoader); //-- getXMLNaming
/**
* The {@link JavaNaming} instance to be used.
* @return {@link JavaNaming} instance to be used.
*/
public abstract JavaNaming getJavaNaming();
/**
* Return an XML document parser implementing the feature list
* specified in the configuration file.
*
* @return A suitable XML parser
*/
public abstract Parser getParser();
/**
* Returns an XML document parser implementing the requested
* set of features. The feature list is a comma separated list
* of features that parser may or may not support. No errors are
* generated for unsupported features. If the feature list is not
* null, it overrides the default feature list specified in the
* configuration file, including validation and Namespaces.
*
* @param features The requested feature list, null for the
* defaults
* @return A suitable XML parser
*/
public abstract Parser getParser(final String features);
/**
* Returns an XML document parser implementing the requested set of
* features. The feature list is a comma separated list of features that
* parser may or may not support. No errors are generated for unsupported
* features. If the feature list is not null, it overrides the default
* feature list specified in the configuration file, including validation
* and Namespaces.
*
* @return A suitable XML parser
*/
public abstract XMLReader getXMLReader(); //-- getXMLReader
/**
* Returns an XML document parser implementing the requested
* set of features. The feature list is a comma separated list
* of features that parser may or may not support. No errors are
* generated for unsupported features. If the feature list is not
* null, it overrides the default feature list specified in the
* configuration file, including validation and Namespaces.
*
* @param features the name of feature to set
* @return A suitable XML parser
*/
public abstract XMLReader getXMLReader(final String features); //-- getXMLReader
/**
* Returns the NodeType to use for Java primitives.
* A null value will be returned if no NodeType was specified,
* indicating the default NodeType should be used.
*
* @return the NodeType assigned to Java primitives, or null
* if no NodeType was specified.
**/
public abstract NodeType getPrimitiveNodeType(); //-- getPrimitiveNodeType
/**
* Returns a new instance of the specified Regular Expression
* Evaluator, or null if no validator was specified.
*
* @return the regular expression evaluator,
*
**/
public abstract RegExpEvaluator getRegExpEvaluator(); // -- getRegExpEvaluator
/**
* Returns a default serializer for producing an XML document. The caller
* can specify an alternative output format, may reuse this serializer
* across several streams, and may serialize both DOM and SAX events. If
* such control is not required, it is recommended to call one of the other
* two methods.
*
* @return A suitable serializer
*/
public abstract Serializer getSerializer();
/**
* Returns the default OutputFormat for use with a Serializer.
*
* @return the default OutputFormat
**/
public abstract OutputFormat getOutputFormat(); //-- getOutputFormat
/**
* Returns a default serializer for producing an XML document to
* the designated output stream using the default serialization
* format.
*
* @param output The output stream
* @return A suitable serializer
* @throws IOException if instantiation of the serializer fails
*/
public abstract DocumentHandler getSerializer(final OutputStream output) throws IOException;
/**
* Returns a default serializer for producing an XML document to the
* designated output stream using the default serialization format.
*
* @param output
* The output stream
* @return A suitable serializer
* @throws IOException if instantiation of serializer fails
*/
public abstract DocumentHandler getSerializer(final Writer output) throws IOException;
/**
* To get the XMLClassdescriptorResolver instance hold in the context.
* @return the XMLClassdescriptorResolver instance hold in the context
*/
public abstract XMLClassDescriptorResolver getXMLClassDescriptorResolver();
/**
* To get the Introspector assigned to this XMLContext.
* @return the Introspector assigned to this XMLContext
*/
public abstract Introspector getIntrospector();
/**
* To get the XMLClassDescriptor resolver strategy to be used when
* resolving classes into class descriptors.
* @return the ResolverStrategy to use
*/
public abstract ResolverStrategy getResolverStrategy();
/**
* To set the XMLClassDescriptor resolver strategy to be used.
* @param resolverStrategy the ResolverStrategy to use
*/
public abstract void setResolverStrategy(final ResolverStrategy resolverStrategy);
/**
* To set the {@link MappingLoader} to be used in this Castor session.
* @param mappingLoader the {@link MappingLoader} to use
*/
public abstract void setMappingLoader(final MappingLoader mappingLoader);
/**
* To get the {@link MappingLoader} specified to be used in this Castor session.
* @return the {@link MappingLoader} to use
*/
public abstract MappingLoader getMappingLoader();
/**
* To set the {@link JavaNaming}?property.
* @param javaNaming the {@link JavaNaming} to use
*/
public abstract void setJavaNaming(final JavaNaming javaNaming);
/**
* To set the {@link XMLNaming} property.
* @param xmlNaming the {@link XMLNaming} to use
*/
abstract void setXMLNaming(final XMLNaming xmlNaming);
/**
* To set any boolean property.
* @param propertyName name of the property to set
* @param value boolean value to set
*/
public abstract void setProperty(final String propertyName, final boolean value);
/**
* Providing access to Boolean properties of the configuration.
* @param propertyName name of the property
* @return null if property is not set or whichever value is set
*/
public abstract Boolean getBooleanProperty(final String propertyName);
/**
* Providing access to String properties of the configuration.
* @param propertyName name of the property
* @return null if the property is not set or whichever value is set
*/
public abstract String getStringProperty(final String propertyName);
/**
* To set the class loader to be used in all further marshalling, unmarshalling
* and other actions.
* @param classLoader the ClassLoader instance to use
*/
public abstract void setClassLoader(final ClassLoader classLoader);
/**
* To set the {@link XMLClassDescriptorResolver} to be used. Be aware, that the
* XMLClassDescriptorResolver instance holds a descriptor cache!! Maybe change it
* to have the descriptor cache as part of the context?
* @param xmlClassDescriptorResolver the {@link XMLClassDescriptorResolver} to use
*/
public abstract void setXMLClassDescriptorResolver(
final XMLClassDescriptorResolver xmlClassDescriptorResolver);
/**
* To specify which {@link Introspector}?is to be used.
* @param introspector {@link Introspector} to be used
*/
public abstract void setIntrospector(final Introspector introspector);
/**
* To get the ClassLoader to use for loading resources.
* @return the ClassLoader to use
*/
public abstract ClassLoader getClassLoader();
/**
* Get lenient id validation flag.
* @return lenient id validation flag
*/
public abstract boolean getLenientIdValidation();
/**
* Get lenient sequence order flag.
* @return lenient sequence order flag
*/
public abstract boolean getLenientSequenceOrder();
/**
* Get load package mapping flag.
* @return load package mapping flag
*/
public abstract Boolean getLoadPackageMapping();
/**
* To set the load package mapping flag.
* @param loadPackageMapping the load package mapping flag
*/
public abstract void setLoadPackageMapping(final Boolean loadPackageMapping);
/**
* To get use-introspection flag.
* @return use-introspection flag
*/
public abstract Boolean getUseIntrospector();
/**
* To set use-introspection flag.
* @param useIntrospector use-introspection flag
*/
public abstract void setUseIntrospector(final Boolean useIntrospector);
/**
* To get marshalling-validation flag.
* @return marshalling-validation flag
*/
public abstract boolean marshallingValidation();
/**
* To get strict-element flag.
* @return strict-element flag
*/
public abstract boolean strictElements();
}