You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/01/10 10:22:11 UTC
svn commit: r1431221 - in /tomcat/trunk: java/org/apache/jasper/compiler/
test/org/apache/jasper/compiler/ test/webapp-3.0/WEB-INF/classes/
test/webapp-3.0/WEB-INF/classes/META-INF/
test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/
Author: markt
Date: Thu Jan 10 09:22:11 2013
New Revision: 1431221
URL: http://svn.apache.org/viewvc?rev=1431221&view=rev
Log:
Add support for auto-detection and configuration of JARs on the classpath that provide Tag Plugin implementations.
Based on a patch by Sheldon Shao.
Added:
tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java (with props)
tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java (with props)
tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java (with props)
tomcat/trunk/test/webapp-3.0/WEB-INF/classes/
tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/
tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/
tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml (with props)
Modified:
tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java
Modified: tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java?rev=1431221&r1=1431220&r2=1431221&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TagPluginManager.java Thu Jan 10 09:22:11 2013
@@ -14,10 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.jasper.compiler;
+import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
@@ -33,9 +35,10 @@ import org.apache.jasper.xmlparser.TreeN
* Manages tag plugin optimizations.
* @author Kin-man Chung
*/
-
public class TagPluginManager {
+ private static final String META_INF_JASPER_TAG_PLUGINS_XML =
+ "META-INF/org.apache.jasper/tagPlugins.xml";
private static final String TAG_PLUGINS_XML = "/WEB-INF/tagPlugins.xml";
private static final String TAG_PLUGINS_ROOT_ELEM = "tag-plugins";
@@ -73,12 +76,44 @@ public class TagPluginManager {
if (initialized)
return;
- InputStream is = ctxt.getResourceAsStream(TAG_PLUGINS_XML);
- if (is == null)
- return;
+ tagPlugins = new HashMap<>();
+
+ Enumeration<URL> urls = null;
+ try {
+ urls = ctxt.getClassLoader().getResources(
+ META_INF_JASPER_TAG_PLUGINS_XML);
+ } catch (IOException ioe) {
+ throw new JasperException(ioe);
+ }
+
+ if (urls != null) {
+ while(urls.hasMoreElements()) {
+ URL url = urls.nextElement();
+ try (InputStream is = url.openStream()){
+ loadTagPlugins(err, is);
+ } catch(IOException ioe) {
+ throw new JasperException(ioe);
+ }
+ }
+ }
+
+ try (InputStream is = ctxt.getResourceAsStream(TAG_PLUGINS_XML)) {
+ if (is != null) {
+ loadTagPlugins(err, is);
+ }
+ } catch (IOException ioe) {
+ throw new JasperException(ioe);
+ }
+
+ initialized = true;
+ }
+
+
+ private void loadTagPlugins(ErrorDispatcher err, InputStream is)
+ throws JasperException {
- TreeNode root = (new ParserUtils()).parseXMLDocument(TAG_PLUGINS_XML,
- is);
+ TreeNode root =
+ (new ParserUtils()).parseXMLDocument(TAG_PLUGINS_XML, is);
if (root == null) {
return;
}
Added: tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java?rev=1431221&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java (added)
+++ tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java Thu Jan 10 09:22:11 2013
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jasper.compiler;
+
+import java.io.File;
+
+import javax.servlet.ServletContext;
+import javax.servlet.jsp.tagext.TagFileInfo;
+import javax.servlet.jsp.tagext.TagInfo;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.catalina.startup.TomcatBaseTest;
+
+/**
+ * Test case for {@link TagPluginManager}.
+ */
+public class TestTagPluginManager extends TomcatBaseTest {
+
+ private static TagInfo tagInfo = new TagInfo("ATag",
+ "org.apache.jasper.compiler.ATagSupport", "", "", null, null, null);
+
+ @Test
+ public void testBug54240() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ File appDir = new File("test/webapp-3.0");
+ Context ctx = tomcat.addWebapp(null, "/test", appDir.getAbsolutePath());
+ tomcat.start();
+
+ ServletContext context = ctx.getServletContext();
+
+ TagPluginManager manager = new TagPluginManager(context);
+
+ Node.Nodes nodes = new Node.Nodes();
+ Node.CustomTag c = new Node.CustomTag("test:ATag", "test", "ATag",
+ "http://tomcat.apache.org/jasper", null, null, null, null, null,
+ new TagFileInfo("ATag", "http://tomcat.apache.org/jasper",
+ tagInfo));
+ c.setTagHandlerClass(TesterTag.class);
+ nodes.add(c);
+ manager.apply(nodes, null, null);
+
+ Node n = nodes.getNode(0);
+ Assert.assertNotNull(n);
+ Assert.assertTrue(n instanceof Node.CustomTag);
+
+ Node.CustomTag t = (Node.CustomTag)n;
+ Assert.assertNotNull(t.getAtSTag());
+
+ Node.Nodes sTag = c.getAtSTag();
+ Node scriptlet = sTag.getNode(0);
+ Assert.assertNotNull(scriptlet);
+ Assert.assertTrue(scriptlet instanceof Node.Scriptlet);
+ Node.Scriptlet s = (Node.Scriptlet)scriptlet;
+ Assert.assertEquals("//Just a comment", s.getText());
+ }
+}
Propchange: tomcat/trunk/test/org/apache/jasper/compiler/TestTagPluginManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java?rev=1431221&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java (added)
+++ tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java Thu Jan 10 09:22:11 2013
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jasper.compiler;
+
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * A tag for test purpose
+ */
+public class TesterTag extends TagSupport {
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
Propchange: tomcat/trunk/test/org/apache/jasper/compiler/TesterTag.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java?rev=1431221&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java (added)
+++ tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java Thu Jan 10 09:22:11 2013
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.jasper.compiler;
+
+import org.apache.jasper.compiler.tagplugin.TagPlugin;
+import org.apache.jasper.compiler.tagplugin.TagPluginContext;
+
+/**
+ * Plug-in for {@link TesterTag}.
+ */
+public class TesterTagPlugin implements TagPlugin {
+
+ @Override
+ public void doTag(TagPluginContext ctxt) {
+ ctxt.generateJavaSource("//Just a comment");
+ }
+}
\ No newline at end of file
Propchange: tomcat/trunk/test/org/apache/jasper/compiler/TesterTagPlugin.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml?rev=1431221&view=auto
==============================================================================
--- tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml (added)
+++ tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml Thu Jan 10 09:22:11 2013
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<tag-plugins>
+ <tag-plugin>
+ <tag-class>org.apache.jasper.compiler.TesterTag</tag-class>
+ <plugin-class>org.apache.jasper.compiler.TesterTagPlugin</plugin-class>
+ </tag-plugin>
+</tag-plugins>
\ No newline at end of file
Propchange: tomcat/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/org.apache.jasper/tagPlugins.xml
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org