You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/03/26 17:34:02 UTC
svn commit: r927957 - in
/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core: ./
src/main/java/org/apache/myfaces/scripting/core/util/
src/main/java/org/apache/myfaces/scripting/core/util/stax/
Author: werpu
Date: Fri Mar 26 16:34:02 2010
New Revision: 927957
URL: http://svn.apache.org/viewvc?rev=927957&view=rev
Log:
http://issues.apache.org/jira/browse/EXTSCRIPT-106
moving the digester code over to stax to get one dependency into non jdk apis out
Added:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java (with props)
Modified:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/pom.xml
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContextInitializer.java
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/pom.xml?rev=927957&r1=927956&r2=927957&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/pom.xml (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/pom.xml Fri Mar 26 16:34:02 2010
@@ -80,10 +80,16 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>javax.xml.stream</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0-2</version>
+ </dependency>
+
<dependency>
- <groupId>commons-digester</groupId>
- <artifactId>commons-digester</artifactId>
- <version>2.0</version>
+ <groupId>stax</groupId>
+ <artifactId>stax</artifactId>
+ <version>1.2.0</version>
</dependency>
</dependencies>
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContextInitializer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContextInitializer.java?rev=927957&r1=927956&r2=927957&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContextInitializer.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/WeavingContextInitializer.java Fri Mar 26 16:34:02 2010
@@ -19,35 +19,29 @@
package org.apache.myfaces.scripting.core.util;
-import org.apache.commons.digester.Digester;
import org.apache.commons.lang.StringUtils;
import org.apache.myfaces.scripting.api.Configuration;
import org.apache.myfaces.scripting.api.ScriptingConst;
import org.apache.myfaces.scripting.api.ScriptingWeaver;
import org.apache.myfaces.scripting.core.CoreWeaver;
+import org.apache.myfaces.scripting.core.util.stax.FilterClassDigester;
import org.apache.myfaces.scripting.loaders.groovy.GroovyScriptingWeaver;
import org.apache.myfaces.scripting.loaders.java.JavaScriptingWeaver;
import org.apache.myfaces.scripting.refresh.RefreshContext;
import org.apache.myfaces.scripting.servlet.ScriptingServletFilter;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
import javax.servlet.ServletContext;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.util.logging.Logger;
/**
+ * Central initializer class for our
+ * WeavingContext which does some semantic checking of the web.xml
+ * and initializes everything in proper order
+ *
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
- * <p/>
- * Moved over from Weblets...
- * a fully functional web.xml parser
- * to allow early access to the configuration
*/
class WeavingContextInitializer {
@@ -112,29 +106,7 @@ class WeavingContextInitializer {
URL webXml = context.getResource("/WEB-INF/web.xml");
if (webXml != null) {
- InputStream in = webXml.openStream();
- try {
- WebXmlParserImpl parser = new WebXmlParserImpl();
- Digester digester = new Digester();
- digester.setValidating(false);
- digester.setEntityResolver(DisconnectedEntityResolver.sharedInstance());
- digester.push(parser);
- //We only check for the servlet filter
- //the rest is already delivered by our context
- digester.addCallMethod("web-app/filter", "addFilter", 2);
- digester.addCallParam("web-app/filter/filter-name", 0);
- digester.addCallParam("web-app/filter/filter-class", 1);
-
- //digester.addCallMethod("web-app/filter-mapping/filter-name", "addFilterName", 2);
- digester.parse(in);
- //we can handle the rest of the configuration in a more secure manner
- } catch (SAXException e) {
- _logger.severe("[EXT-SCRIPTING] Web.xml could not be parsed disabling scripting");
- WeavingContext.setScriptingEnabled(false);
-
- } finally {
- in.close();
- }
+ WeavingContext.setScriptingEnabled(FilterClassDigester.findFilter(webXml, ScriptingServletFilter.class));
}
} catch (IOException e) {
@@ -244,35 +216,4 @@ class WeavingContextInitializer {
}
}
- /**
- * DisconnectedEntityResolver prevents external network access during parsing in case the remote host cannot be reached.
- */
- private static class DisconnectedEntityResolver implements EntityResolver {
- public InputSource resolveEntity(String publicId, String systemId) {
- // use an empty input source
- return new InputSource(new ByteArrayInputStream(new byte[0]));
- }
-
- // no instances
-
- private DisconnectedEntityResolver() {
- }
-
- static public DisconnectedEntityResolver sharedInstance() {
- return _INSTANCE;
- }
-
- static private DisconnectedEntityResolver _INSTANCE = new DisconnectedEntityResolver();
- }
-
- public static class WebXmlParserImpl {
-
- public void addFilter(String filterName, String filterClass) {
- _logger.info("adding filter");
- if (filterClass.equals(ScriptingServletFilter.class.getName())) {
- WeavingContext.setScriptingEnabled(true);
- }
- }
- }
-
}
Added: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java?rev=927957&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java (added)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java Fri Mar 26 16:34:02 2010
@@ -0,0 +1,98 @@
+/*
+ * 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.myfaces.scripting.core.util.stax;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * A web.xml filter class digester based on StaX
+ *
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class FilterClassDigester {
+ private static final String ATTR_FILTER_CLASS = "filter-class";
+
+ public static boolean findFilter(URL webxml, Class filterClass) {
+ StringBuilder filterClassFound = new StringBuilder();
+ Set<String> filterClasses = new HashSet<String>();
+ XMLStreamReader parser = null;
+ try {
+ InputStream in = webxml.openStream();
+ XMLInputFactory factory = XMLInputFactory.newInstance();
+ parser = factory.createXMLStreamReader(in);
+ boolean inFilter = false;
+ for (int event = parser.next();
+ event != XMLStreamConstants.END_DOCUMENT;
+ event = parser.next()) {
+ switch (event) {
+ case XMLStreamConstants.START_ELEMENT:
+ if (isFilterClass(parser.getLocalName())) {
+ inFilter = true;
+ }
+ break;
+ case XMLStreamConstants.END_ELEMENT:
+ if (isFilterClass(parser.getLocalName())) {
+ inFilter = false;
+ if (filterClassFound.toString().equals(filterClass.getName())) {
+ filterClasses.add(filterClassFound.toString());
+ return true;
+ }
+ filterClassFound = new StringBuilder();
+ }
+ break;
+ case XMLStreamConstants.CHARACTERS:
+ if (inFilter) filterClassFound.append(parser.getText());
+ break;
+ } // end switch
+ } // end while
+
+ }
+ catch (XMLStreamException ex) {
+ return false;
+ }
+ catch (IOException ex) {
+ return false;
+ } finally {
+ try {
+ parser.close();
+ } catch (XMLStreamException e) {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ private static boolean isFilterClass(String name) {
+ if (name.equals(ATTR_FILTER_CLASS)) return true;
+ return false;
+ }
+
+}
Propchange: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/scripting/core/util/stax/FilterClassDigester.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL