Author: skitching
Date: Tue Feb 8 18:40:19 2005
New Revision: 152977
URL: http://svn.apache.org/viewcvs?view=rev&rev=152977
Log:
Major rework.
Added:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectFactory.java
- copied, changed from r151291,
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectCreationFactory.java
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectFactory.java
- copied, changed from r151291,
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectCreationFactory.java
Removed:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectCreationFactory.java
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectCreationFactory.java
Modified:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java
(contents, props changed)
Copied:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectFactory.java
(from r151291,
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectCreationFactory.java)
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectFactory.java?view=diff&rev=152977&p1=jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectCreationFactory.java&r1=151291&p2=jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectFactory.java&r2=152977
==============================================================================
---
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectCreationFactory.java
(original)
+++
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/AbstractObjectFactory.java
Tue Feb 8 18:40:19 2005
@@ -1,6 +1,6 @@
-/* $Id: $
+/* $Id$
*
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 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.
@@ -21,22 +21,31 @@
import org.apache.commons.digester2.ParseException;
/**
- * <p>Abstract base class for <code>ObjectCreationFactory</code>
- * implementations.</p>
+ * Abstract base class for <code>ObjectFactory</code> implementations.
+ * <p>
+ * Note that extending this abstract class rather than directly implementing
+ * the ObjectFactory interface provides much better "forward compatibility".
+ * Digester minor releases (2.x -> 2.y) guarantee not to break any classes that
+ * subclass this abstract class. However no such guarantee exists for classes
+ * that directly implement the ObjectFactory interface.
*/
-abstract public class AbstractObjectCreationFactory implements
ObjectCreationFactory {
- // --------------------------------------------------------- Public Methods
+abstract public class AbstractObjectFactory implements ObjectFactory {
/**
* <p>Factory method called by [EMAIL PROTECTED]
CreateObjectWithFactoryAction} to
- * supply an object based on the element's attributes.
+ * supply an object based.</p>
*
- * @param attributes the element's attributes
+ * <p>Note in particular that implementations of this method have the
+ * option of inspecting the element's attributes to determine what kind
+ * of object to create.</p>
*
- * @throws Exception any exception thrown will be propagated upwards
+ * @param context is the current parsing context.
+ * @param attributes is the current element's set of xml attributes.
+ *
+ * @throws ParseException if a problem of any sort occurs. Any such
+ * exception will terminate parsing.
*/
public abstract Object createObject(Context context, Attributes
attributes)
throws ParseException;
-
}
Modified:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java?view=diff&r1=152976&r2=152977
==============================================================================
---
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java
(original)
+++
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java
Tue Feb 8 18:40:19 2005
@@ -1,19 +1,19 @@
-/* $Id: $
+/* $Id$
+ *
+ * Copyright 2001-2005 The Apache Software Foundation.
*
- * Copyright 2001-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.commons.digester2.actions;
@@ -28,51 +28,95 @@
import org.apache.commons.digester2.ArrayStack;
/**
- * <p>Rule implementation that uses an [EMAIL PROTECTED]
ObjectCreationFactory} to create
- * a new object which it pushes onto the object stack. When the element is
- * complete, the object will be popped.</p>
+ * <p>An Action that uses an [EMAIL PROTECTED] ObjectFactory} to create a new
object
+ * which it pushes onto the object stack. When the element is complete, the
+ * object is popped from that stack.</p>
+ *
+ * <p>This action is intended in situations where instances of different
classes
+ * may be created and the CreateObjectAction is not sufficiently flexible. It
+ * does require a custom ObjectFactory implementation to be written in order to
+ * implement the logic which decides what class the new instance is created
+ * from.</p>
*
- * <p>This rule is intended in situations where the element's attributes are
- * needed before the object can be created. A common scenario is for the
- * ObjectCreationFactory implementation to use the attributes as parameters
- * in a call to either a factory method or to a non-empty constructor.
+ * <p>A common scenario is for the ObjectFactory implementation to use the
+ * xml attributes of the matched xml element as parameters in a call to either
+ * a factory method or to a non-empty constructor.</p>
*/
public class CreateObjectWithFactoryAction extends AbstractAction {
- // ----------------------------------------------------------- Fields
-
- /** Should exceptions thrown by the factory be ignored? */
- private boolean ignoreCreateExceptions;
- /** Stock to manage */
- private ArrayStack exceptionIgnoredStack;
+ // -----------------------------------------------------
+ // Instance Variables
+ // -----------------------------------------------------
- // ----------------------------------------------------------- Constructors
+ /**
+ * The object creation factory (if any) explicitly provided to a
+ * constructor. Note that (as per Action requirements) this value
+ * never changes during parsing; if this is initially null, and
+ * an ObjectFactory is later created, then that object is stored
+ * on the Context, not here.
+ */
+ protected ObjectFactory objectFactory = null;
/**
- * <p>Construct a factory create rule that will use the specified
- * class name to create an [EMAIL PROTECTED] ObjectCreationFactory} which
will
- * then be used to create an object and push it on the stack.</p>
+ * The Java class name of the ObjectCreationFactory to be created.
+ * This class must have a no-arguments constructor. Not relevant
+ * if creationFactory is non-null.
+ */
+ protected String factoryClassName = null;
+
+ /**
+ * The attribute containing an override class name if it is present.
+ */
+ protected String attributeName = null;
+
+ // -----------------------------------------------------------
+ // Constructors
+ // -----------------------------------------------------------
+
+ /**
+ * Construct a factory create rule using the given [EMAIL PROTECTED]
ObjectFactory}.
+ * <p>
+ * Exceptions thrown during the object creation process will be propagated.
+ *
+ * @param factory called on to create the object.
+ */
+ public CreateObjectWithFactoryAction(ObjectFactory factory) {
+ this.objectFactory = factory;
+ }
+
+ /**
+ * <p>Create an object that will use the specified class name to create
+ * an [EMAIL PROTECTED] ObjectFactory} which will then be used to create
an object
+ * and push it on the stack.</p>
+ *
+ * <p>The SAXHandler.getClassLoader method will be used to obtain a
+ * classloader to load the specified class through.</p>
*
* <p>Exceptions thrown during the object creation process will be
propagated.</p>
*
* @param className Java class name of the object creation factory class
*/
public CreateObjectWithFactoryAction(String className) {
- this(className, false);
+ this.factoryClassName = className;
}
/**
- * <p>Construct a factory create rule that will use the specified
- * class to create an [EMAIL PROTECTED] ObjectCreationFactory} which will
- * then be used to create an object and push it on the stack.</p>
+ * <p>Create an object that will use the specified class name to create
+ * an [EMAIL PROTECTED] ObjectFactory} which will then be used to create
an object
+ * and push it on the stack.</p>
*
* <p>Exceptions thrown during the object creation process will be
propagated.</p>
*
+ * <p>Note that this is equivalent to calling
+ * <code>CreateObjectWithFactoryAction(clazz.getName())</code>.
+ * In particular, the classloader associated with the clazz parameter
+ * is ignored.</p>
+ *
* @param clazz Java class name of the object creation factory class
*/
public CreateObjectWithFactoryAction(Class clazz) {
- this(clazz, false);
+ this.factoryClassName = clazz.getName();
}
/**
@@ -88,15 +132,21 @@
* override of the class name of the object creation factory to create.
*/
public CreateObjectWithFactoryAction(String className, String
attributeName) {
- this(className, attributeName, false);
+ this.factoryClassName = className;
+ this.attributeName = attributeName;
}
/**
* <p>Construct a factory create rule that will use the specified
* class (possibly overridden by the specified attribute if present)
- * to create an [EMAIL PROTECTED] ObjectCreationFactory}, which will then
be used
+ * to create an [EMAIL PROTECTED] ObjectFactory}, which will then be used
* to instantiate an object instance and push it onto the stack.</p>
*
+ * <p>Note that this is equivalent to calling
+ * <code>CreateObjectWithFactoryAction(clazz.getName(),
attributeName)</code>.
+ * In particular, the classloader associated with the clazz parameter
+ * is ignored.</p>
+ *
* <p>Exceptions thrown during the object creation process will be
propagated.</p>
*
* @param clazz Default Java class name of the factory class
@@ -104,137 +154,13 @@
* override of the class name of the object creation factory to create.
*/
public CreateObjectWithFactoryAction(Class clazz, String attributeName) {
- this(clazz, attributeName, false);
- }
-
- /**
- * <p>Construct a factory create rule using the given, already
instantiated,
- * [EMAIL PROTECTED] ObjectCreationFactory}.</p>
- *
- * <p>Exceptions thrown during the object creation process will be
propagated.</p>
- *
- * @param creationFactory called on to create the object.
- */
- public CreateObjectWithFactoryAction(ObjectCreationFactory
creationFactory) {
- this(creationFactory, false);
- }
-
- /**
- * Construct a factory create rule that will use the specified
- * class name to create an [EMAIL PROTECTED] ObjectCreationFactory} which
will
- * then be used to create an object and push it on the stack.
- *
- * @param className Java class name of the object creation factory class
- * @param ignoreCreateExceptions if true, exceptions thrown by the object
- * creation factory
- * will be ignored.
- */
- public CreateObjectWithFactoryAction(String className, boolean
ignoreCreateExceptions) {
- this(className, null, ignoreCreateExceptions);
- }
-
- /**
- * Construct a factory create rule that will use the specified
- * class to create an [EMAIL PROTECTED] ObjectCreationFactory} which will
- * then be used to create an object and push it on the stack.
- *
- * @param clazz Java class name of the object creation factory class
- * @param ignoreCreateExceptions if true, exceptions thrown by the
- * object creation factory
- * will be ignored.
- */
- public CreateObjectWithFactoryAction(Class clazz, boolean
ignoreCreateExceptions) {
- this(clazz, null, ignoreCreateExceptions);
- }
-
- /**
- * Construct a factory create rule that will use the specified
- * class name (possibly overridden by the specified attribute if present)
- * to create an [EMAIL PROTECTED] ObjectCreationFactory}, which will then
be used
- * to instantiate an object instance and push it onto the stack.
- *
- * @param className Default Java class name of the factory class
- * @param attributeName Attribute name which, if present, contains an
- * override of the class name of the object creation factory to create.
- * @param ignoreCreateExceptions if true, exceptions thrown by the object
- * creation factory will be ignored.
- */
- public CreateObjectWithFactoryAction(
- String className,
- String attributeName,
- boolean ignoreCreateExceptions) {
-
- this.className = className;
+ this.factoryClassName = clazz.getName();
this.attributeName = attributeName;
- this.ignoreCreateExceptions = ignoreCreateExceptions;
-
- }
-
-
- /**
- * Construct a factory create rule that will use the specified
- * class (possibly overridden by the specified attribute if present)
- * to create an [EMAIL PROTECTED] ObjectCreationFactory}, which will then
be used
- * to instantiate an object instance and push it onto the stack.
- *
- * @param clazz Default Java class name of the factory class
- * @param attributeName Attribute name which, if present, contains an
- * override of the class name of the object creation factory to create.
- * @param ignoreCreateExceptions if true, exceptions thrown by the object
- * creation factory will be ignored.
- */
- public CreateObjectWithFactoryAction(
- Class clazz,
- String attributeName,
- boolean ignoreCreateExceptions) {
-
- this(clazz.getName(), attributeName, ignoreCreateExceptions);
-
}
-
- /**
- * Construct a factory create rule using the given, already instantiated,
- * [EMAIL PROTECTED] ObjectCreationFactory}.
- *
- * @param creationFactory called on to create the object.
- * @param ignoreCreateExceptions if true, exceptions thrown by the object
- * creation factory will be ignored.
- */
- public CreateObjectWithFactoryAction(
- ObjectCreationFactory creationFactory,
- boolean ignoreCreateExceptions) {
-
- this.creationFactory = creationFactory;
- this.ignoreCreateExceptions = ignoreCreateExceptions;
- }
-
- // ----------------------------------------------------- Instance Variables
-
-
- /**
- * The attribute containing an override class name if it is present.
- */
- protected String attributeName = null;
-
-
- /**
- * The Java class name of the ObjectCreationFactory to be created.
- * This class must have a no-arguments constructor.
- */
- protected String className = null;
-
-
- /**
- * The object creation factory we will use to instantiate objects
- * as required based on the attributes specified in the matched XML
- * element.
- */
- protected ObjectCreationFactory creationFactory = null;
-
-
- // --------------------------------------------------------- Public Methods
-
+ // ---------------------------------------------------------
+ // Public Methods
+ // ---------------------------------------------------------
/**
* Process the beginning of this element.
@@ -242,156 +168,123 @@
* @param attributes The attribute list of this element
*/
public void begin(
- Context context, String namespace, String name, Attributes attributes)
+ Context context,
+ String namespace, String name, Attributes attributes)
throws ParseException {
-
Log log = context.getLogger();
-
- if (ignoreCreateExceptions) {
-
- if (exceptionIgnoredStack == null) {
- exceptionIgnoredStack = new ArrayStack();
- }
-
- try {
- Object instance =
- getFactory(context, attributes).createObject(context,
attributes);
-
- if (log.isDebugEnabled()) {
- log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
- "} New " + instance.getClass().getName());
- }
- context.push(instance);
- exceptionIgnoredStack.push(Boolean.FALSE);
-
- } catch (Exception e) {
- // log message and error
- if (log.isInfoEnabled()) {
- log.info("[CreateObjectWithFactoryAction] Create exception
ignored: " +
- ((e.getMessage() == null) ? e.getClass().getName() :
e.getMessage()));
- if (log.isDebugEnabled()) {
- log.debug("[CreateObjectWithFactoryAction] Ignored
exception:", e);
- }
- }
- exceptionIgnoredStack.push(Boolean.TRUE);
- }
-
- } else {
- Object instance = getFactory(context,
attributes).createObject(context, attributes);
-
- if (log.isDebugEnabled()) {
- log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
- "} New " + instance.getClass().getName());
- }
- context.push(instance);
+
+ ObjectFactory factory = getFactory(context, attributes);
+ Object instance = factory.createObject(context, attributes);
+
+ if (log.isDebugEnabled()) {
+ log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
+ "} New " + instance.getClass().getName());
}
+ context.push(instance);
}
-
/**
* Process the end of this element.
*/
public void end(
- Context context, String namespace, String name)
+ Context context, String namespace, String name)
throws ParseException {
-
Log log = context.getLogger();
- // check if object was created
- // this only happens if an exception was thrown and we're ignoring them
- if (
- ignoreCreateExceptions &&
- exceptionIgnoredStack != null &&
- !(exceptionIgnoredStack.empty())) {
-
- if (((Boolean) exceptionIgnoredStack.pop()).booleanValue()) {
- // creation exception was ignored
- // nothing was put onto the stack
- if (log.isTraceEnabled()) {
- log.trace("[CreateObjectWithFactoryAction] No creation so
no push so no pop");
- }
- return;
- }
- }
-
Object top = context.pop();
if (log.isDebugEnabled()) {
log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
"} Pop " + top.getClass().getName());
}
-
- }
-
-
- /**
- * Clean up after parsing is complete.
- */
- public void finishParse() throws ParseException {
- if (attributeName != null) {
- creationFactory = null;
- }
}
/**
* Render a printable version of this Rule.
*/
public String toString() {
-
StringBuffer sb = new StringBuffer("CreateObjectWithFactoryAction[");
- sb.append("className=");
- sb.append(className);
- sb.append(", attributeName=");
- sb.append(attributeName);
- if (creationFactory != null) {
- sb.append(", creationFactory=");
- sb.append(creationFactory);
+ if (objectFactory != null) {
+ sb.append(", objectFactory=");
+ sb.append(objectFactory);
+ } else {
+ sb.append("className=");
+ sb.append(factoryClassName);
+ sb.append(", attributeName=");
+ sb.append(attributeName);
}
sb.append("]");
return (sb.toString());
-
}
-
- // ------------------------------------------------------ Protected Methods
+ // ------------------------------------------------------
+ // Protected Methods
+ // ------------------------------------------------------
/**
- * Return an instance of our associated object creation factory,
- * creating one if necessary.
+ * Return an instance of our associated object factory,
+ * creating one if necessary. Factory instances created here are
+ * cached for future reuse by this Action instance (but other instances
+ * of this same class will create their own ObjectFactory instances).
*
* @param attributes Attributes passed to our factory creation element
*
* @exception Exception if any error occurs
*/
- protected ObjectCreationFactory getFactory(
+ protected ObjectFactory getFactory(
Context context, Attributes attributes)
throws ParseException {
+
+ if (objectFactory != null) {
+ // if objectFactory is set, then className and attributeName
+ // will always be null...
+ return objectFactory;
+ }
Log log = context.getLogger();
- if (creationFactory == null) {
- String realClassName = className;
- if (attributeName != null) {
- String value = attributes.getValue(attributeName);
- if (value != null) {
- realClassName = value;
- }
+ String realClassName = factoryClassName;
+ if (attributeName != null) {
+ String overrideClassName = attributes.getValue(attributeName);
+ if (overrideClassName != null) {
+ realClassName = overrideClassName;
}
+ }
+
+ // now retrieve the cached ObjectFactory for this classname
+ ObjectFactory factory =
+ (ObjectFactory) context.getInstanceData(this, "objectFactory");
+
+ if (factory == null) {
+ // this rule instance has never created a factory of this class
if (log.isDebugEnabled()) {
log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
"} New factory " + realClassName);
}
+
try {
- Class clazz = context.getClassLoader().loadClass(realClassName);
- creationFactory = (ObjectCreationFactory)
- clazz.newInstance();
+ // create the factory object
+ Class clazz =
context.getClassLoader().loadClass(realClassName);
+ factory = (ObjectFactory) clazz.newInstance();
+
+ // and cache the object for later retrieval by this instance
+ context.putInstanceData(this, "objectFactory", factory);
} catch(ClassNotFoundException ex) {
- throw new ParseException("Unable to load class '" +
realClassName + "'", ex);
+ throw new ParseException(
+ "Unable to load class '" + realClassName + "'", ex);
} catch(InstantiationException ex) {
- throw new ParseException("Unable to create instance of class
'" + realClassName + "'", ex);
+ throw new ParseException(
+ "Unable to create instance of class '" + realClassName +
"'", ex);
} catch(IllegalAccessException ex) {
- throw new ParseException("Unable to access constructor of
class '" + realClassName + "'", ex);
+ throw new ParseException(
+ "Unable to access constructor of class '" + realClassName
+ "'", ex);
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("[CreateObjectWithFactoryAction]{" +
context.getMatchPath() +
+ "} Reusing cached factory " + realClassName);
}
}
- return creationFactory;
- }
+
+ return factory;
+ }
}
Propchange:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/CreateObjectWithFactoryAction.java
------------------------------------------------------------------------------
svn:keywords = Id
Copied:
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectFactory.java
(from r151291,
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectCreationFactory.java)
URL:
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectFactory.java?view=diff&rev=152977&p1=jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectCreationFactory.java&r1=151291&p2=jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectFactory.java&r2=152977
==============================================================================
---
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectCreationFactory.java
(original)
+++
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/actions/ObjectFactory.java
Tue Feb 8 18:40:19 2005
@@ -1,6 +1,6 @@
-/* $Id: $
+/* $Id$
*
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 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.
@@ -17,33 +17,46 @@
package org.apache.commons.digester2.actions;
-
import org.xml.sax.Attributes;
-
import org.apache.commons.digester2.Context;
import org.apache.commons.digester2.AbstractAction;
import org.apache.commons.digester2.ParseException;
/**
- * <p> Interface for use with [EMAIL PROTECTED] FactoryCreateAction}.
- * The rule calls [EMAIL PROTECTED] #createObject} to create an object
- * to be pushed onto the <code>Digester</code> stack
- * whenever it is matched.</p>
- *
- * <p> [EMAIL PROTECTED] AbstractObjectCreationFactory} is an abstract
- * implementation suitable for creating anonymous
- * <code>ObjectCreationFactory</code> implementations.
+ * Interface for use with [EMAIL PROTECTED] CreateObjectWithFactoryAction}.
+ * <p>
+ * When that action is fired, it calls method [EMAIL PROTECTED] #createObject}
on some
+ * implementation of this interface to create an object to be pushed onto the
+ * <code>Digester</code> stack.
+ * <p>
+ * Class [EMAIL PROTECTED] AbstractObjectFactory} is an abstract
implementation
+ * suitable for creating anonymous <code>ObjectFactory</code> implementations.
+ * <p>
+ * <strong>IMPORTANT NOTE</strong>: Anyone implementing a custom ObjectFactory
+ * is strongly encouraged to subclass AbstractObjectFactory rather than
+ * implement this interface directly. Digester minor releases (2.x -> 2.y)
+ * guarantee that subclasses of AbstractObjectFactory will not be broken.
+ * However the ObjectFactory interface <i>may</i> change in minor releases,
+ * which will break any class which implements this interface directly.
*/
-public interface ObjectCreationFactory {
+public interface ObjectFactory {
/**
- * <p>Factory method called by [EMAIL PROTECTED] FactoryCreateAction} to
supply an
- * object based on the element's attributes.
+ * <p>Factory method called by [EMAIL PROTECTED]
CreateObjectWithFactoryAction} to
+ * supply an object based.</p>
+ *
+ * <p>Note in particular that implementations of this method have the
+ * option of inspecting the element's attributes to determine what kind
+ * of object to create. Note also that when accessing attributes that are
+ * not in any namespace, the empty string should be passed eg
+ * <code>String value = attributes.getValue("", "attrName");</code>.</p>
*
- * @param attributes the element's attributes
+ * @param context is the current parsing context.
+ * @param attributes is the current element's set of xml attributes.
*
- * @throws Exception any exception thrown will be propagated upwards
+ * @throws ParseException if a problem of any sort occurs. Any such
+ * exception will terminate parsing.
*/
public Object createObject(Context context, Attributes attributes)
throws ParseException;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]