The problem is your custom plugin is declared as abstract, so Struts can't instantiate it:
--- public abstract class LoggingPlugin implements PlugIn { --- Don On 4/19/06, Alan Treece <[EMAIL PROTECTED]> wrote: > > Many thanks for those that have replied to my earlier emails for > help... Hopefully once I get this one figured out I'll be on the way > to getting my perl to Struts conversion complete... FYI... I've taken > the time to migrate from Struts v1.1 to v1.2.9 so this issue is > based on that code base. > > Part of the app I'm converting already had some Java/Struts v1.1 > code. Some of that code included some custom plugins which worked as > expected with v1.1. Here's the snippet from the struts-config.xml > file that defines a plugin: > > <plug-in className="com.sun.myPlugin.plugins.LoggingPlugin"> > <set-property property="logging.config.file" > value="/WEB-INF/classes/logging-config.xml"/> > </plug-in> > > > Here's the actual custom plugin: > > > package com.sun.myPlugin.plugins; > > import org.apache.struts.action.PlugIn; > import org.apache.struts.config.PlugInConfig; > import org.apache.struts.action.ActionServlet; > import org.apache.struts.config.impl.ModuleConfigImpl; > import javax.servlet.ServletException; > import javax.xml.parsers.FactoryConfigurationError; > > import org.apache.log4j.Logger; > import org.apache.log4j.LogManager; > import org.apache.log4j.xml.DOMConfigurator; > > /** > * Plugin for initializing logging for the SS-CDS implementation. Will > configure > * logging for the entire VM for a given logging API implementation. > */ > public abstract class LoggingPlugin implements PlugIn { > private final static String DEFAULT_CONFIG_FILE = "/sso/ > myPlugin6/WEB-INF/classes/logging-config.xml"; > private final Logger log_ = LogManager.getLogger(getClass()); > > /** Creates a new instance of LoggingPlugin */ > public LoggingPlugin() { > } > /** > * Attempt to finalize the logging component before system > shutdown. Basically > * we're trying to get complete log files before shutdown. In > the case of > * an XMLFormatter, this is necessary to try to get complete XML > output in > * the log file. Will help with reading the log file output. > */ > public void destroy() { > log_.info("Finalizing log4j."); > try { > // attempt to finalize logging > LogManager.shutdown(); > } > catch (Exception ignore) { > // unable to finalize logging, may have > // corrupt or incomplete log files > } > } > /** > * Initialize the plugin. Reads the configuration file from the > file system > * and attempts to configure log4j using that file. > */ > public void init(ActionServlet actionServlet, ModuleConfigImpl > applicationConfig) throws ServletException { > log_.info(" start initializing the Log4j"); > > //get the log configuration file > PlugInConfig[] configs = applicationConfig.findPlugInConfigs(); > String configFile = DEFAULT_CONFIG_FILE; > // obtain the configuration file information from the plug-in > // if no file is defined, an error will be generated and > logging will not > // be configured for this system. > // See the Struts Configuration file (struts-config.xml) and > the struts > // api documentation for instructions on how to define > plugins and > // properties on plugins. > for(int i = 0; i < configs.length; i ++) { > if(configs[i].getClassName().equals(this.getClass > ().getName())) { > configFile = (String)configs[i].getProperties().get > ("logging.config.file"); > } > } > if (configFile == null || configFile.length() ==0) { > String msg = "log configuration file name (" + > configFile + ") is not in configuration file"; > log_.fatal(msg); > throw new ServletException(msg); > } > //get the real path by concatenating the web xml directory > String fullName = actionServlet.getServletContext > ().getRealPath("/") + configFile; > > //Configure log4j > try { > DOMConfigurator.configure(fullName); > } > catch( FactoryConfigurationError fce) { > System.out.println("Unable to configure log4j error is"); > fce.printStackTrace(System.out); > throw new ServletException("DOMConfiguration failed"); > } > log_.info(" finished initializing the Log4j"); > } > } > > > And here's the error(s) when starting the app: > > > failure: WEB2798: [] ServletContext.log(): action: null > java.lang.InstantiationException > at > sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance > (InstantiationExceptionConstructorAccessorImpl.java:30) > at java.lang.reflect.Constructor.newInstance > (Constructor.java:274) > at java.lang.Class.newInstance0(Class.java:308) > at java.lang.Class.newInstance(Class.java:261) > at org.apache.struts.util.RequestUtils.applicationInstance > (RequestUtils.java:143) > at org.apache.struts.action.ActionServlet.initModulePlugIns > (ActionServlet.java:846) > at org.apache.struts.action.ActionServlet.init > (ActionServlet.java:336) > at javax.servlet.GenericServlet.init(GenericServlet.java:256) > at org.apache.catalina.core.StandardWrapper.loadServlet > (StandardWrapper.java:921) > at org.apache.catalina.core.StandardWrapper.load > (StandardWrapper.java:813) > at org.apache.catalina.core.StandardContext.loadOnStartup > (StandardContext.java:3478) > at org.apache.catalina.core.StandardContext.start > (StandardContext.java:3760) > at com.iplanet.ias.web.WebModule.start(WebModule.java:251) > at org.apache.catalina.core.ContainerBase.start > (ContainerBase.java:1133) > at org.apache.catalina.core.StandardHost.start > (StandardHost.java:652) > at org.apache.catalina.core.ContainerBase.start > (ContainerBase.java:1133) > at org.apache.catalina.core.StandardEngine.start > (StandardEngine.java:355) > at org.apache.catalina.startup.Embedded.start(Embedded.java: > 995) > at com.iplanet.ias.web.WebContainer.start(WebContainer.java: > 431) > at com.iplanet.ias.web.WebContainer.startInstance > (WebContainer.java:500) > at com.iplanet.ias.server.J2EERunner.confPostInit > (J2EERunner.java:161) > > warning: StandardWrapper[:action]: WEB2795: Marking servlet action as > unavailable > failure: WebModule[]: WEB2783: Servlet threw load() exception > javax.servlet.UnavailableException > at org.apache.struts.action.ActionServlet.initModulePlugIns > (ActionServlet.java:880) > at org.apache.struts.action.ActionServlet.init > (ActionServlet.java:336) > at javax.servlet.GenericServlet.init(GenericServlet.java:256) > at org.apache.catalina.core.StandardWrapper.loadServlet > (StandardWrapper.java:921) > at org.apache.catalina.core.StandardWrapper.load > (StandardWrapper.java:813) > at org.apache.catalina.core.StandardContext.loadOnStartup > (StandardContext.java:3478) > at org.apache.catalina.core.StandardContext.start > (StandardContext.java:3760) > at com.iplanet.ias.web.WebModule.start(WebModule.java:251) > at org.apache.catalina.core.ContainerBase.start > (ContainerBase.java:1133) > at org.apache.catalina.core.StandardHost.start > (StandardHost.java:652) > at org.apache.catalina.core.ContainerBase.start > (ContainerBase.java:1133) > at org.apache.catalina.core.StandardEngine.start > (StandardEngine.java:355) > at org.apache.catalina.startup.Embedded.start(Embedded.java: > 995) > at com.iplanet.ias.web.WebContainer.start(WebContainer.java: > 431) > at com.iplanet.ias.web.WebContainer.startInstance > (WebContainer.java:500) > at com.iplanet.ias.server.J2EERunner.confPostInit > (J2EERunner.java:161) > > > I found a Struts web site earlier that talks about migrating to > different versions, but I'll need to track it down again. Once I find > it I'll start reading there to seed if there is something concerning > this. But, any pointers this fine alias could pass on would be > appreciated. > > > Thanks, ajTreece > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >