[jboss-cvs] JBossAS SVN: r57918 - in branches/JBoss_4_0_5_GA_JBAS-3790/tomcat: . src/main/org/jboss/web src/main/org/jboss/web/jsf src/main/org/jboss/web/jsf/integration src/main/org/jboss/web/jsf/integration/config src/main/org/jboss/web/tomcat src/main/org/jboss/web/tomcat/tc6 src/main/org/jboss/web/tomcat/tc6/jasper src/resources
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Oct 30 09:22:15 EST 2006
Author: stan.silvert at jboss.com
Date: 2006-10-30 09:22:11 -0500 (Mon, 30 Oct 2006)
New Revision: 57918
Added:
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/JBossJSFConfigureListener.java
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/Log4JConversionFilter.java
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/JspServletOptions.java
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/TagLibCache.java
Modified:
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/build.xml
branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/resources/web.xml
Log:
Add JSF 1.2, JSP 2.1, and JSTL 1.2
Modified: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/build.xml
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/build.xml 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/build.xml 2006-10-30 14:22:11 UTC (rev 57918)
@@ -54,7 +54,9 @@
<!-- The combined library classpath -->
<path id="library.classpath">
<path refid="sun.servlet.classpath"/>
+ <path refid="sun.jsf.classpath"/>
<path refid="apache.commons.classpath"/>
+ <path refid="apache.log4j.classpath"/>
<path refid="junit.junit.classpath"/>
<path refid="dom4j.dom4j.classpath"/>
<path refid="oswego.concurrent.classpath"/>
@@ -152,8 +154,8 @@
<mkdir dir="${build.classes}"/>
<javac destdir="${build.classes}"
optimize="${javac.optimize}"
- target="${javac.target}"
- source="${javac.source}"
+ target="1.5"
+ source="1.5"
debug="${javac.debug}"
depend="${javac.depend}"
verbose="${javac.verbose}"
@@ -223,34 +225,36 @@
<copy todir="${build.deploy}/jbossweb-tomcat55.sar">
<fileset dir="${apache.tomcat55.lib}">
<include name="*.jar"/>
+ <exclude name="jasper-*"/>
</fileset>
+ <fileset dir="${jboss.web.lib}">
+ <include name="el-api.jar"/>
+ <include name="jasper-jdt.jar"/>
+ <include name="jsp-api.jar"/>
+ </fileset>
</copy>
<copy todir="${build.deploy}/jbossweb-tomcat55.sar"
file="${apache.modeler.lib}/commons-modeler.jar" />
<copy todir="${build.deploy}/jbossweb-tomcat55.sar"
- file="${commons.el.lib}/commons-el.jar" />
+ file="${sun.jstl.lib}/jstl.jar" />
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs">
- <fileset dir="${apache.myfaces.lib}">
- <include name="jstl.jar"/>
- <include name="myfaces-api.jar"/>
- <include name="myfaces-impl.jar"/>
- </fileset>
- </copy>
+ <mkdir dir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"/>
+
+ <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs">
+ <fileset dir="${sun.jsf.lib}">
+ <include name="*.jar" />
+ </fileset>
+ </copy>
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"
- file="${apache.collections.lib}/commons-collections.jar" />
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"
- file="${apache.codec.lib}/commons-codec.jar" />
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"
- file="${apache.beanutils.lib}/commons-beanutils.jar" />
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"
- file="${apache.digester.lib}/commons-digester-1.6.jar" />
- <copy todir="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs"
- file="${apache.lang.lib}/commons-lang-2.1.jar" />
-
+ <!-- jar for jsf integration classes -->
+ <jar jarfile="${build.deploy}/jbossweb-tomcat55.sar/jsf-libs/jboss-faces.jar">
+ <fileset dir="${build.classes}">
+ <include name="org/jboss/web/jsf/integration/**"/>
+ </fileset>
+ </jar>
+
<jar jarfile="${build.deploy}/jbossweb-tomcat55.sar/tomcat55-service.jar"
manifest="${build.etc}/default.mf">
<!-- The service classes -->
@@ -261,6 +265,7 @@
<include name="org/jboss/web/tomcat/filters/**"/>
<include name="org/jboss/web/tomcat/servlets/**"/>
<include name="org/jboss/web/tomcat/tc5/**"/>
+ <include name="org/jboss/web/tomcat/tc6/**"/>
<include name="org/jboss/web/tomcat/security/**"/>
<include name="org/jboss/web/tomcat/statistics/**"/>
</fileset>
Added: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/JBossJSFConfigureListener.java
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/JBossJSFConfigureListener.java 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/JBossJSFConfigureListener.java 2006-10-30 14:22:11 UTC (rev 57918)
@@ -0,0 +1,96 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.web.jsf.integration.config;
+
+import com.sun.faces.config.ConfigureListener;
+import com.sun.faces.util.Util;
+import java.util.logging.Filter;
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.jsp.JspFactory;
+import org.apache.log4j.Logger;
+
+/**
+ * This ServletContextListener sets up a JBoss-specific environment for JSF
+ * and then delegates the rest of the setup to the JSF RI.
+ *
+ * @author Stan Silvert
+ */
+public class JBossJSFConfigureListener extends ConfigureListener
+{
+
+ private static Logger LOG = Logger.getLogger(JBossJSFConfigureListener.class);
+
+ public static final String SHOULD_LOG_CONFIG_MESSAGES = "com.sun.faces.displayConfiguration";
+
+ private ServletContext servletContext;
+
+ @Override
+ public void contextInitialized(ServletContextEvent event)
+ {
+ this.servletContext = event.getServletContext();
+
+ // If the pluginClass is not set, assume Log4J
+ if (System.getProperty("org.jboss.logging.Logger.pluginClass") == null)
+ {
+ setLog4J();
+ }
+
+ super.contextInitialized(event);
+ }
+
+ /**
+ * If Log4J is being used, set a filter that converts JSF RI java.util.logger
+ * messages to Log4J messages.
+ */
+ private void setLog4J()
+ {
+ Filter conversionFilter = new Log4JConversionFilter(logConfigMessages());
+
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.APPLICATION_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.CONFIG_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.CONTEXT_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.LIFECYCLE_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.RENDERKIT_LOGGER)
+ .setFilter(conversionFilter);
+ java.util.logging.Logger.getLogger(Util.FACES_LOGGER + Util.TAGLIB_LOGGER)
+ .setFilter(conversionFilter);
+ }
+
+ // should we log the configuration messages?
+ private boolean logConfigMessages()
+ {
+ String shouldLogConfigParam = this.servletContext.getInitParameter(SHOULD_LOG_CONFIG_MESSAGES);
+ return (shouldLogConfigParam != null) && (shouldLogConfigParam.equalsIgnoreCase("true"));
+ }
+
+}
Added: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/Log4JConversionFilter.java
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/Log4JConversionFilter.java 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/jsf/integration/config/Log4JConversionFilter.java 2006-10-30 14:22:11 UTC (rev 57918)
@@ -0,0 +1,159 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.web.jsf.integration.config;
+
+import com.sun.faces.util.Util;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.logging.Filter;
+import java.util.logging.Formatter;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
+import org.apache.log4j.Logger;
+import org.apache.log4j.Priority;
+
+/**
+ * This filter is used to convert java.util.logging messages from the JSF RI
+ * to Log4J messages.
+ *
+ * @author Stan Silvert
+ */
+public class Log4JConversionFilter implements Filter
+{
+
+ // cache Logger instances. Logger.getLogger() is known to be slow.
+ // See http://www.qos.ch/logging/thinkAgain.jsp
+ private Map<String, Logger> loggerCache = new HashMap<String, Logger>();
+
+ private Formatter formatter = new SimpleFormatter();
+
+ // should we log the INFO level config messages that tell about
+ // servlet context params?
+ private boolean logConfigMessages;
+
+ public Log4JConversionFilter(boolean logConfigMessages)
+ {
+ this.logConfigMessages = logConfigMessages;
+ }
+
+ private boolean isConfigStartupMessage(LogRecord record)
+ {
+ return record.getMessage().equals("jsf.config.listener.version") ||
+ record.getMessage().equals("jsf.config.listener.version.complete");
+ }
+
+ /**
+ * If the JSF RI message should be logged, convert the JDK 1.4
+ * LogRecord to a Log4J message.
+ *
+ * @return <code>false</code> because JDK 1.4 logging should not happen
+ * for JSF if this filter is active.
+ */
+ public boolean isLoggable(LogRecord record)
+ {
+ if (!logConfigMessages && isConfigStartupMessage(record)) return false;
+
+ Logger logger = getLogger(record);
+
+ if (record.getThrown() != null)
+ {
+ logWithThrowable(logger, record);
+ }
+ else
+ {
+ logWithoutThrowable(logger, record);
+ }
+
+ return false;
+ }
+
+ private void logWithThrowable(Logger logger, LogRecord record)
+ {
+ int loggedLevel = record.getLevel().intValue();
+ Object message = formatter.formatMessage(record);
+ Throwable throwable = record.getThrown();
+
+ if (loggedLevel == Level.INFO.intValue())
+ {
+ logger.info(message, throwable);
+ return;
+ }
+
+ if (loggedLevel == Level.WARNING.intValue())
+ {
+ logger.warn(message, throwable);
+ return;
+ }
+
+ if (loggedLevel == Level.SEVERE.intValue())
+ {
+ logger.fatal(message, throwable);
+ return;
+ }
+
+ logger.info(message, throwable);
+ }
+
+ private void logWithoutThrowable(Logger logger, LogRecord record)
+ {
+ int loggedLevel = record.getLevel().intValue();
+ Object message = formatter.formatMessage(record);
+
+ if (loggedLevel == Level.INFO.intValue())
+ {
+ logger.info(message);
+ return;
+ }
+
+ if (loggedLevel == Level.WARNING.intValue())
+ {
+ logger.warn(message);
+ return;
+ }
+
+ if (loggedLevel == Level.SEVERE.intValue())
+ {
+ logger.fatal(message);
+ return;
+ }
+
+ logger.info(message);
+ }
+
+ // get the Log4J logger corresponding to the java.util.logger.LogRecord
+ private Logger getLogger(LogRecord record)
+ {
+ String loggerName = record.getLoggerName();
+ Logger logger = loggerCache.get(loggerName);
+ if (logger == null)
+ {
+ logger = Logger.getLogger(loggerName);
+ loggerCache.put(loggerName, logger);
+ }
+
+ return logger;
+ }
+
+}
Added: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/JspServletOptions.java
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/JspServletOptions.java 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/JspServletOptions.java 2006-10-30 14:22:11 UTC (rev 57918)
@@ -0,0 +1,792 @@
+/*
+ * Copyright 1999,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.jboss.web.tomcat.tc6.jasper;
+
+import java.util.Properties;
+import java.util.Enumeration;
+import java.util.ArrayList;
+import java.util.Map;
+import java.io.File;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+
+import org.apache.jasper.Options;
+import org.apache.jasper.Constants;
+import org.apache.jasper.xmlparser.ParserUtils;
+import org.apache.jasper.compiler.TldLocationsCache;
+import org.apache.jasper.compiler.JspConfig;
+import org.apache.jasper.compiler.TagPluginManager;
+import org.apache.jasper.compiler.Localizer;
+import org.jboss.logging.Logger;
+
+/**
+ * Override the default JspServletOptions to externalize the jsp layer
+ * configuration. This overrides the default TagLibCache to the jboss version.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 57000 $
+ */
+public class JspServletOptions
+ implements Options
+{
+ static Logger log = Logger.getLogger(JspServletOptions.class);
+
+ private Properties settings = new Properties();
+
+ /**
+ * Is Jasper being used in development mode?
+ */
+ private boolean development = true;
+
+ /**
+ * Should Ant fork its java compiles of JSP pages.
+ */
+ public boolean fork = true;
+
+ /**
+ * Do you want to keep the generated Java files around?
+ */
+ private boolean keepGenerated = true;
+
+ /**
+ * Should white spaces between directives or actions be trimmed?
+ */
+ private boolean trimSpaces = false;
+
+ /**
+ * Determines whether tag handler pooling is enabled.
+ */
+ private boolean isPoolingEnabled = true;
+
+ /**
+ * Do you want support for "mapped" files? This will generate servlet that
+ * has a print statement per line of the JSP file. This seems like a really
+ * nice feature to have for debugging.
+ */
+ private boolean mappedFile = true;
+
+ /**
+ * Do you want stack traces and such displayed in the client's browser? If
+ * this is false, such messages go to the standard error or a log file if the
+ * standard error is redirected.
+ */
+ private boolean sendErrorToClient = false;
+
+ /**
+ * Do we want to include debugging information in the class file?
+ */
+ private boolean classDebugInfo = true;
+
+ /**
+ * Background compile thread check interval in seconds.
+ */
+ private int checkInterval = 0;
+
+ /**
+ * Is the generation of SMAP info for JSR45 debuggin suppressed?
+ */
+ private boolean isSmapSuppressed = false;
+
+ /**
+ * Should SMAP info for JSR45 debugging be dumped to a file?
+ */
+ private boolean isSmapDumped = false;
+
+ /**
+ * Are Text strings to be generated as char arrays?
+ */
+ private boolean genStringAsCharArray = false;
+
+ private boolean errorOnUseBeanInvalidClassAttribute = true;
+
+ /**
+ * I want to see my generated servlets. Which directory are they in?
+ */
+ private File scratchDir;
+
+ /**
+ * Need to have this as is for versions 4 and 5 of IE. Can be set from the
+ * initParams so if it changes in the future all that is needed is to have a
+ * jsp initParam of type ieClassId="<value>"
+ */
+ private String ieClassId = "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93";
+
+ /**
+ * What classpath should I use while compiling generated servlets?
+ */
+ private String classpath = null;
+
+ /**
+ * Compiler to use.
+ */
+ private String compiler = null;
+
+ /**
+ * The compiler class name.
+ */
+ private String compilerClassName = null;
+
+ /**
+ * Compiler target VM.
+ */
+ private String compilerTargetVM = "1.4";
+
+ /**
+ * The compiler source VM.
+ */
+ private String compilerSourceVM = "1.4";
+
+ /**
+ * Cache for the TLD locations
+ */
+ private TldLocationsCache tldLocationsCache = null;
+
+ /**
+ * Jsp config information
+ */
+ private JspConfig jspConfig = null;
+
+ /**
+ * TagPluginManager
+ */
+ private TagPluginManager tagPluginManager = null;
+
+ /**
+ * Java platform encoding to generate the JSP page servlet.
+ */
+ private String javaEncoding = "UTF8";
+
+ /**
+ * Modification test interval.
+ */
+ private int modificationTestInterval = 4;
+
+ private boolean ignoreAnnotations;
+
+
+
+ /**
+ * Is generation of X-Powered-By response header enabled/disabled?
+ */
+ private boolean xpoweredBy;
+
+
+ public boolean getIgnoreAnnotations()
+ {
+ return ignoreAnnotations;
+ }
+
+ public void setIgnoreAnnotations(boolean ignoreAnnotations)
+ {
+ this.ignoreAnnotations = ignoreAnnotations;
+ }
+
+ public String getProperty(String name)
+ {
+ return settings.getProperty(name);
+ }
+
+ public void setProperty(String name, String value)
+ {
+ if (name != null && value != null)
+ {
+ settings.setProperty(name, value);
+ }
+ }
+
+ /**
+ * Are we keeping generated code around?
+ */
+ public boolean getKeepGenerated()
+ {
+ return keepGenerated;
+ }
+
+ /**
+ * Should white spaces between directives or actions be trimmed?
+ */
+ public boolean getTrimSpaces()
+ {
+ return trimSpaces;
+ }
+
+ public boolean isPoolingEnabled()
+ {
+ return isPoolingEnabled;
+ }
+
+ /**
+ * Are we supporting HTML mapped servlets?
+ */
+ public boolean getMappedFile()
+ {
+ return mappedFile;
+ }
+
+ /**
+ * Should errors be sent to client or thrown into stderr?
+ */
+ public boolean getSendErrorToClient()
+ {
+ return sendErrorToClient;
+ }
+
+ /**
+ * Should class files be compiled with debug information?
+ */
+ public boolean getClassDebugInfo()
+ {
+ return classDebugInfo;
+ }
+
+ /**
+ * Background JSP compile thread check intervall
+ */
+ public int getCheckInterval()
+ {
+ return checkInterval;
+ }
+
+ /**
+ * Modification test interval.
+ */
+ public int getModificationTestInterval()
+ {
+ return modificationTestInterval;
+ }
+
+ /**
+ * Is Jasper being used in development mode?
+ */
+ public boolean getDevelopment()
+ {
+ return development;
+ }
+
+ /**
+ * Is the generation of SMAP info for JSR45 debuggin suppressed?
+ */
+ public boolean isSmapSuppressed()
+ {
+ return isSmapSuppressed;
+ }
+
+ /**
+ * Should SMAP info for JSR45 debugging be dumped to a file?
+ */
+ public boolean isSmapDumped()
+ {
+ return isSmapDumped;
+ }
+
+ /**
+ * Are Text strings to be generated as char arrays?
+ */
+ public boolean genStringAsCharArray()
+ {
+ return this.genStringAsCharArray;
+ }
+
+ /**
+ * Class ID for use in the plugin tag when the browser is IE.
+ */
+ public String getIeClassId()
+ {
+ return ieClassId;
+ }
+
+ /**
+ * What is my scratch dir?
+ */
+ public File getScratchDir()
+ {
+ return scratchDir;
+ }
+
+ /**
+ * What classpath should I use while compiling the servlets generated from
+ * JSP files?
+ */
+ public String getClassPath()
+ {
+ return classpath;
+ }
+
+ /**
+ * Is generation of X-Powered-By response header enabled/disabled?
+ */
+ public boolean isXpoweredBy()
+ {
+ return xpoweredBy;
+ }
+
+ /**
+ * Compiler to use.
+ */
+ public String getCompiler()
+ {
+ return compiler;
+ }
+
+ /**
+ * @see Options#getCompilerClassName
+ */
+ public String getCompilerClassName()
+ {
+ return compilerClassName;
+ }
+
+ /**
+ * @see Options#getCompilerTargetVM
+ */
+ public String getCompilerTargetVM()
+ {
+ return compilerTargetVM;
+ }
+
+ /**
+ * @see Options#getCompilerSourceVM
+ */
+ public String getCompilerSourceVM()
+ {
+ return compilerSourceVM;
+ }
+
+ public boolean getErrorOnUseBeanInvalidClassAttribute()
+ {
+ return errorOnUseBeanInvalidClassAttribute;
+ }
+
+ public void setErrorOnUseBeanInvalidClassAttribute(boolean b)
+ {
+ errorOnUseBeanInvalidClassAttribute = b;
+ }
+
+ public TldLocationsCache getTldLocationsCache()
+ {
+ return tldLocationsCache;
+ }
+
+ public void setTldLocationsCache(TldLocationsCache tldC)
+ {
+ tldLocationsCache = tldC;
+ }
+
+ public String getJavaEncoding()
+ {
+ return javaEncoding;
+ }
+
+ public boolean getFork()
+ {
+ return fork;
+ }
+
+ public JspConfig getJspConfig()
+ {
+ return jspConfig;
+ }
+
+ public TagPluginManager getTagPluginManager()
+ {
+ return tagPluginManager;
+ }
+
+ /**
+ * Is caching enabled (used for precompilation).
+ */
+ public boolean isCaching()
+ {
+ return false;
+ }
+
+ /**
+ * The web-application wide cache for the returned TreeNode
+ * by parseXMLDocument in TagLibraryInfoImpl.parseTLD,
+ * if isCaching returns true.
+ *
+ * @return the Map(String uri, TreeNode tld) instance.
+ */
+ public Map getCache()
+ {
+ return null;
+ }
+
+ /**
+ * Create an EmbeddedServletOptions object using data available from
+ * ServletConfig and ServletContext.
+ */
+ public JspServletOptions(ServletConfig config, ServletContext context)
+ {
+
+ Enumeration enumeration = config.getInitParameterNames();
+ while (enumeration.hasMoreElements())
+ {
+ String k = (String) enumeration.nextElement();
+ String v = config.getInitParameter(k);
+ setProperty(k, v);
+ }
+
+ // quick hack
+ String validating = config.getInitParameter("validating");
+ if ("false".equals(validating)) ParserUtils.validating = false;
+
+ String keepgen = config.getInitParameter("keepgenerated");
+ if (keepgen != null)
+ {
+ if (keepgen.equalsIgnoreCase("true"))
+ {
+ this.keepGenerated = true;
+ }
+ else if (keepgen.equalsIgnoreCase("false"))
+ {
+ this.keepGenerated = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.keepgen"));
+ }
+ }
+
+
+ String trimsp = config.getInitParameter("trimSpaces");
+ if (trimsp != null)
+ {
+ if (trimsp.equalsIgnoreCase("true"))
+ {
+ trimSpaces = true;
+ }
+ else if (trimsp.equalsIgnoreCase("false"))
+ {
+ trimSpaces = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.trimspaces"));
+ }
+ }
+
+ this.isPoolingEnabled = true;
+ String poolingEnabledParam
+ = config.getInitParameter("enablePooling");
+ if (poolingEnabledParam != null
+ && !poolingEnabledParam.equalsIgnoreCase("true"))
+ {
+ if (poolingEnabledParam.equalsIgnoreCase("false"))
+ {
+ this.isPoolingEnabled = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.enablePooling"));
+ }
+ }
+
+ String mapFile = config.getInitParameter("mappedfile");
+ if (mapFile != null)
+ {
+ if (mapFile.equalsIgnoreCase("true"))
+ {
+ this.mappedFile = true;
+ }
+ else if (mapFile.equalsIgnoreCase("false"))
+ {
+ this.mappedFile = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.mappedFile"));
+ }
+ }
+
+ String senderr = config.getInitParameter("sendErrToClient");
+ if (senderr != null)
+ {
+ if (senderr.equalsIgnoreCase("true"))
+ {
+ this.sendErrorToClient = true;
+ }
+ else if (senderr.equalsIgnoreCase("false"))
+ {
+ this.sendErrorToClient = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.sendErrToClient"));
+ }
+ }
+
+ String debugInfo = config.getInitParameter("classdebuginfo");
+ if (debugInfo != null)
+ {
+ if (debugInfo.equalsIgnoreCase("true"))
+ {
+ this.classDebugInfo = true;
+ }
+ else if (debugInfo.equalsIgnoreCase("false"))
+ {
+ this.classDebugInfo = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.classDebugInfo"));
+ }
+ }
+
+ String checkInterval = config.getInitParameter("checkInterval");
+ if (checkInterval != null)
+ {
+ try
+ {
+ this.checkInterval = Integer.parseInt(checkInterval);
+ if (this.checkInterval == 0)
+ {
+ this.checkInterval = 300;
+ log.warn(Localizer.getMessage("jsp.warning.checkInterval"));
+ }
+ }
+ catch (NumberFormatException ex)
+ {
+ log.warn(Localizer.getMessage("jsp.warning.checkInterval"));
+ }
+ }
+
+ String modificationTestInterval = config.getInitParameter("modificationTestInterval");
+ if (modificationTestInterval != null)
+ {
+ try
+ {
+ this.modificationTestInterval = Integer.parseInt(modificationTestInterval);
+ }
+ catch (NumberFormatException ex)
+ {
+ log.warn(Localizer.getMessage("jsp.warning.modificationTestInterval"));
+ }
+ }
+
+ String development = config.getInitParameter("development");
+ if (development != null)
+ {
+ if (development.equalsIgnoreCase("true"))
+ {
+ this.development = true;
+ }
+ else if (development.equalsIgnoreCase("false"))
+ {
+ this.development = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.development"));
+ }
+ }
+
+ String suppressSmap = config.getInitParameter("suppressSmap");
+ if (suppressSmap != null)
+ {
+ if (suppressSmap.equalsIgnoreCase("true"))
+ {
+ isSmapSuppressed = true;
+ }
+ else if (suppressSmap.equalsIgnoreCase("false"))
+ {
+ isSmapSuppressed = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.suppressSmap"));
+ }
+ }
+
+ String dumpSmap = config.getInitParameter("dumpSmap");
+ if (dumpSmap != null)
+ {
+ if (dumpSmap.equalsIgnoreCase("true"))
+ {
+ isSmapDumped = true;
+ }
+ else if (dumpSmap.equalsIgnoreCase("false"))
+ {
+ isSmapDumped = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.dumpSmap"));
+ }
+ }
+
+ String genCharArray = config.getInitParameter("genStrAsCharArray");
+ if (genCharArray != null)
+ {
+ if (genCharArray.equalsIgnoreCase("true"))
+ {
+ genStringAsCharArray = true;
+ }
+ else if (genCharArray.equalsIgnoreCase("false"))
+ {
+ genStringAsCharArray = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.genchararray"));
+ }
+ }
+
+ String errBeanClass =
+ config.getInitParameter("errorOnUseBeanInvalidClassAttribute");
+ if (errBeanClass != null)
+ {
+ if (errBeanClass.equalsIgnoreCase("true"))
+ {
+ errorOnUseBeanInvalidClassAttribute = true;
+ }
+ else if (errBeanClass.equalsIgnoreCase("false"))
+ {
+ errorOnUseBeanInvalidClassAttribute = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.errBean"));
+ }
+ }
+
+ String ieClassId = config.getInitParameter("ieClassId");
+ if (ieClassId != null)
+ this.ieClassId = ieClassId;
+
+ String classpath = config.getInitParameter("classpath");
+ if (classpath != null)
+ this.classpath = classpath;
+
+ /*
+ * scratchdir
+ */
+ String dir = config.getInitParameter("scratchdir");
+ if (dir != null)
+ {
+ scratchDir = new File(dir);
+ }
+ else
+ {
+ // First try the Servlet 2.2 javax.servlet.context.tempdir property
+ scratchDir = (File) context.getAttribute(Constants.TMP_DIR);
+ if (scratchDir == null)
+ {
+ // Not running in a Servlet 2.2 container.
+ // Try to get the JDK 1.2 java.io.tmpdir property
+ dir = System.getProperty("java.io.tmpdir");
+ if (dir != null)
+ scratchDir = new File(dir);
+ }
+ }
+ if (this.scratchDir == null)
+ {
+ log.fatal(Localizer.getMessage("jsp.error.no.scratch.dir"));
+ return;
+ }
+
+ if (!(scratchDir.exists() && scratchDir.canRead() &&
+ scratchDir.canWrite() && scratchDir.isDirectory()))
+ log.fatal(Localizer.getMessage("jsp.error.bad.scratch.dir",
+ scratchDir.getAbsolutePath()));
+
+ this.compiler = config.getInitParameter("compiler");
+
+ String compilerTargetVM = config.getInitParameter("compilerTargetVM");
+ if (compilerTargetVM != null)
+ {
+ this.compilerTargetVM = compilerTargetVM;
+ }
+
+ String compilerSourceVM = config.getInitParameter("compilerSourceVM");
+ if (compilerSourceVM != null)
+ {
+ this.compilerSourceVM = compilerSourceVM;
+ }
+
+ String javaEncoding = config.getInitParameter("javaEncoding");
+ if (javaEncoding != null)
+ {
+ this.javaEncoding = javaEncoding;
+ }
+
+ String compilerClassName = config.getInitParameter("compilerClassName");
+ if(compilerClassName != null)
+ {
+ this.compilerClassName = compilerClassName;
+ }
+
+ String fork = config.getInitParameter("fork");
+ if (fork != null)
+ {
+ if (fork.equalsIgnoreCase("true"))
+ {
+ this.fork = true;
+ }
+ else if (fork.equalsIgnoreCase("false"))
+ {
+ this.fork = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.fork"));
+ }
+ }
+
+ String xpoweredBy = config.getInitParameter("xpoweredBy");
+ if (xpoweredBy != null)
+ {
+ if (xpoweredBy.equalsIgnoreCase("true"))
+ {
+ this.xpoweredBy = true;
+ }
+ else if (xpoweredBy.equalsIgnoreCase("false"))
+ {
+ this.xpoweredBy = false;
+ }
+ else
+ {
+ log.warn(Localizer.getMessage("jsp.warning.xpoweredBy"));
+ }
+ }
+
+ /* Setup the global Tag Libraries location cache for this web app. The
+ tagLibJarN entries define the jars the cache should scan.
+ */
+ String base = "tagLibJar";
+ ArrayList tldJars = new ArrayList();
+ int count = 0;
+ String jarPath = null;
+ do
+ {
+ String name = base + count;
+ jarPath = config.getInitParameter(name);
+ if( jarPath != null )
+ tldJars.add(jarPath);
+ count ++;
+ } while( jarPath != null );
+
+ tldLocationsCache = new TagLibCache(context, tldJars);
+
+ // Setup the jsp config info for this web app.
+ jspConfig = new JspConfig(context);
+
+ // Create a Tag plugin instance
+ tagPluginManager = new TagPluginManager(context);
+ }
+
+}
Added: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/TagLibCache.java
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/TagLibCache.java 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/main/org/jboss/web/tomcat/tc6/jasper/TagLibCache.java 2006-10-30 14:22:11 UTC (rev 57918)
@@ -0,0 +1,446 @@
+/*
+ * Copyright 1999,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.jboss.web.tomcat.tc6.jasper;
+
+import java.util.Set;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.jar.JarEntry;
+import java.util.jar.JarInputStream;
+import java.io.InputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.MalformedURLException;
+import javax.servlet.ServletContext;
+import java.util.Map; // SYNC
+
+import org.apache.jasper.compiler.TldLocationsCache;
+import org.apache.jasper.compiler.Localizer;
+import org.apache.jasper.JasperException;
+import org.apache.jasper.Constants;
+import org.apache.jasper.xmlparser.TreeNode;
+import org.apache.jasper.xmlparser.ParserUtils;
+import org.jboss.logging.Logger;
+
+/**
+ * A prototype TagLibCache that allows one to obtain shared tlds from the
+ * jbossweb sar conf/tlds directory.
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 45726 $
+ */
+public class TagLibCache extends TldLocationsCache
+{
+ private static final String WEB_XML = "/WEB-INF/web.xml";
+ private static final String JAR_FILE_SUFFIX = ".jar";
+
+ private static Logger log = Logger.getLogger(TagLibCache.class);
+
+ private ServletContext ctx;
+ private HashMap mappings;
+ private ArrayList tagLibJars;
+
+ public TagLibCache(ServletContext ctx, ArrayList tagLibJars)
+ {
+ super(ctx, true);
+ this.ctx = ctx;
+ this.tagLibJars = tagLibJars;
+ }
+
+ /**
+ * Gets the 'location' of the TLD associated with the given taglib 'uri'.
+ *
+ * Returns null if the uri is not associated with any tag library 'exposed'
+ * in the web application. A tag library is 'exposed' either explicitly in
+ * web.xml or implicitly via the uri tag in the TLD of a taglib deployed in a
+ * jar file (WEB-INF/lib).
+ * @param uri The taglib uri
+ * @return An array of two Strings: The first element denotes the real path
+ * to the TLD. If the path to the TLD points to a jar file, then the
+ * second element denotes the name of the TLD entry in the jar file.
+ * Returns null if the uri is not associated with any tag library
+ * 'exposed' in the web application.
+ */
+ public String[] getLocation(String uri) throws JasperException
+ {
+ if (mappings == null)
+ init();
+ String[] locations = (String[]) mappings.get(uri);
+ return locations;
+ }
+
+ private synchronized void init() throws JasperException
+ {
+ if (mappings != null)
+ {
+ return;
+ }
+
+ HashMap tmpMappings = null;
+ try
+ {
+ tmpMappings = new HashMap();
+ processWebDotXml(tmpMappings);
+ loadStandardTlds(tmpMappings);
+ processTldsInFileSystem("/WEB-INF/", tmpMappings);
+ }
+ catch (Exception ex)
+ {
+ String msg = Localizer.getMessage("jsp.error.internal.tldinit", ex.getMessage());
+ throw new JasperException(msg, ex);
+ }
+ finally
+ {
+ mappings = tmpMappings;
+ }
+ }
+
+ /*
+ * Populates taglib map described in web.xml.
+ */
+ protected void processWebDotXml(Map tmpMappings) throws Exception
+ {
+
+ InputStream is = null;
+
+ try
+ {
+ // Acquire input stream to web application deployment descriptor
+ String altDDName = (String) ctx.getAttribute(Constants.ALT_DD_ATTR);
+ if (altDDName != null)
+ {
+ try
+ {
+ is = new FileInputStream(altDDName);
+ }
+ catch (FileNotFoundException e)
+ {
+ log.warn(Localizer.getMessage("jsp.error.internal.filenotfound",
+ altDDName));
+ }
+ }
+ else
+ {
+ is = ctx.getResourceAsStream(WEB_XML);
+ if (is == null)
+ {
+ log.warn(Localizer.getMessage("jsp.error.internal.filenotfound",
+ WEB_XML));
+ }
+ }
+
+ if (is == null)
+ {
+ return;
+ }
+
+ // Parse the web application deployment descriptor
+ TreeNode webtld = null;
+ // altDDName is the absolute path of the DD
+ if (altDDName != null)
+ {
+ webtld = new ParserUtils().parseXMLDocument(altDDName, is);
+ }
+ else
+ {
+ webtld = new ParserUtils().parseXMLDocument(WEB_XML, is);
+ }
+
+ // Allow taglib to be an element of the root or jsp-config (JSP2.0)
+ TreeNode jspConfig = webtld.findChild("jsp-config");
+ if (jspConfig != null)
+ {
+ webtld = jspConfig;
+ }
+ Iterator taglibs = webtld.findChildren("taglib");
+ while (taglibs.hasNext())
+ {
+
+ // Parse the next <taglib> element
+ TreeNode taglib = (TreeNode) taglibs.next();
+ String tagUri = null;
+ String tagLoc = null;
+ TreeNode child = taglib.findChild("taglib-uri");
+ if (child != null)
+ tagUri = child.getBody();
+ child = taglib.findChild("taglib-location");
+ if (child != null)
+ tagLoc = child.getBody();
+
+ // Save this location if appropriate
+ if (tagLoc == null)
+ continue;
+ if (uriType(tagLoc) == NOROOT_REL_URI)
+ tagLoc = "/WEB-INF/" + tagLoc;
+ String tagLoc2 = null;
+ if (tagLoc.endsWith(JAR_FILE_SUFFIX))
+ {
+ tagLoc = ctx.getResource(tagLoc).toString();
+ tagLoc2 = "META-INF/taglib.tld";
+ }
+ tmpMappings.put(tagUri, new String[]{tagLoc, tagLoc2}); // SYNC
+ }
+ }
+ finally
+ {
+ if (is != null)
+ {
+ try
+ {
+ is.close();
+ }
+ catch (Throwable t)
+ {
+ }
+ }
+ }
+ }
+
+ protected void loadStandardTlds(Map tmpMappings) throws MalformedURLException // SYNC
+ {
+ if( tagLibJars.size() == 0 )
+ return;
+
+ // Locate the conf/web.xml
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ URL web = loader.getResource("conf/web.xml");
+ URL sarURL = new URL(web, "..");
+ for(int n = 0; n < tagLibJars.size(); n ++)
+ {
+ String jarPath = (String) tagLibJars.get(n);
+ try
+ {
+ URL url = new URL(sarURL, jarPath);
+ String resourcePath = url.toString();
+ log.debug("Scanning for tlds in: "+resourcePath);
+ URLConnection conn = url.openConnection();
+ conn.setUseCaches(false);
+ scanJar(conn, resourcePath, true, tmpMappings); // SYNC
+ }
+ catch (Exception e)
+ {
+ log.debug("Failed to scan: "+jarPath, e);
+ }
+ }
+ }
+
+ /*
+ * Searches the filesystem under /WEB-INF for any TLD files, and adds
+ * an implicit map entry to the taglib map for any TLD that has a <uri>
+ * element.
+ */
+ protected void processTldsInFileSystem(String startPath, Map tmpMappings) // SYNC
+ throws Exception
+ {
+
+ Set dirList = ctx.getResourcePaths(startPath);
+ if (dirList != null)
+ {
+ Iterator it = dirList.iterator();
+ while (it.hasNext())
+ {
+ String path = (String) it.next();
+ if (path.endsWith("/"))
+ {
+ processTldsInFileSystem(path, tmpMappings); // SYNC
+ }
+ if( path.endsWith(".jar") )
+ {
+ URL resURL = ctx.getResource(path);
+ URLConnection conn = resURL.openConnection();
+ conn.setUseCaches(false);
+ this.scanJar(conn, resURL.toString(), false, tmpMappings); // SYNC
+ }
+ else if ( path.endsWith(".tld") == true )
+ {
+ InputStream stream = ctx.getResourceAsStream(path);
+ String uri = null;
+ try
+ {
+ uri = getUriFromTld(path, stream);
+ }
+ finally
+ {
+ if (stream != null)
+ {
+ try
+ {
+ stream.close();
+ }
+ catch (Throwable t)
+ {
+ // do nothing
+ }
+ }
+ }
+ // Add implicit map entry only if its uri is not already
+ // present in the map
+ if (uri != null && tmpMappings.get(uri) == null) // SYNC
+ {
+ tmpMappings.put(uri, new String[]{path, null}); // SYNC
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Scans the given JarInputStream for TLD files located in META-INF (or a
+ * subdirectory of it), adding an implicit map entry to the taglib map for
+ * any TLD that has a <uri> element.
+ * @param conn - the
+ * @param ignore true if any exceptions raised when processing the given JAR
+ * should be ignored, false otherwise
+ */
+ private void scanJar(URLConnection conn, String resourcePath, boolean ignore, Map tmpMappings) // SYNC
+ throws JasperException, IOException
+ {
+ InputStream connIS = conn.getInputStream();
+ JarInputStream jis = new JarInputStream(connIS);
+ try
+ {
+ JarEntry entry = jis.getNextJarEntry();
+ while( entry != null )
+ {
+ String name = entry.getName();
+ if( name.endsWith(".tld") == false )
+ {
+ entry = jis.getNextJarEntry();
+ continue;
+ }
+
+ EntryInputStream eis = new EntryInputStream(jis);
+ String uri = getUriFromTld(resourcePath, eis);
+ // Add implicit map entry only if its uri is not already
+ // present in the map
+ if (uri != null && tmpMappings.get(uri) == null) // SYNC
+ {
+ tmpMappings.put(uri, new String[]{resourcePath, name}); // SYNC
+ }
+ entry = jis.getNextJarEntry();
+ }
+ }
+ catch (Exception ex)
+ {
+ if (!ignore)
+ {
+ throw new JasperException(ex);
+ }
+ }
+ finally
+ {
+ if( jis != null )
+ {
+ try
+ {
+ jis.close();
+ }
+ catch (Throwable t)
+ {
+ // ignore
+ }
+ }
+
+ if (connIS != null)
+ {
+ try
+ {
+ connIS.close();
+ }
+ catch (Throwable t)
+ {
+ // ignore
+ }
+ }
+ }
+ }
+
+ /*
+ * Returns the value of the uri element of the given TLD, or null if the
+ * given TLD does not contain any such element.
+ */
+ private String getUriFromTld(String resourcePath, InputStream in)
+ throws JasperException
+ {
+ // Parse the tag library descriptor at the specified resource path
+ TreeNode tld = new ParserUtils().parseXMLDocument(resourcePath, in);
+ TreeNode uri = tld.findChild("uri");
+ if (uri != null)
+ {
+ String body = uri.getBody();
+ if (body != null)
+ return body;
+ }
+
+ return null;
+ }
+
+ /**
+ * Used to ignore the close on the jar entry input stream since this
+ * closes the jar stream, not just the entry.
+ */
+ static class EntryInputStream extends InputStream
+ {
+ private JarInputStream jis;
+ EntryInputStream(JarInputStream jis)
+ {
+ this.jis = jis;
+ }
+
+ public int read() throws IOException
+ {
+ return jis.read();
+ }
+
+ public int available() throws IOException
+ {
+ return jis.available();
+ }
+
+ public void close() throws IOException
+ {
+
+ }
+
+ public void reset() throws IOException
+ {
+ jis.reset();
+ }
+
+ public boolean markSupported()
+ {
+ return jis.markSupported();
+ }
+
+ public synchronized void mark(int readlimit)
+ {
+ jis.mark(readlimit);
+ }
+
+ public long skip(long n) throws IOException
+ {
+ return jis.skip(n);
+ }
+
+ public int read(byte b[], int off, int len) throws IOException
+ {
+ return jis.read(b, off, len);
+ }
+ }
+}
Modified: branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/resources/web.xml
===================================================================
--- branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/resources/web.xml 2006-10-30 14:21:55 UTC (rev 57917)
+++ branches/JBoss_4_0_5_GA_JBAS-3790/tomcat/src/resources/web.xml 2006-10-30 14:22:11 UTC (rev 57918)
@@ -34,6 +34,12 @@
<listener-class>org.jboss.web.tomcat.security.SecurityFlushSessionListener</listener-class>
</listener>
+ <!-- Configures JSF for a web application if the javax.faces.webapp.FacesServlet is declared -->
+ <!-- in web.xml. -->
+ <listener>
+ <listener-class>org.jboss.web.jsf.integration.config.JBossJSFConfigureListener</listener-class>
+ </listener>
+
<!-- ================== Built In Servlet Definitions ==================== -->
@@ -221,12 +227,12 @@
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
- <!-- Uncomment to use jdk1.5 features in jsp pages
+ <!-- Uncomment to use jdk1.5 features in jsp pages -->
<init-param>
<param-name>compilerSourceVM</param-name>
<param-value>1.5</param-value>
</init-param>
- -->
+
<!-- Use a custom options class to allow the shared tag lib descriptors
to be loaded from jars in the tomcat sar conf/tlds directory. The
standard options implementation can only find taglibs based on the
@@ -234,18 +240,24 @@
-->
<init-param>
<param-name>engineOptionsClass</param-name>
- <param-value>org.jboss.web.tomcat.tc5.jasper.JspServletOptions</param-value>
+ <param-value>org.jboss.web.tomcat.tc6.jasper.JspServletOptions</param-value>
</init-param>
<!-- Specify the jars relative to the jbossweb-tomcat55.sar that should
be scanned for common tag lib descriptors to include in every war
deployment.
-->
<init-param>
- <description>MyFaces tlds</description>
+ <description>JSF standard tlds</description>
<param-name>tagLibJar0</param-name>
- <param-value>jsf-libs/myfaces-impl.jar</param-value>
+ <param-value>jsf-libs/jsf-impl.jar</param-value>
</init-param>
+ <init-param>
+ <description>JSTL standard tlds</description>
+ <param-name>tagLibJar1</param-name>
+ <param-value>jstl.jar</param-value>
+ </init-param>
+
<load-on-startup>3</load-on-startup>
</servlet>
More information about the jboss-cvs-commits
mailing list