org.apache.xmlbeans.XmlFactoryHook Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of commons-xmlbeans Show documentation
Show all versions of commons-xmlbeans Show documentation
The Apache Commons Codec package contains simple encoder and decoders for
various formats such as Base64 and Hexadecimal. In addition to these
widely used encoders and decoders, the codec package also maintains a
collection of phonetic encoding utilities.
The newest version!
/* Copyright 2004 The Apache Software Foundation
*
* 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.apache.xmlbeans;
import org.w3c.dom.Node;
import org.w3c.dom.DOMImplementation;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.lang.ref.SoftReference;
import javax.xml.stream.XMLStreamReader;
import org.apache.xmlbeans.xml.stream.XMLInputStream;
import org.apache.xmlbeans.xml.stream.XMLStreamException;
/**
* A hook for the XML Bean Factory mechanism.
* Provided for advanced users who wish to provide their own
* implementation of the Factory.parse methods. This is used, for example,
* to defer reading XML streams until needed.
*
* To use the hook, call XmlFactoryHook.ThreadContext.setHook(), passing
* your own XmlFactoryHook implementation. Then every call to a Factory
* method will be delgated to your hook.
*
*
* MyHook hook = new MyHook();
* XmlFactoryHook.ThreadContext.setHook(hook);
* // this results in a call to hook.parse(...)
* XmlObject.Factory.parse(new File("test.xml"));
*
*
* If the hook needs to turn around and invoke the built-in parsers, then
* it should do so by calling the appropriate method on the passed
* SchemaTypeLoader. Since SchemaTypeLoader.parse() methods delegate
* to the registered hook, a hook that wishes to actually invoke the
* default parser without having itself called back again should
* unregister itself before calling loader.parse(), and then re-register
* itself again after the call.
*
* void parse(SchemaTypeLoader loader, ...)
* {
* XmlFactoryHook remember = XmlFactoryHook.ThreadContext.getHook();
* XmlFactoryHook.ThreadContext.setHook(null);
* loader.parse(...); // isn't hooked.
* XmlFactoryHook.ThreadContext.setHook(remember);
* }
*
*/
public interface XmlFactoryHook
{
/** Hooks Factory.newInstance calls */
public XmlObject newInstance ( SchemaTypeLoader loader, SchemaType type, XmlOptions options );
/** Hooks Factory.parse calls */
public XmlObject parse ( SchemaTypeLoader loader, String xmlText, SchemaType type, XmlOptions options ) throws XmlException;
/** Hooks Factory.parse calls */
public XmlObject parse ( SchemaTypeLoader loader, InputStream jiois, SchemaType type, XmlOptions options ) throws XmlException, IOException;
/** Hooks Factory.parse calls */
public XmlObject parse ( SchemaTypeLoader loader, XMLStreamReader xsr, SchemaType type, XmlOptions options ) throws XmlException;
/** Hooks Factory.parse calls */
public XmlObject parse ( SchemaTypeLoader loader, Reader jior, SchemaType type, XmlOptions options ) throws XmlException, IOException;
/** Hooks Factory.parse calls */
public XmlObject parse ( SchemaTypeLoader loader, Node node, SchemaType type, XmlOptions options ) throws XmlException;
/** Hooks Factory.parse calls
* @deprecated XMLInputStream was deprecated by XMLStreamReader from STaX - jsr173 API.
*/
public XmlObject parse ( SchemaTypeLoader loader, XMLInputStream xis, SchemaType type, XmlOptions options ) throws XmlException, XMLStreamException;
/** Hooks Factory.newXmlSaxHandler calls */
public XmlSaxHandler newXmlSaxHandler ( SchemaTypeLoader loader, SchemaType type, XmlOptions options );
/** Hooks Factory.newDomImplementation calls */
public DOMImplementation newDomImplementation ( SchemaTypeLoader loader, XmlOptions options );
/**
* Used to manage the XmlFactoryHook for the current thread.
*/
public final static class ThreadContext
{
private static ThreadLocal threadHook = new ThreadLocal();
public static void clearThreadLocals() {
threadHook.remove();
}
/**
* Returns the current thread's hook, or null if none.
*/
public static XmlFactoryHook getHook()
{
SoftReference softRef = (SoftReference)threadHook.get();
return softRef==null ? null : (XmlFactoryHook)softRef.get();
}
/**
* Sets the hook for the current thread.
*/
public static void setHook(XmlFactoryHook hook)
{
threadHook.set(new SoftReference(hook));
}
// provided to prevent unwanted construction
private ThreadContext()
{
}
}
}