Author: carnold Date: Wed Apr 25 22:16:04 2007 New Revision: 532611 URL: http://svn.apache.org/viewvc?view=rev&rev=532611 Log: Bug 42094: Refactor to use UnrecognizedElementHandler, o.a.l.xml.PluginConfigurator moved to o.a.l.plugins
Added: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java - copied, changed from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java logging/sandbox/log4j/component/src/main/java/org/apache/log4j/xml/UnrecognizedElementHandler.java - copied unchanged from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/UnrecognizedElementHandler.java logging/sandbox/log4j/component/src/main/resources/org/ logging/sandbox/log4j/component/src/main/resources/org/apache/ logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/ logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/plugins/ logging/sandbox/log4j/component/src/main/resources/org/apache/log4j/plugins/log4j.dtd - copied unchanged from r532605, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/log4j.dtd logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java - copied, changed from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java - copied, changed from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml - copied, changed from r532603, logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml Removed: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/xml/PluginConfigurator.java logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml Modified: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java Modified: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java?view=diff&rev=532611&r1=532610&r2=532611 ============================================================================== --- logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java (original) +++ logging/sandbox/log4j/component/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java Wed Apr 25 22:16:04 2007 @@ -20,6 +20,8 @@ import org.apache.log4j.helpers.LogLog; import org.apache.log4j.or.ObjectRenderer; import org.apache.log4j.or.RendererMap; +import org.apache.log4j.plugins.Plugin; +import org.apache.log4j.plugins.PluginConfigurator; import org.apache.log4j.plugins.PluginRegistry; import org.apache.log4j.scheduler.Scheduler; import org.apache.log4j.spi.ErrorItem; @@ -29,7 +31,10 @@ import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.LoggerRepositoryEventListener; import org.apache.log4j.spi.LoggerRepositoryEx; +import org.apache.log4j.spi.OptionHandler; import org.apache.log4j.spi.RendererSupport; +import org.apache.log4j.xml.UnrecognizedElementHandler; +import org.w3c.dom.Element; import java.util.ArrayList; import java.util.Enumeration; @@ -37,6 +42,7 @@ import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Vector; @@ -46,7 +52,9 @@ * and implementing the newly added capabilities. */ public final class LoggerRepositoryExImpl - implements LoggerRepositoryEx, RendererSupport { + implements LoggerRepositoryEx, + RendererSupport, + UnrecognizedElementHandler { /** * Wrapped logger repository. @@ -579,6 +587,32 @@ public LoggerFactory getLoggerFactory() { return loggerFactory; } + + /** [EMAIL PROTECTED] */ + public boolean parseUnrecognizedElement( + final Element element, + final Properties props) throws Exception { + if ("plugin".equals(element.getNodeName())) { + OptionHandler instance = + PluginConfigurator.parseElement(element, props, Plugin.class); + if (instance instanceof Plugin) { + Plugin plugin = (Plugin) instance; + String pluginName = PluginConfigurator.subst(element.getAttribute("name"), props); + if (pluginName.length() > 0) { + plugin.setName(pluginName); + } + getPluginRegistry().addPlugin(plugin); + plugin.setLoggerRepository(this); + + LogLog.debug("Pushing plugin on to the object stack."); + instance.activateOptions(); + return true; + } + } + return false; + } + + /** * Implementation of RendererSupportImpl if not Copied: logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java (from r532603, logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java) URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java?view=diff&rev=532611&p1=logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java&r1=532603&p2=logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java&r2=532611 ============================================================================== --- logging/log4j/branches/v1_2-branch/src/java/org/apache/log4j/xml/DOMConfigurator.java (original) +++ logging/sandbox/log4j/component/src/main/java/org/apache/log4j/plugins/PluginConfigurator.java Wed Apr 25 22:16:04 2007 @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.log4j.xml; +package org.apache.log4j.plugins; import org.apache.log4j.Appender; import org.apache.log4j.Layout; @@ -37,11 +37,15 @@ import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.spi.OptionHandler; import org.apache.log4j.spi.RendererSupport; +import org.apache.log4j.xml.DOMConfigurator; +import org.apache.log4j.xml.SAXErrorHandler; +import org.apache.log4j.xml.UnrecognizedElementHandler; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -57,34 +61,13 @@ import java.util.Hashtable; import java.util.Properties; -// Contributors: Mark Womack -// Arun Katkere - /** - Use this class to initialize the log4j environment using a DOM tree. - - <p>The DTD is specified in <a - href="log4j.dtd"><b>log4j.dtd</b></a>. - - <p>Sometimes it is useful to see how log4j is reading configuration - files. You can enable log4j internal logging by defining the - <b>log4j.debug</b> variable on the java command - line. Alternatively, set the <code>debug</code> attribute in the - <code>log4j:configuration</code> element. As in -<pre> - <log4j:configuration <b>debug="true"</b> xmlns:log4j="http://jakarta.apache.org/log4j/"> - ... - </log4j:configuration> -</pre> - - <p>There are sample XML files included in the package. - - @author Christopher Taylor - @author Ceki Gülcü - @author Anders Kristensen - - @since 0.8.3 */ -public class DOMConfigurator implements Configurator { + * This is a duplicate (with minor modifications) + * of the log4j 1.2.15 DOMConfigurator + * renamed for use with earlier versions of log4j. + * +*/ +public class PluginConfigurator implements Configurator { static final String CONFIGURATION_TAG = "log4j:configuration"; static final String OLD_CONFIGURATION_TAG = "configuration"; @@ -122,18 +105,18 @@ // key: appenderName, value: appender - Hashtable appenderBag; + private Hashtable appenderBag; - Properties props; - LoggerRepository repository; + private Properties props; + private LoggerRepository repository; - protected LoggerFactory catFactory = null; + private LoggerFactory catFactory = null; /** No argument constructor. */ public - DOMConfigurator () { + PluginConfigurator () { appenderBag = new Hashtable(); } @@ -957,6 +940,7 @@ propSetter.setProperty(name, value); } + /** * Creates an OptionHandler and processes any nested param elements * but does not call activateOptions. If the class also supports @@ -1001,21 +985,50 @@ return null; } -} + private static class XMLWatchdog extends FileWatchdog { + XMLWatchdog(String filename) { + super(filename); + } -class XMLWatchdog extends FileWatchdog { + /** + Call [EMAIL PROTECTED] PropertyConfigurator#configure(String)} with the + <code>filename</code> to reconfigure log4j. */ + public + void doOnChange() { + new PluginConfigurator().doConfigure(filename, + LogManager.getLoggerRepository()); + } + } + + + /** + * An [EMAIL PROTECTED] EntityResolver} specifically designed to return + * <code>log4j.dtd</code> which is embedded within the log4j jar + * file. + * + * @author Paul Austin + * */ + private static class Log4jEntityResolver implements EntityResolver { + + public InputSource resolveEntity (String publicId, String systemId) { + if (systemId.endsWith("log4j.dtd")) { + Class clazz = getClass(); + InputStream in = Log4jEntityResolver.class.getResourceAsStream("log4j.dtd"); + if (in == null) { + LogLog.error("Could not find [log4j.dtd]. Used [" + clazz.getClassLoader() + + "] class loader in the search."); + return null; + } else { + return new InputSource(in); + } + } else { + return null; + } + } + } - XMLWatchdog(String filename) { - super(filename); - } - /** - Call [EMAIL PROTECTED] PropertyConfigurator#configure(String)} with the - <code>filename</code> to reconfigure log4j. */ - public - void doOnChange() { - new DOMConfigurator().doConfigure(filename, - LogManager.getLoggerRepository()); - } } + + Copied: logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java (from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java) URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java&r1=532603&p2=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java&r2=532611 ============================================================================== --- logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/MockReceiver.java (original) +++ logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/MockReceiver.java Wed Apr 25 22:16:04 2007 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.log4j.xml; +package org.apache.log4j.plugins; import org.apache.log4j.plugins.PluginSkeleton; Copied: logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java (from r532603, logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java) URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java&r1=532603&p2=logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java&r2=532611 ============================================================================== --- logging/sandbox/log4j/component/src/test/java/org/apache/log4j/xml/PluginConfiguratorTest.java (original) +++ logging/sandbox/log4j/component/src/test/java/org/apache/log4j/plugins/PluginConfiguratorTest.java Wed Apr 25 22:16:04 2007 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.log4j.xml; +package org.apache.log4j.plugins; import junit.framework.TestCase; import org.apache.log4j.LogManager; Copied: logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml (from r532603, logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml) URL: http://svn.apache.org/viewvc/logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml?view=diff&rev=532611&p1=logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml&r1=532603&p2=logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml&r2=532611 ============================================================================== --- logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/xml/plugins1.xml (original) +++ logging/sandbox/log4j/component/src/test/resources/org/apache/log4j/plugins/plugins1.xml Wed Apr 25 22:16:04 2007 @@ -15,9 +15,9 @@ See the License for the specific language governing permissions and limitations under the License. --> -<!DOCTYPE log4j:configuration > +<!DOCTYPE log4j:configuration SYSTEM 'http://logging.apache.org/log4j/log4j.dtd'> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true"> - <plugin name="mock1" class="org.apache.log4j.xml.MockReceiver"> + <plugin name="mock1" class="org.apache.log4j.plugins.MockReceiver"> <param name="Port" value="4560"/> <param name="Host" value="127.0.0.1" /> </plugin> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]