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