MYFACES-4308 - removed commons dependencies
diff --git a/api/pom.xml b/api/pom.xml
index 98bc320..242820a 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -348,7 +348,6 @@
                                     javax.servlet.jsp.jstl.core;version="[1.1.2, 2.0.0)",
                                     javax.servlet.jsp.jstl.sql;version="[1.1.2, 2.0.0)",
                                     javax.servlet.jsp.tagext;version="[2.1.0, 3.2)",
-                                    org.apache.commons.logging;version="[1.1.1, 2.0.0)",
                                     javax.faces.*;version="${project.version}"
                                 </Import-Package>
                                 <Require-Bundle>
diff --git a/bundle/pom.xml b/bundle/pom.xml
index 3e13584..a8d83c1 100644
--- a/bundle/pom.xml
+++ b/bundle/pom.xml
@@ -84,8 +84,6 @@
                             javax.validation.*;version="[1.0.0, 2.0.0)";resolution:=optional,
                             javax.xml.parsers,
                             org.apache;resolution:=optional,
-                            org.apache.commons.beanutils;version="[1.8.3, 2.0.0)",
-                            org.apache.commons.logging;version="[1.1.1, 2.0.0)",
                             org.w3c.dom,
                             org.xml.sax,
                             org.xml.sax.helpers,
diff --git a/impl/pom.xml b/impl/pom.xml
index 402227a..7d30a86 100644
--- a/impl/pom.xml
+++ b/impl/pom.xml
@@ -693,8 +693,6 @@
                                     javax.servlet.annotation;version="[3, 5)";resolution:=optional,
                                     javax.xml.parsers,
                                     org.apache;resolution:=optional,
-                                    org.apache.commons.beanutils;version="[1.8.3, 2.0.0)",
-                                    org.apache.commons.logging;version="[1.1.1, 2.0.0)",
                                     org.w3c.dom,
                                     org.xml.sax,
                                     org.xml.sax.helpers,
@@ -1055,12 +1053,6 @@
             <artifactId>myfaces-builder-annotations</artifactId>
         </dependency>
 
-        <!-- Commons -->
-        <dependency>
-            <groupId>commons-beanutils</groupId>
-            <artifactId>commons-beanutils</artifactId>
-        </dependency>
-
         <!-- tomcat 7 support (InjectionProvider) -->
         <dependency>
             <groupId>org.apache.tomcat</groupId>
diff --git a/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java b/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
index e1d2955..64cd411 100755
--- a/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/application/ApplicationImpl.java
@@ -20,6 +20,9 @@
 
 import java.beans.BeanDescriptor;
 import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -31,6 +34,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.MissingResourceException;
+import java.util.Objects;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -90,7 +94,6 @@
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.myfaces.cdi.wrapper.FacesBehaviorCDIWrapper;
 import org.apache.myfaces.cdi.wrapper.FacesClientBehaviorCDIWrapper;
 import org.apache.myfaces.cdi.wrapper.FacesConverterCDIWrapper;
@@ -1653,6 +1656,9 @@
 
     }
 
+    private Map<Class<?>, Map<String, PropertyDescriptor>> converterPDCache
+            = new ConcurrentHashMap<>();
+            
     private void setConverterProperties(final Class<?> converterClass, final Converter converter)
     {
         final org.apache.myfaces.config.element.Converter converterConfig = _runtimeConfig
@@ -1666,13 +1672,40 @@
 
         if (converterConfig != null && !converterConfig.getProperties().isEmpty())
         {
+            Map<String, PropertyDescriptor> pds = converterPDCache.computeIfAbsent(converterClass, c ->
+            {
+                HashMap<String, PropertyDescriptor> map = new HashMap<>(converterConfig.getProperties().size());
+                try
+                {
+                    for (PropertyDescriptor pd : Introspector.getBeanInfo(c).getPropertyDescriptors())
+                    {
+                        for (Property property : converterConfig.getProperties())
+                        {
+                            if (Objects.equals(pd.getName(), property.getPropertyName()))
+                            {
+                                map.put(property.getPropertyName(), pd);
+                            }
+                        }
+                    }
+                }
+                catch (IntrospectionException e)
+                {
+                    log.log(Level.SEVERE,
+                            "Could not read properties for setting default values of converter: "
+                                    + converterClass.getSimpleName(),
+                            e);
+                }
+                return map;
+            });
+
             for (int i = 0; i < converterConfig.getProperties().size(); i++)
             {
                 Property property = converterConfig.getProperties().get(i);
-                
                 try
                 {
-                    BeanUtils.setProperty(converter, property.getPropertyName(), property.getDefaultValue());
+                    PropertyDescriptor pd = pds.get(property.getPropertyName());
+                    Object convertedValue = ClassUtils.convertToType(property.getDefaultValue(), pd.getPropertyType());
+                    pd.getWriteMethod().invoke(converter, convertedValue);
                 }
                 catch (Throwable th)
                 {
diff --git a/impl/src/test/java/javax/faces/component/AbstractUIComponentPropertyTest.java b/impl/src/test/java/javax/faces/component/AbstractUIComponentPropertyTest.java
index 1983478..b348ea0 100644
--- a/impl/src/test/java/javax/faces/component/AbstractUIComponentPropertyTest.java
+++ b/impl/src/test/java/javax/faces/component/AbstractUIComponentPropertyTest.java
@@ -18,15 +18,16 @@
  */
 package javax.faces.component;
 
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 
 import javax.el.ELContext;
 import javax.el.ValueExpression;
 
-import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.myfaces.test.mock.MockFacesContext;
-import org.apache.myfaces.test.mock.MockFacesContext12;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
 import org.junit.After;
@@ -81,10 +82,24 @@
 
     protected abstract UIComponent createComponent();
 
+    protected PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String property) throws IntrospectionException
+    {
+        for (PropertyDescriptor pd : Introspector.getBeanInfo(clazz).getPropertyDescriptors())
+        {
+            if (pd.getName().equals(property))
+            {
+                return pd;
+            }
+        }
+        return null;
+    }
+    
     @Test
     public void testDefaultValue() throws Exception
     {
-        Assert.assertEquals(_defaultValue, PropertyUtils.getProperty(_component, _property));
+        Object val = getPropertyDescriptor(_component.getClass(), _property).getReadMethod()
+                .invoke(_component);
+        Assert.assertEquals(_defaultValue, val);
     }
 
     @Test
@@ -92,8 +107,12 @@
     {
         for (T testValue : _testValues)
         {
-            PropertyUtils.setProperty(_component, _property, testValue);
-            Assert.assertEquals(testValue, PropertyUtils.getProperty(_component, _property));
+            getPropertyDescriptor(_component.getClass(), _property).getWriteMethod()
+                    .invoke(_component, testValue);
+            
+            Object val = getPropertyDescriptor(_component.getClass(), _property).getReadMethod()
+                    .invoke(_component);
+            Assert.assertEquals(testValue, val);
         }
     }
 
@@ -106,7 +125,10 @@
             expect(_valueExpression.getValue(eq(_facesContext.getELContext()))).andReturn(testValue);
             _mocksControl.replay();
             _component.setValueExpression(_property, _valueExpression);
-            Assert.assertEquals(testValue, PropertyUtils.getProperty(_component, _property));
+            
+            Object val = getPropertyDescriptor(_component.getClass(), _property).getReadMethod()
+                    .invoke(_component);
+            Assert.assertEquals(testValue, val);
             _mocksControl.reset();
         }
     }
@@ -122,7 +144,10 @@
             _mocksControl.reset();
             expect(_valueExpression.getValue(eq(_facesContext.getELContext()))).andReturn(testValue);
             _mocksControl.replay();
-            Assert.assertEquals(testValue, PropertyUtils.getProperty(_component, _property));
+            
+            Object val = getPropertyDescriptor(_component.getClass(), _property).getReadMethod()
+                    .invoke(_component);
+            Assert.assertEquals(testValue, val);
             _mocksControl.reset();
         }
     }
diff --git a/impl/src/test/java/org/apache/myfaces/renderkit/html/behavior/AbstractClientBehaviorTestCase.java b/impl/src/test/java/org/apache/myfaces/renderkit/html/behavior/AbstractClientBehaviorTestCase.java
index bc56e5c..e2b51f2 100644
--- a/impl/src/test/java/org/apache/myfaces/renderkit/html/behavior/AbstractClientBehaviorTestCase.java
+++ b/impl/src/test/java/org/apache/myfaces/renderkit/html/behavior/AbstractClientBehaviorTestCase.java
@@ -22,13 +22,11 @@
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
 import javax.faces.component.behavior.AjaxBehavior;
-import javax.faces.component.behavior.ClientBehaviorContext;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 import javax.faces.context.ResponseWriter;
 
 import org.apache.myfaces.renderkit.html.HtmlResponseWriterImpl;
 import org.apache.myfaces.util.lang.FastWriter;
-import org.apache.myfaces.test.config.ConfigParser;
 import org.apache.myfaces.view.facelets.FaceletTestCase;
 import org.junit.Assert;
 import org.junit.Test;
@@ -41,7 +39,6 @@
 {
     protected ResponseWriter writer;
     protected FastWriter outputWriter; 
-    protected ConfigParser parser;
 
     protected abstract HtmlRenderedClientEventAttr[] getClientBehaviorHtmlRenderedAttributes();
     
@@ -82,8 +79,7 @@
     protected void setUpRenderKit() throws Exception
     {
         super.setUpRenderKit();
-        parser = new ConfigParser();
-        parser.parse(parser.getPlatformURLs());
+
         //parser.parse(this.getClass().getResource("/META-INF/faces-config.xml"));    
         request.setServletPath("/test");
     }
diff --git a/parent/pom.xml b/parent/pom.xml
index d027da1..4deac99 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -416,14 +416,6 @@
                 <scope>provided</scope>
             </dependency>
 
-            <dependency>
-                <groupId>commons-beanutils</groupId>
-                <artifactId>commons-beanutils</artifactId>
-                <version>1.9.4</version>
-                <scope>compile</scope>
-            </dependency>
-
-
             <!-- tomcat 7 support (InjectionProvider) -->
             <dependency>
                 <groupId>org.apache.tomcat</groupId>
diff --git a/parent/src/site/apt/googleappenginesupport.apt b/parent/src/site/apt/googleappenginesupport.apt
deleted file mode 100644
index 538eb48..0000000
--- a/parent/src/site/apt/googleappenginesupport.apt
+++ /dev/null
@@ -1,150 +0,0 @@
- ------
- Myfaces Core 2.0 on Google App Engine
- ------
- Ali Ok
- ------
- 2010-04-08
- ------- 
- 
-~~ 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.
-
-~~ NOTE: For help with the syntax of this file, see:
-~~ http://maven.apache.org/doxia/references/apt-format.html
-
-Myfaces Core 2.0 on Google App Engine
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  In order to run Myfaces on Google App Engine, you need to complete the steps below. Configuration explained in this document is tested with
-  Google App Engine 1.3.0.
-  
-  You can also find tutorials for {{{http://myfaces.apache.org/core20/myfaces2-googleappengine-eclipse-tutorial.html}Eclipse}} and {{{http://myfaces.apache.org/core20/myfaces2-googleappengine-idea-tutorial.html}IntelliJ IDEA}}.  
-
-   * Download a Myfaces Core <<<2.0.0-beta-3>>> or a version released <<later>> than <<<2.0.0-beta-3>>>. Google App Engine support is not available for older versions.
-     Extract and put following files into war/WEB-INF/lib:
-       
-       * myfaces-api-2.0.x.jar
-       
-       * myfaces-impl-2.0.x.jar
-       
-       * commons-beanutils-1.x.x.jar
-       
-       * commons-collections-3.x.jar
-       
-       * commons-digester-x.x.jar
-       
-       * commons-discovery-0.x.jar
-       
-       * commons-logging-1.x.x.jar
-        
-
-   * Add following lines into your web.xml.
-
-+------------------------------------------------------------------------+
-      <web-app>
-        ...
-        
-        <!--
-            Need to set a secret to avoid javax.crypto.BadPaddingException.
-            "param-value" must be Base64 encoded.
-            More details: http://wiki.apache.org/myfaces/Secure_Your_Application
-         -->
-        <context-param>
-            <param-name>org.apache.myfaces.SECRET</param-name>
-            <param-value>NzY1NDMyMTA=</param-value>
-        </context-param>
-        
-        <!--
-           Facelets configuration fragment
-        -->
-        <context-param>
-          <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
-          <param-value>.xhtml</param-value>
-        </context-param>
-        
-        <servlet>
-          <servlet-name>Faces Servlet</servlet-name>
-          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-        </servlet>
-        
-        <servlet-mapping>
-          <servlet-name>Faces Servlet</servlet-name>
-          <url-pattern>*.jsf</url-pattern>
-        </servlet-mapping>
-        ...      
-      </web-app>
-+------------------------------------------------------------------------+
-
-   * Enable sessions on App Engine. To do this, add line below to war/WEB-INF/appengine-web.xml.
-   
-+------------------------------------------------------------------------+
-      <sessions-enabled>true</sessions-enabled>
-+------------------------------------------------------------------------+
-
-   
-   * Although Google App Engine is said to support JSP 2.1, JSP implementation version(2.0) 
-     does not match JSP API version(2.1). So, we need to supply Unified Expression Language 
-     implementation jars. You can find them {{{https://uel.dev.java.net/}here}}.
-     Put el-api-1.x.jar and el-impl-1.x.jar into war/WEB-INF/lib.  
-
-   * If you have a faces-config.xml, please check that you use the header for JSF2:
-
-+------------------------------------------------------------------------+
-	<?xml version="1.0" encoding="UTF-8"?>
-	<faces-config
-	    xmlns="http://java.sun.com/xml/ns/javaee"
-	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-	    version="2.0">
-	    ...
-	</faces-config>
-+------------------------------------------------------------------------+
-
-
-   * Here is the <<sample>> directory structure:
-   
-+------------------------------------------------------------------------+
-   +<Your Google App Engine Project Folder>
-     + src
-       + META-INF
-         - jdoconfig.xml
-     + war
-       - somepage.xhtml
-       + WEB-INF
-         - appengine-web.xml
-         - faces-config.xml
-         - logging.properties
-         - web.xml
-         + lib
-           - appengine-api-1.0-sdk-1.3.0.jar
-           - appengine-api-labs-1.3.0.jar
-           - commons-beanutils-1.7.0.jar
-           - commons-collections-3.2.jar
-           - commons-digester-1.8.jar
-           - commons-discovery-0.4.jar
-           - commons-logging-1.1.1.jar
-           - datanucleus-appengine-1.0.4.1.final.jar
-           - datanucleus-core-1.1.5.jar
-           - datanucleus-jpa-1.1.5.jar
-           - el-api-1.1.jar
-           - el-impl-1.1.jar
-           - geronimo-jpa_3.0_spec-1.1.1.jar
-           - geronimo-jta_1.1_spec-1.1.1.jar
-           - jdo2-api-2.3-eb.jar
-           - myfaces-api-2.0.0-beta-3.jar 
-           - myfaces-impl-2.0.0-beta-3.jar 
-+------------------------------------------------------------------------+
diff --git a/parent/src/site/apt/myfaces2-googleappengine-eclipse-tutorial.apt b/parent/src/site/apt/myfaces2-googleappengine-eclipse-tutorial.apt
deleted file mode 100644
index 6c6f904..0000000
--- a/parent/src/site/apt/myfaces2-googleappengine-eclipse-tutorial.apt
+++ /dev/null
@@ -1,202 +0,0 @@
- ------
- Tutorial : Configuring MyFaces 2 to run on Google App Engine with Eclipse
- ------
- Ali Ok
- ------
- 2010-04-08
- -------
- 
-~~ 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.
-
-~~ NOTE: For help with the syntax of this file, see:
-~~ http://maven.apache.org/doxia/references/apt-format.html
- 
-
-Tutorial : Configuring MyFaces 2 to run on Google App Engine with Eclipse
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  Google App Engine support for MyFaces 2 made trunk and it is released with MyFaces Core 2.0.0-beta-3. 
-  In this tutorial, I will explain how to use it. I assume that you have basic Eclipse, JSF and Facelets knowledge.
-
-  You can find IDE-independent instructions {{{./googleappenginesupport.html}here}}. Additionally, there is a tutorial for IntelliJ IDEA {{{./myfaces2-googleappengine-idea-tutorial.html}here}}.
-
-  {{{http://sites.google.com/a/aliok.com.tr/upload/uploads/tutorial-gae-myfaces2.zip?attredirects=0&d=1}Here}} 
-  is the complete source code and the Eclipse project of the example application (which I took from 
-  {{{https://facelets.dev.java.net/nonav/docs/dev/docbook.html}Facelets Tutorial}}) that I configured to run on 
-  Google App Engine. 
-  
-  I deployed the application explained in this tutorial to: 
-  {{{http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}} 
-
-  In order to run Myfaces on Google App Engine, you need to complete the steps below. Configuration explained in this document is tested with
-  Google App Engine 1.3.2.
-
-*Table of Content
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
-%{toc|section=2|fromDepth=1|toDepth=1}
-
-
-
-*{Setting up the environment}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-  [[1]]  Download Eclipse {{{http://www.eclipse.org/downloads/}here}}, preferably IDE for JEE Developers.
-  
-  [[2]]  Install Google Eclipse Plugin with {{{http://code.google.com/eclipse/docs/download.html}this}} guide.
-
-
-
-
-*{Creating the Project and Placing the Jars}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-  [[1]] Create a Web Application Project (uncheck "Use Google Web Toolkit" if you won't use GWT)
-  
-[images/gaetutorial-eclipse/01.jpg] Creating the Project
-  
-[images/gaetutorial-eclipse/02.jpg] Creating the Project
-  
-  [[2]] Download Myfaces Core {{{http://myfaces.apache.org/download.html}here}}. We need "MyFaces Core 2.0.0-beta-3" or a 
-        later version. Extract files below and put them into war/WEB-INF/lib.
-    
-      * lib/myfaces-api-2.x.x.jar
-      
-      * lib/myfaces-impl-2.x.x.jar
-      
-      * lib/commons-logging-1.x.x.jar
-      
-      * lib/commons-beanutils-1.x.x.jar
-      
-      * lib/commons-collections-3.x.jar
-      
-      * lib/commons-digester-x.x.jar (I tested with version 1.8)
-      
-      * lib/commons-discovery-0.x.jar
-
-      Here is the war/WEB-INF/lib so far:
-      
-[images/gaetutorial-eclipse/03.jpg] war/WEB-INF/lib
-         
-      Please note that some jars (i.e. jdo2-api-2.3-eb.jar) are put by Google App Engine Eclipse plugin when the project is created.
-        
-
-  [[3]]  Download {{{http://download.java.net/maven/glassfish/javax/el/el-api/1.1/el-api-1.1.jar}el-api}}  
-         and {{{http://download.java.net/maven/glassfish/org/glassfish/web/el-impl/1.1/el-impl-1.1.jar}el-impl}} 
-         and put them into war/WEB-INF/lib. You can see the war/WEB-INF/lib so far below.
-
-[images/gaetutorial-eclipse/04.jpg] war/WEB-INF/lib
-
-  [[4]]  Add lines below into war/WEB-INF/web.xml.
-
-+------------------------------------------------------------------------+
-     <web-app ...
-             ...
-            <!--
-                Need to set a secret to avoid javax.crypto.BadPaddingException.
-                "param-value" must be Base64 encoded.
-                More details: http://wiki.apache.org/myfaces/Secure_Your_Application
-             -->
-            <context-param>
-                <param-name>org.apache.myfaces.SECRET</param-name>
-                <param-value>NzY1NDMyMTA=</param-value>
-                </context-param>       
-
-            <!--
-               Facelets configuration fragment
-            -->
-            <context-param>
-              <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
-              <param-value>.xhtml</param-value>
-            </context-param>
-           
-            <servlet>
-              <servlet-name>Faces Servlet</servlet-name>
-              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-            </servlet>
-           
-            <servlet-mapping>
-              <servlet-name>Faces Servlet</servlet-name>
-              <url-pattern>*.jsf</url-pattern>
-            </servlet-mapping>
-           ...     
-    </web-app>
-+------------------------------------------------------------------------+
-
-  
-  
-  [[5]] Make sure that you use the JSF 2 header in your faces-config.
-
-+------------------------------------------------------------------------+
-<?xml version="1.0"  encoding="UTF-8"?>
-
-<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-version="2.0">
-     ...
-</faces-config>
-+------------------------------------------------------------------------+
-
-
-
-  [[6]] Add the following line into war/WEB-INF/appengine-web.xml:
-
-+------------------------------------------------------------------------+
-      <sessions-enabled>true</sessions-enabled>
-+------------------------------------------------------------------------+
-
-
-  
-  [[7]]  Now you can add your stuff (pages, beans, etc.). You cannot use JSP as view technology on Google App Engine. 
-         You must use Facelets, which is the default view technology in JSF 2.
-         
-
-
-
-
-
-*{Deploying to App Engine Development Server (Your Local Server)}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  Right click on the project and select "Run As -> Web Application". This will start 
-  Google App Engine development server. You can see the port information on the console (default is 8888).
-  
-[images/gaetutorial-eclipse/05.jpg] Deployment to Local Development Server
-  
-
-
-
-
-*{Deploying to Google App Engine}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  [[1]]  Right-click on the project and select "Properties".
-  
-  [[2]]  Select "Google"->"App Engine".
-  
-  [[3]]  Select "Use Google App Engine" if not selected, and type your "Application ID". Press OK and close the dialog.
-  
-[images/gaetutorial-eclipse/06.jpg] Configuring the Google App Engine Project
-  
-  [[4]]  Right click on the project and select "Google" -> "Deploy to App Engine"
-    
-  [[5]]  Enter your account information, and the application will be deployed on your-app-id.appspot.com.
-
-[images/gaetutorial-eclipse/07.jpg] Deployment to Google App Engine
-
-  [[6]]  The URL for the application I deployed is : 
-         {{{http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}http://myfaces2-tutorial.latest.aliok-com-tr-test.appspot.com/guess.jsf}}
diff --git a/parent/src/site/apt/myfaces2-googleappengine-idea-tutorial.apt b/parent/src/site/apt/myfaces2-googleappengine-idea-tutorial.apt
deleted file mode 100644
index 73d4192..0000000
--- a/parent/src/site/apt/myfaces2-googleappengine-idea-tutorial.apt
+++ /dev/null
@@ -1,382 +0,0 @@
- ------
- Tutorial : Configuring MyFaces 2 to run on Google App Engine with IntelliJ IDEA
- ------
- Ali Ok
- ------
- 2010-04-08
- ------- 
- 
-~~ 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.
-
-~~ NOTE: For help with the syntax of this file, see:
-~~ http://maven.apache.org/doxia/references/apt-format.html
- 
-
-Tutorial : Configuring MyFaces 2 to run on Google App Engine with IntelliJ IDEA
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  Google App Engine support for MyFaces 2 made trunk and it is released with MyFaces Core 2.0.0-beta-3. 
-  In this tutorial, I will explain how to use it with IntelliJ IDEA. I assume that you have basic 
-  IDEA, JSF and Facelets knowledge.
-
-  You can find IDE-independent instructions {{{./googleappenginesupport.html}here}}. Additionally, there is a tutorial for Eclipse {{{./myfaces2-googleappengine-eclipse-tutorial.html}here}}. 
-
-  {{{http://sites.google.com/a/aliok.com.tr/upload/uploads/tutorial-gae-myfaces2-idea.zip?attredirects=0&d=1}Here}} 
-  is the complete source code and the IDEA project of the example application (which I took from 
-  {{{https://facelets.dev.java.net/nonav/docs/dev/docbook.html}Facelets Tutorial}}) that I configured to run on 
-  Google App Engine. 
-  
-  I deployed the application explained in this tutorial at: 
-  {{{http://myfaces2-tutorial-idea.latest.aliok-com-tr-test.appspot.com/guess.jsf}http://myfaces2-tutorial-idea.latest.aliok-com-tr-test.appspot.com/guess.jsf}} 
-
-  In order to run Myfaces on Google App Engine, you need to complete the steps below. Configuration explained in this document is tested with
-  Google App Engine 1.3.0.
-
-  If you're having trouble with the figures in this page, you can download all images from 
-  {{{http://upload.aliok.com.tr/uploads/myfaces2-gae-idea-tut-all-images.zip?attredirects=0&d=1}this link}}. 
-
-*Table of Content
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
-%{toc|section=1|fromDepth=1|toDepth=1}
-
-
-*{Requirements}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  * IntelliJ IDEA Ultimate Edition
-  
-  * Google App Engine SDK
-  
-  * MyFaces Core 2.0.0 Beta 3
-  
-  * EL API and Impl
-  
-  * Basic JSF and Facelets knowledge
-  
-  * Google App Engine Account :)
-  
-  
-  
-  
-*{Downloading and Configuration}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  [[1]]  Download {{{http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Java}App Engine SDK}} and extract it to somewhere.
-  
-  [[2]]  Download {{{http://myfaces.apache.org/download.html}MyFaces Core 2.0.0 Beta 3}} (or a later version) and extract it.
-  
-  [[3]]  Download {{{http://download.java.net/maven/glassfish/javax/el/el-api/1.1/el-api-1.1.jar}EL API}} and 
-         {{{http://download.java.net/maven/glassfish/org/glassfish/web/el-impl/1.1/el-impl-1.1.jar}EL Impl}} jars.
-  
-  [[4]]  We need IntelliJ IDEA {{{Ultimate Edition}http://www.jetbrains.com/idea/download/}}. Community edition doesn't have JavaEE support, 
-         thus {{{http://plugins.intellij.net/plugin/?&id=4254}Google App Engine Plugin}} doesn't work on it. I downloaded and 
-         installed IDEA version 9.0.1, and I don't know this plugin works for older versions of the IDE.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-01-welcome.jpg] IDEA Welcome
-
-  [[5]]  After installing the IDE and running for the first time, the IDE asked me which plugins that I want. I selected 
-  		 "Google App Engine Integration" and its dependencies. If you have an existing installation, make sure you have 
-  		 "Google App Engine Integration" plugin installed and enabled. 
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-02-plugins.jpg] IDEA Plugins Screen
-
-  [[6]]  Next, we will define our App Engine Devl Server.
-  
-    [[a]] To do this, navigate to IDE settings.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-03-settings-menu.jpg] IDEA Settings Menu
-
-    [[b]] Select "Application Servers" and click "Add" button. Select "Google App Engine Dev Server".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-04-ide-settings.jpg] IDE Settings
-
-    [[c]] Select the path of the App Engine SDK.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-05-sdk-path.jpg] SDK Path Config
-
-    [[d]] You will see some JARS under the "Classes" node.
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-06-sdk-verification.jpg] SDK Verification
-
-
-
-
-
-
-*{Creating and Configuring the Project}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  [[1]] First, we will create a new project:
-    
-    [[a]] Press "File - > New Project"
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-07-new-project.jpg] New Project
-
-    [[b]] We will create the project from scratch. So, select it and press next.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-08-create-scratch.jpg] New Project from Scratch
-
-    [[c]] Type the project name, and select "Java Module".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-09-project-naming.jpg] New Project Name
-    
-    [[d]] Let IDEA crete a source directory for us.
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-10-scr-dir.jpg] New Project src Dir
-
-    [[e]] On this screen, select "Web Application" and "Google App Engine" nodes. 
-          Altough we will create a JSF project, don't select the "JavaServer Faces" node since IDEA doesn't 
-          support MyFaces 2 yet. After making sure the AppEngine SDK path is correct, 
-          press "Finish" and IDEA will create the project.
-          
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-11-tech-selection.jpg] Technology Selection
-
-  [[2]] Now, we will add the MyFaces jars as an "External Library". I did this step to solve 
-        compilation problems in my managed beans. Without explicitly adding an External Library, "javax.faces" 
-        namespace is not visible in my managed beans �which we will create in the next steps- even if the jars 
-        exist in "WEB-INF/lib". I am sure an experienced IDEA user can solve this problem in a better way.
-
-    [[a]] Right-click on the project and select "Module Settings".
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-12-module-settings.jpg] Module Settings
-
-    [[b]] You will see a screen like the one below.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-13-project-libs.jpg] Project Libs
-
-    [[c]] Press the "+" button, type "MyFaces 2 Beta 3" and press "OK".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-14-lib-name.jpg] Lib Name
-
-    [[d]] IDEA will ask which modules to add the library. Select the project you've created and press "OK".
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-15-lib-module-selecting.jpg] Project Library Module Selection
-
-    [[e]] Now we will "attach" MyFaces2 jars. While the newly created library "MyFaces 2 Beta 3" is selected, 
-          press "Attach Classes" button and select the MyFaces (and dependencies) jars.
-          
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-16-attach-classes.jpg] Attach Classes
-
-    [[f]] You should have a screen like below. Press "OK".
-    
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-17-lib-verification.jpg] Library Verification
-
-    [[g]] Here is the external libraries so far:
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-18-ext-lib-verification.jpg] External Library Verification
-
-  [[3]] Put necessary jars into "WEB-INF/lib":
-  
-    [[a]] By default, IDEA does not create a "lib" folder under "WEB-INF". So we need to create one. 
-          Right-click on "WEB-INF" folder and select "New - > Directory".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-19-lib-dir-create.jpg] lib Directory Creation
-          
-    [[b]] Type "lib" and press OK.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-20-lib-naming.jpg] lib Directory Naming
-          
-    [[c]] Copy the jars from the MyFaces release (myfaces-api-2.x.x.jar, lib/myfaces-impl-2.x.x.jar, 
-          lib/commons-logging-1.x.x.jar, lib/commons-beanutils-1.x.x.jar, lib/commons-codec-1.x.jar, 
-          commons-collections-3.x.jar, lib/commons-digester-x.x.jar, lib/commons-discovery-0.x.jar) 
-          and paste them into "WEB-INF/lib".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-21-paste-jars.jpg] Paste MyFaces Jars
-
-    [[d]] Here is the "WEB-INF/lib" jars so far:
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-22-jar-verification.jpg] MyFaces Jar Verification
-
-    [[e]] Put el-api-x.x.jar and el-impl-1.1.jar �which you've downloaded at step 3 of 
-          "Downloading and Configuration" section- into "WEB-INF/lib".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-23-paste-el-jars.jpg] Paste EL Jars
-
-  [[4]] XML configuration:
-
-    [[a]] Put the lines below into your web.xml file:
-    
-+---------------------------------------------------------------------------------------------------------+
-<web-app ...
-   ...
-   <!--
-      Need to set a secret to avoid javax.crypto.BadPaddingException.
-      "param-value" must be Base64 encoded.
-      More details: http://wiki.apache.org/myfaces/Secure_Your_Application
-   -->
-   <context-param>
-      <param-name>org.apache.myfaces.SECRET</param-name>
-      <param-value>NzY1NDMyMTA=</param-value>
-   </context-param>       
-
-   <!--
-      Facelets configuration fragment
-   -->
-   <context-param>
-      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
-      <param-value>.xhtml</param-value>
-   </context-param>
-       
-   <servlet>
-      <servlet-name>Faces Servlet</servlet-name>
-      <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
-   </servlet>
-       
-   <servlet-mapping>
-      <servlet-name>Faces Servlet</servlet-name>
-      <url-pattern>*.jsf</url-pattern>
-   </servlet-mapping>
-   ...     
-</web-app>
-+---------------------------------------------------------------------------------------------------------+
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-24-web-xml-conf.jpg] web.xml Configuration
-
-    [[b]] Create a "faces-config.xml" file under your "WEB-INF" folder, and make sure that you use the JSF 2 header in it.
-
-+---------------------------------------------------------------------------------------------------------+
-<?xml version="1.0"  encoding="UTF-8"?>
-
-<faces-config
-   xmlns="http://java.sun.com/xml/ns/javaee"
-   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
-   version="2.0">
-   ...
-</faces-config>
-+---------------------------------------------------------------------------------------------------------+
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-25-faces-config-conf.jpg] faces-config.xml Configuration
-
-    [[c]] Add the following line into war/WEB-INF/appengine-web.xml:
-
-+---------------------------------------------------------------------------------------------------------+
-   <sessions-enabled>true</sessions-enabled>
-+---------------------------------------------------------------------------------------------------------+
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-26-appengine-web-conf.jpg] appengine-web.xml Configuration
-
-  [[5]]  Now you can add your pages, beans etc. You cannot use JSP as view technology on Google App Engine. You must 
-         use Facelets, which is the default view technology in JSF 2.
-
-         {{{http://sites.google.com/a/aliok.com.tr/upload/uploads/tutorial-gae-myfaces2-idea.zip}Here}} is the complete 
-         source code and the IDEA project of the example application (which I took from 
-         {{{https://facelets.dev.java.net/nonav/docs/dev/docbook.html}Facelets Tutorial}}) that I configured to run on 
-         Google App Engine.
-
-
-
-
-*{Deploying to App Engine Development Server (Your Local Server)}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  [[1]] We need to define a run configuration.
-  
-	[[a]] Select "Run - > Edit Configurations"
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-27-edit-run-conf.jpg] Edit Run Configuration
-	
-	[[b]] Press "+" button to add a new configuration.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-28-add-new-run-conf.jpg] Adding New Run Configuration
-	
-    [[c]] Select "Google AppEngine Dev Server".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-29-add-gae-run-conf.jpg] Add GAE Run Configuration
-	
-	[[d]] Type the configuration name, and make sure your screen seems like this:
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-30-gae-run-conf-settings.jpg] GAE Run Configuration Settings
-	
-	[[e]] Select "Build Artifacts" and click "..." button. We will configure, what to export.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-31-run-conf-build.jpg] Run Configuration Build Settings
-	
-	[[f]] Select "Test-GoogleAppEngine:war exploded".
-	
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-32-run-conf-artifacts.jpg] Run Configuration Build Artifacts
-	
-
-  [[2]] Now, you can see the configuration you've defined next to "Run" button.
-
-    [[a]] Select your run configuration and press "Run".
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-33-run-conf-select.jpg] Run Configuration Selection
-	
-	[[b]]  You will see MyFaces logs on the console. You shouldn't see any exception at this step. If you saw 
-	       one, make sure you've completed all steps above.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-34-myfaces-logs.jpg] MyFaces Logs
-	
-	[[c]] You can see your application at "localhost:8080". IDEA created a dummy 
-	      index.jsp before, so it is normal to see "Place your content here" text.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-35-local-page.jpg] Local Devl Server Page
-	
-	[[d]] You can stop the GAE Devl Server by pressing stop button.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-36-stop-local-server.jpg] Stopping Local Server
-
-
-
-
-
-*{Running Facelets Tutorial Example}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-  I've configured a project to run on Google App Engine, which you can find the sources 
-  {{{http://sites.google.com/a/aliok.com.tr/upload/uploads/tutorial-gae-myfaces2-idea.zip}here}}.
-  You can simply copy the files guess.xhtml, response.xhtml, template.xhtml and NumberBean.java to appropriate locations.
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-37-add-stuff.jpg] Add Stuff
-
-  You can see the application running below.
-  
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-38-guess-appl-local-page.jpg] Guess Application Local Page
-
-
-
-
-
-*{Deploying to App Engine}
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  [[1]] You need to set application name and version in appengine-web.xml file. You can see my 
-        config below. "application" is your application id at Google App Engine (AppSpot Id), 
-		and version is anything you like.	
-
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-39-app-engine-appl-version-conf.jpg] App Engine Application and Version Configuration
-
-  [[2]] You can upload the application by selecting "Tools - > Upload App Engine Application".
-  
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-40-upload.jpg] Uploading
-
-  [[3]] IDEA will ask about building. Build the project by clicking "Yes".
-  
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-41-upload-build.jpg] Upload : Build
-
-  [[4]] Now, IDEA will use AppEngine SDK's batch jobs to upload application. You will be asked your email and password. 
-        You can see the output of my upload below.
-  
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-42-upload-console.jpg] Upload Console
-
-  [[5]] Your application is hosted at Google App Engine now. You can see this version of the 
-        application at "Versions" page of Google App Engine administration screen. Your application 
-		is hosted at <version-I-specified>.latest.<application-ID>.appspot.com
-  
-[images/gaetutorial-idea/myfaces2-gae-idea-tut-43-gae-page.jpg] GAE Page
diff --git a/parent/src/site/site.xml b/parent/src/site/site.xml
index ffbdb5b..7fb0534 100644
--- a/parent/src/site/site.xml
+++ b/parent/src/site/site.xml
@@ -104,7 +104,6 @@
         <menu name="Documentation" inherit="top">
             <item name="Quick Start"     href="http://myfaces.apache.org/wiki/core/user-guide/quick-start.html"/>
             <item name="Getting Started" href="http://myfaces.apache.org/wiki/core/user-guide/getting-started.html"/>
-            <item name="MyFaces and Google App Engine"  href="http://myfaces.apache.org/core20/googleappenginesupport.html"/>
             <item name="Generated Javadoc, Tlddoc and Others"        href="./javadoc.html"/>
             <item name="MyFaces Release Checklist"        href="./release-checklist.html"/>
             <item name="FAQ"             href="http://myfaces.apache.org/wiki/core/faq.html"/>
diff --git a/test/pom.xml b/test/pom.xml
index c6fcd5b..eb7246f 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -63,12 +63,6 @@
         </dependency>
 
         <dependency>
-            <groupId>commons-digester</groupId>
-            <artifactId>commons-digester</artifactId>
-            <version>1.8</version>
-        </dependency>
-
-        <dependency>
             <groupId>net.sourceforge.htmlunit</groupId>
             <artifactId>htmlunit</artifactId>
             <version>2.33</version>
diff --git a/test/src/main/java/org/apache/myfaces/test/config/ConfigParser.java b/test/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
deleted file mode 100644
index b0ce0d6..0000000
--- a/test/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
+++ /dev/null
@@ -1,709 +0,0 @@
-/*

- * 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.test.config;

-

-import java.io.IOException;

-import java.net.URL;

-

-import javax.faces.FactoryFinder;

-import javax.faces.application.Application;

-import javax.faces.application.ApplicationFactory;

-import javax.faces.render.ClientBehaviorRenderer;

-import javax.faces.render.RenderKit;

-import javax.faces.render.RenderKitFactory;

-import javax.faces.render.Renderer;

-

-import org.apache.commons.digester.Digester;

-import org.apache.commons.digester.Rule;

-import org.apache.myfaces.test.mock.MockRenderKit;

-import org.xml.sax.Attributes;

-import org.xml.sax.SAXException;

-

-/**

- * <p>Utility class to parse JavaServer Faces configuration resources, and

- * register JSF artifacts with the mock object hierarchy.</p>

- *

- * <p>The following artifacts are registered:</p>

- * <ul>

- *     <li><code>Converter</code> (by-id and by-class)</li>

- *     <li><code>RenderKit</code> and <code>Renderer</code>,<code>ClientBehaviorRenderer</code></li>

- *     <li><code>UIComponent</code></li>

- *     <li><code>Validator</code></li>

- *     <li><code>Behavior</code></li>

- * </ul>

- *

- * <p>Note that any declared <em>factory</em> instances are explicitly

- * <strong>NOT</strong> registered, allowing the mock object hierarchy

- * of the Myfaces Test Framework to manage these APIs.</p>

- *

- * <p><strong>USAGE NOTE</strong> - If you are using an instance of this

- * class within a subclass of <code>AbstractJsfTestCase</code> or

- * <code>AbstractJmockJsfTestCase</code>, be sure you have completed the

- * <code>setUp()</code> processing in this base class before calling one

- * of the <code>parse()</code> methods.</p>

- *

- * @since 1.0.0

- */

-public class ConfigParser

-{

-

-    // ------------------------------------------------------------ Constructors

-

-    /** Creates a new instance of ConfigParser */

-    public ConfigParser()

-    {

-    }

-

-    // ------------------------------------------------------ Manifest Constants

-

-    /**

-     * <p>Configuration resource URLs for the JSF RI.</p>

-     */

-    private static final String[] JSFRI_RESOURCES = { "/com/sun/faces/jsf-ri-runtime.xml", };

-

-    /**

-     * <p>Configuration resource URLs for Apache MyFaces.</p>

-     */

-    private static final String[] MYFACES_RESOURCES = { "/org/apache/myfaces/resource/standard-faces-config.xml", };

-

-    /**

-     * <p>Configuration resource URLs for Apache MyFaces 1.2.</p>

-     */

-    private static final String[] MYFACES_RESOURCES12 = { "/META-INF/standard-faces-config.xml", };

-

-    // ------------------------------------------------------ Instance Variables

-

-    /**

-     * <p>The <code>Digester</code> instance we will use for parsing.</p>

-     */

-    private Digester digester = null;

-

-    // ------------------------------------------------------- Public Properties

-

-    /**

-     * <p>Return the URLs of the platform configuration resources for this

-     * application.  The following platforms are currently supported:</p>

-     * <ul>

-     * <li>JavaServer Faces Reference Implementation (version 1.0 - 1.2)</li>

-     * <li>MyFaces (version 1.1)</li>

-     * </ul>

-     *

-     * <p>If MyFaces (version 1.2), currently under development, does not change

-     * the name of the configuration resource, it will be supported as well.</p>

-     */

-    public URL[] getPlatformURLs()

-    {

-

-        URL[] urls = translate(JSFRI_RESOURCES);

-        if (urls[0] == null)

-        {

-            urls = translate(MYFACES_RESOURCES12);

-            if (urls[0] == null)

-            {

-                urls = translate(MYFACES_RESOURCES);

-            }

-        }

-        return urls;

-

-    }

-

-    // ---------------------------------------------------------- Public Methods

-

-    /**

-     * <p>Parse the specified JavaServer Faces configuration resource, causing

-     * the appropriate JSF artifacts to be registered with the mock object

-     * hierarchy.</p>

-     *

-     * @param url <code>URL</code> of the configuration resource to parse

-     *

-     * @exception IOException if an input/output error occurs

-     * @exception SAXException if a parsing error occurs

-     */

-    public void parse(URL url) throws IOException, SAXException

-    {

-

-        // Acquire and configure the Digester instance we will use

-        Digester digester = digester();

-        ApplicationFactory factory = (ApplicationFactory) FactoryFinder

-                .getFactory(FactoryFinder.APPLICATION_FACTORY);

-        Application application = factory.getApplication();

-        digester.push(application);

-

-        // Perform the required parsing

-        try

-        {

-            digester.parse(url);

-        }

-        finally

-        {

-            digester.clear();

-        }

-

-    }

-

-    /**

-     * <p>Parse the specified set of JavaServer Faces configuration resources,

-     * in the listed order, causing the appropriate JSF artifacts to be registered

-     * with the mock object hierarchy.</p>

-     *

-     * @param urls <code>URL</code>s of the configuration resources to parse

-     *

-     * @exception IOException if an input/output error occurs

-     * @exception SAXException if a parsing error occurs

-     */

-    public void parse(URL[] urls) throws IOException, SAXException

-    {

-

-        for (int i = 0; i < urls.length; i++)

-        {

-            parse(urls[i]);

-        }

-

-    }

-

-    // --------------------------------------------------------- Private Methods

-

-    /**

-     * <p>Return the <code>Digester</code> instance we will use for parsing,

-     * creating and configuring a new instance if necessary.</p>

-     */

-    private Digester digester()

-    {

-

-        if (this.digester == null)

-        {

-            this.digester = new Digester();

-            digester.addRule("faces-config/component", new ComponentRule());

-            digester.addCallMethod("faces-config/component/component-type",

-                    "setComponentType", 0);

-            digester.addCallMethod("faces-config/component/component-class",

-                    "setComponentClass", 0);

-            digester.addRule("faces-config/converter", new ConverterRule());

-            digester.addCallMethod("faces-config/converter/converter-id",

-                    "setConverterId", 0);

-            digester.addCallMethod("faces-config/converter/converter-class",

-                    "setConverterClass", 0);

-            digester.addCallMethod(

-                    "faces-config/converter/converter-for-class",

-                    "setConverterForClass", 0);

-            digester.addRule("faces-config/render-kit", new RenderKitRule());

-            digester.addRule("faces-config/render-kit/render-kit-id",

-                    new RenderKitIdRule());

-            digester.addRule("faces-config/render-kit/renderer",

-                    new RendererRule());

-            digester.addCallMethod(

-                    "faces-config/render-kit/renderer/component-family",

-                    "setComponentFamily", 0);

-            digester.addCallMethod(

-                    "faces-config/render-kit/renderer/renderer-class",

-                    "setRendererClass", 0);

-            digester.addCallMethod(

-                    "faces-config/render-kit/renderer/renderer-type",

-                    "setRendererType", 0);

-            digester.addRule(

-                    "faces-config/render-kit/client-behavior-renderer",

-                    new ClientBehaviorRendererRule());

-            digester

-                    .addCallMethod(

-                            "faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type",

-                            "setClientBehaviorRendererType", 0);

-            digester

-                    .addCallMethod(

-                            "faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class",

-                            "setClientBehaviorRendererClass", 0);

-            digester.addRule("faces-config/validator", new ValidatorRule());

-            digester.addCallMethod("faces-config/validator/validator-id",

-                    "setValidatorId", 0);

-            digester.addCallMethod("faces-config/validator/validator-class",

-                    "setValidatorClass", 0);

-            digester.addRule("faces-config/behavior", new BehaviorRule());

-            digester.addCallMethod("faces-config/behavior/behavior-id",

-                    "setBehaviorId", 0);

-            digester.addCallMethod("faces-config/behavior/behavior-class",

-                    "setBehaviorClass", 0);

-        }

-        return this.digester;

-

-    }

-

-    /**

-     * <p>Translate an array of resource names into an array of resource URLs.</p>

-     *

-     * @param names Resource names to translate

-     */

-    private URL[] translate(String[] names)

-    {

-

-        URL[] results = new URL[names.length];

-        for (int i = 0; i < names.length; i++)

-        {

-            results[i] = this.getClass().getResource(names[i]);

-        }

-        return results;

-

-    }

-

-    // --------------------------------------------------------- Private Classes

-

-    /**

-     * <p>Data bean that stores information related to a component.</p>

-     */

-    class ComponentBean

-    {

-

-        private String componentClass;

-

-        public String getComponentClass()

-        {

-            return this.componentClass;

-        }

-

-        public void setComponentClass(String componentClass)

-        {

-            this.componentClass = componentClass;

-        }

-

-        private String componentType;

-

-        public String getComponentType()

-        {

-            return this.componentType;

-        }

-

-        public void setComponentType(String componentType)

-        {

-            this.componentType = componentType;

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing components.</p>

-     */

-    class ComponentRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new ComponentBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            ComponentBean bean = (ComponentBean) getDigester().pop();

-            Application application = (Application) getDigester().peek();

-            application.addComponent(bean.getComponentType(), bean

-                    .getComponentClass());

-        }

-

-    }

-

-    /**

-     * <p>Data bean that stores information related to a converter.</p>

-     */

-    class ConverterBean

-    {

-

-        private String converterClass;

-

-        public String getConverterClass()

-        {

-            return this.converterClass;

-        }

-

-        public void setConverterClass(String converterClass)

-        {

-            this.converterClass = converterClass;

-        }

-

-        private String converterForClass;

-

-        public String getConverterForClass()

-        {

-            return this.converterForClass;

-        }

-

-        public void setConverterForClass(String converterForClass)

-        {

-            this.converterForClass = converterForClass;

-        }

-

-        private String converterId;

-

-        public String getConverterId()

-        {

-            return this.converterId;

-        }

-

-        public void setConverterId(String converterId)

-        {

-            this.converterId = converterId;

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing converers.</p>

-     */

-    class ConverterRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new ConverterBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            ConverterBean bean = (ConverterBean) getDigester().pop();

-            Application application = (Application) getDigester().peek();

-            if (bean.getConverterId() != null)

-            {

-                application.addConverter(bean.getConverterId(), bean

-                        .getConverterClass());

-            }

-            else

-            {

-                Class clazz = null;

-                try

-                {

-                    clazz = classForName(bean.getConverterForClass());

-                }

-                catch (ClassNotFoundException e)

-                {

-                    throw new IllegalArgumentException(

-                            "java.lang.ClassNotFoundException: "

-                                    + bean.getConverterForClass());

-                }

-                application.addConverter(clazz, bean.getConverterClass());

-            }

-        }

-

-    }

-

-    private Class classForName(String type) throws ClassNotFoundException

-    {

-        try

-        {

-            // Try WebApp ClassLoader first

-            return Class.forName(type, false, // do not initialize for faster startup

-                    Thread.currentThread().getContextClassLoader());

-        }

-        catch (ClassNotFoundException ignore)

-        {

-            // fallback: Try ClassLoader for ClassUtils (i.e. the myfaces.jar lib)

-            return Class.forName(type, false, // do not initialize for faster startup

-                    this.getClass().getClassLoader());

-        }

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing render kits.</p>

-     */

-    class RenderKitRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            RenderKitFactory factory = (RenderKitFactory) FactoryFinder

-                    .getFactory(FactoryFinder.RENDER_KIT_FACTORY);

-            getDigester().push(

-                    factory.getRenderKit(null,

-                            RenderKitFactory.HTML_BASIC_RENDER_KIT));

-        }

-

-        public void end(String namespace, String name)

-        {

-            getDigester().pop();

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing render kit identifiers.</p>

-     */

-    class RenderKitIdRule extends Rule

-    {

-

-        public void body(String namespace, String name, String text)

-        {

-            String renderKitId = text.trim();

-            RenderKitFactory factory = (RenderKitFactory) FactoryFinder

-                    .getFactory(FactoryFinder.RENDER_KIT_FACTORY);

-            RenderKit renderKit = factory.getRenderKit(null, renderKitId);

-            if (renderKit == null)

-            {

-                renderKit = new MockRenderKit();

-                factory.addRenderKit(renderKitId, renderKit);

-            }

-            getDigester().pop();

-            getDigester().push(renderKit);

-        }

-

-    }

-

-    /**

-     * <p>Data bean that stores information related to a renderer.</p>

-     */

-    class RendererBean

-    {

-

-        private String componentFamily;

-

-        public String getComponentFamily()

-        {

-            return this.componentFamily;

-        }

-

-        public void setComponentFamily(String componentFamily)

-        {

-            this.componentFamily = componentFamily;

-        }

-

-        private String rendererClass;

-

-        public String getRendererClass()

-        {

-            return this.rendererClass;

-        }

-

-        public void setRendererClass(String rendererClass)

-        {

-            this.rendererClass = rendererClass;

-        }

-

-        private String rendererType;

-

-        public String getRendererType()

-        {

-            return this.rendererType;

-        }

-

-        public void setRendererType(String rendererType)

-        {

-            this.rendererType = rendererType;

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing renderers.</p>

-     */

-    class RendererRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new RendererBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            RendererBean bean = (RendererBean) getDigester().pop();

-            RenderKit kit = (RenderKit) getDigester().peek();

-            Renderer renderer = null;

-            Class clazz = null;

-            try

-            {

-                clazz = classForName(bean.getRendererClass());

-                renderer = (Renderer) clazz.newInstance();

-            }

-            catch (Exception e)

-            {

-                throw new IllegalArgumentException(

-                        "Exception while trying to instantiate"

-                                + " renderer class '" + bean.getRendererClass()

-                                + "' : " + e.getMessage());

-            }

-            kit.addRenderer(bean.getComponentFamily(), bean.getRendererType(),

-                    renderer);

-        }

-

-    }

-

-    /**

-     * <p>Data bean that stores information related to a validator.</p>

-     */

-    class ValidatorBean

-    {

-

-        private String validatorClass;

-

-        public String getValidatorClass()

-        {

-            return this.validatorClass;

-        }

-

-        public void setValidatorClass(String validatorClass)

-        {

-            this.validatorClass = validatorClass;

-        }

-

-        private String validatorId;

-

-        public String getValidatorId()

-        {

-            return this.validatorId;

-        }

-

-        public void setValidatorId(String validatorId)

-        {

-            this.validatorId = validatorId;

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing validators.</p>

-     */

-    class ValidatorRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new ValidatorBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            ValidatorBean bean = (ValidatorBean) getDigester().pop();

-            Application application = (Application) getDigester().peek();

-            application.addValidator(bean.getValidatorId(), bean

-                    .getValidatorClass());

-        }

-

-    }

-

-    class ClientBehaviorRendererBean

-    {

-        private String clientBehaviorRendererType;

-

-        private String clientBehaviorRendererClass;

-

-        public String getClientBehaviorRendererType()

-        {

-            return clientBehaviorRendererType;

-        }

-

-        public void setClientBehaviorRendererType(

-                String clientBehaviorRendererType)

-        {

-            this.clientBehaviorRendererType = clientBehaviorRendererType;

-        }

-

-        public String getClientBehaviorRendererClass()

-        {

-            return clientBehaviorRendererClass;

-        }

-

-        public void setClientBehaviorRendererClass(

-                String clientBehaviorRendererClass)

-        {

-            this.clientBehaviorRendererClass = clientBehaviorRendererClass;

-        }

-    }

-

-    class ClientBehaviorRendererRule extends Rule

-    {

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new ClientBehaviorRendererBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            ClientBehaviorRendererBean bean = (ClientBehaviorRendererBean) getDigester()

-                    .pop();

-            RenderKit kit = (RenderKit) getDigester().peek();

-            ClientBehaviorRenderer renderer = null;

-            Class clazz = null;

-            try

-            {

-                clazz = classForName(bean.getClientBehaviorRendererClass());

-                renderer = (ClientBehaviorRenderer) clazz.newInstance();

-            }

-            catch (Exception e)

-            {

-                throw new IllegalArgumentException(

-                        "Exception while trying to instantiate"

-                                + " client behavior renderer class '"

-                                + bean.getClientBehaviorRendererClass()

-                                + "' : " + e.getMessage());

-            }

-            kit.addClientBehaviorRenderer(bean.getClientBehaviorRendererType(),

-                    renderer);

-        }

-    }

-

-    /**

-     * <p>Data bean that stores information related to a behavior.</p>

-     */

-    class BehaviorBean

-    {

-

-        private String behaviorClass;

-

-        public String getBehaviorClass()

-        {

-            return this.behaviorClass;

-        }

-

-        @SuppressWarnings("unused")

-        public void setBehaviorClass(String behaviorClass)

-        {

-            this.behaviorClass = behaviorClass;

-        }

-

-        private String behaviorId;

-

-        public String getBehaviorId()

-        {

-            return this.behaviorId;

-        }

-

-        @SuppressWarnings("unused")

-        public void setBehaviorId(String behaviorId)

-        {

-            this.behaviorId = behaviorId;

-        }

-

-    }

-

-    /**

-     * <p>Digester <code>Rule</code> for processing behaviors.</p>

-     */

-    class BehaviorRule extends Rule

-    {

-

-        public void begin(String namespace, String name, Attributes attributes)

-        {

-            getDigester().push(new BehaviorBean());

-        }

-

-        public void end(String namespace, String name)

-        {

-            BehaviorBean bean = (BehaviorBean) getDigester().pop();

-            Application application = (Application) getDigester().peek();

-            application.addBehavior(bean.getBehaviorId(), bean

-                    .getBehaviorClass());

-        }

-

-    }

-}

diff --git a/test/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java b/test/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
index 0960545..976a1b3 100644
--- a/test/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
+++ b/test/src/main/java/org/apache/myfaces/test/mock/MockApplication20.java
@@ -31,6 +31,8 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.el.ELContext;
 import javax.el.ValueExpression;
@@ -59,8 +61,6 @@
 import javax.faces.validator.Validator;
 import javax.faces.view.ViewDeclarationLanguage;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.test.mock.resource.MockResourceHandler;
 
 /**
@@ -213,7 +213,7 @@
 
     // ------------------------------------------------------ Instance Variables
 
-    private static final Log log = LogFactory.getLog(MockApplication20.class);
+    private static final Logger log = Logger.getLogger(MockApplication20.class.getName());
 
     private final Map<Class<? extends SystemEvent>, SystemListenerEntry> _systemEventListenerClassMap = 
         new ConcurrentHashMap<Class<? extends SystemEvent>, SystemListenerEntry>();
@@ -468,7 +468,7 @@
         if (renderer == null)
         {
             // If no such Renderer can be found, a message must be logged with a helpful error message.
-            log.error("renderer cannot be found for component type " + componentType + " and renderer type "
+            log.log(Level.SEVERE, "renderer cannot be found for component type " + componentType + " and renderer type "
                     + rendererType);
         }
         else
@@ -620,16 +620,18 @@
             // If the act of invoking the processListener method causes an AbortProcessingException to be thrown, 
             // processing of the listeners must be aborted, no further processing of the listeners for this event must 
             // take place, and the exception must be logged with Level.SEVERE.
-            log.error("Event processing was aborted", e);
+            log.log(Level.SEVERE, "Event processing was aborted", e);
         }
     }
 
+    @Override
     public void publishEvent(FacesContext facesContext,
             Class<? extends SystemEvent> systemEventClass, Object source)
     {
         publishEvent(facesContext, systemEventClass, source.getClass(), source);
     }
 
+    @Override
     public ProjectStage getProjectStage()
     {
         // If the value has already been determined by a previous call to this
@@ -994,17 +996,17 @@
                     }
                     catch (InstantiationException e)
                     {
-                        log.error("Could not instantiate component class name = " + fqcn, e);
+                        log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                         throw new FacesException("Could not instantiate component class name = " + fqcn, e);
                     }
                     catch (IllegalAccessException e)
                     {
-                        log.error("Could not instantiate component class name = " + fqcn, e);
+                        log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                         throw new FacesException("Could not instantiate component class name = " + fqcn, e);
                     }
                     catch (Exception e)
                     {
-                        log.error("Could not instantiate component class name = " + fqcn, e);
+                        log.log(Level.SEVERE, "Could not instantiate component class name = " + fqcn, e);
                     }
                 }
 
diff --git a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/DefaultRestoreViewSupport.java b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/DefaultRestoreViewSupport.java
index 813066d..8b5c509 100644
--- a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/DefaultRestoreViewSupport.java
+++ b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/DefaultRestoreViewSupport.java
@@ -21,6 +21,8 @@
 

 import java.util.Iterator;

 import java.util.Map;

+import java.util.logging.Level;

+import java.util.logging.Logger;

 

 import javax.el.ValueExpression;

 import javax.faces.FacesException;

@@ -28,9 +30,6 @@
 import javax.faces.context.ExternalContext;

 import javax.faces.context.FacesContext;

 

-import org.apache.commons.logging.Log;

-import org.apache.commons.logging.LogFactory;

-

 /**

  * @author Mathias Broekelmann (latest modification by $Author: mbr $)

  * @version $Revision: 517403 $ $Date: 2007-03-12 22:17:00 +0100 (Mo, 12 Mrz 2007) $

@@ -42,7 +41,7 @@
 

     private static final String JAVAX_SERVLET_INCLUDE_PATH_INFO = "javax.servlet.include.path_info";

 

-    private final Log log = LogFactory.getLog(DefaultRestoreViewSupport.class);

+    private static final Logger log = Logger.getLogger(DefaultRestoreViewSupport.class.getName());

 

     public void processComponentBinding(FacesContext facesContext,

             UIComponent component)

@@ -67,12 +66,11 @@
 

         String viewId = (String) requestMap

                 .get(JAVAX_SERVLET_INCLUDE_PATH_INFO);

-        boolean traceEnabled = log.isTraceEnabled();

         if (viewId != null)

         {

-            if (traceEnabled)

+            if (log.isLoggable(Level.FINEST))

             {

-                log.trace("Calculated viewId '" + viewId

+                log.log(Level.FINEST, "Calculated viewId '" + viewId

                         + "' from request param '"

                         + JAVAX_SERVLET_INCLUDE_PATH_INFO + '\'');

             }

@@ -80,9 +78,9 @@
         else

         {

             viewId = externalContext.getRequestPathInfo();

-            if (viewId != null && traceEnabled)

+            if (viewId != null && log.isLoggable(Level.FINEST))

             {

-                log.trace("Calculated viewId '" + viewId

+                log.log(Level.FINEST, "Calculated viewId '" + viewId

                         + "' from request path info");

             }

         }

@@ -91,9 +89,9 @@
         {

             viewId = (String) requestMap

                     .get(JAVAX_SERVLET_INCLUDE_SERVLET_PATH);

-            if (viewId != null && traceEnabled)

+            if (viewId != null && log.isLoggable(Level.FINEST))

             {

-                log.trace("Calculated viewId '" + viewId

+                log.log(Level.FINEST, "Calculated viewId '" + viewId

                         + "' from request param '"

                         + JAVAX_SERVLET_INCLUDE_SERVLET_PATH + '\'');

             }

@@ -102,9 +100,9 @@
         if (viewId == null)

         {

             viewId = externalContext.getRequestServletPath();

-            if (viewId != null && traceEnabled)

+            if (viewId != null && log.isLoggable(Level.FINEST))

             {

-                log.trace("Calculated viewId '" + viewId

+                log.log(Level.FINEST, "Calculated viewId '" + viewId

                         + "' from request servlet path");

             }

         }

diff --git a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/PhaseListenerManager.java b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/PhaseListenerManager.java
index 84a21aa..30bab5a 100644
--- a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/PhaseListenerManager.java
+++ b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/PhaseListenerManager.java
@@ -21,13 +21,13 @@
 

 import java.util.HashMap;

 import java.util.Map;

+import java.util.logging.Level;

+import java.util.logging.Logger;

 import javax.faces.context.FacesContext;

 import javax.faces.event.PhaseEvent;

 import javax.faces.event.PhaseId;

 import javax.faces.event.PhaseListener;

 import javax.faces.lifecycle.Lifecycle;

-import org.apache.commons.logging.Log;

-import org.apache.commons.logging.LogFactory;

 

 /**

  * This class encapsulates the logic used to call PhaseListeners.  It was 

@@ -40,8 +40,7 @@
 class PhaseListenerManager

 {

 

-    private static final Log log = LogFactory

-            .getLog(PhaseListenerManager.class);

+    private static final Logger log = Logger.getLogger(PhaseListenerManager.class.getName());

 

     private Lifecycle lifecycle;

     private FacesContext facesContext;

@@ -88,7 +87,7 @@
                 catch (Exception e)

                 {

                     beforePhaseSuccess[i] = false; // redundant - for clarity

-                    log.error("Exception in PhaseListener "

+                    log.log(Level.SEVERE, "Exception in PhaseListener "

                             + phaseId.toString() + " beforePhase.", e);

                     return;

                 }

@@ -115,7 +114,7 @@
                 }

                 catch (Exception e)

                 {

-                    log.error("Exception in PhaseListener "

+                    log.log(Level.SEVERE, "Exception in PhaseListener "

                             + phaseId.toString() + " afterPhase", e);

                 }

             }

diff --git a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/RestoreViewExecutor.java b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/RestoreViewExecutor.java
index 4e92def..d188cd2 100644
--- a/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/RestoreViewExecutor.java
+++ b/test/src/main/java/org/apache/myfaces/test/mock/lifecycle/RestoreViewExecutor.java
@@ -19,8 +19,8 @@
 

 package org.apache.myfaces.test.mock.lifecycle;

 

-import org.apache.commons.logging.Log;

-import org.apache.commons.logging.LogFactory;

+import java.util.logging.Level;

+import java.util.logging.Logger;

 import org.apache.myfaces.test.util.Jsf11Utils;

 import org.apache.myfaces.test.util.Jsf12Utils;

 import org.apache.myfaces.test.util.JsfVersion;

@@ -44,7 +44,7 @@
 class RestoreViewExecutor implements PhaseExecutor

 {

 

-    private static final Log log = LogFactory.getLog(RestoreViewExecutor.class);

+    private static final Logger log = Logger.getLogger(RestoreViewExecutor.class.getName());

     private RestoreViewSupport _restoreViewSupport;

 

     public boolean execute(FacesContext facesContext)

@@ -72,9 +72,9 @@
 

         if (viewRoot != null)

         {

-            if (log.isTraceEnabled())

+            if (log.isLoggable(Level.FINEST))

             {

-                log.trace("View already exists in the FacesContext");

+                log.log(Level.FINEST, "View already exists in the FacesContext");

             }

 

             viewRoot.setLocale(facesContext.getExternalContext()

@@ -88,9 +88,9 @@
         // Determine if this request is a postback or initial request

         if (restoreViewSupport.isPostback(facesContext))

         {

-            if (log.isTraceEnabled())

+            if (log.isLoggable(Level.FINEST))

             {

-                log.trace("Request is a postback");

+                log.log(Level.FINEST, "Request is a postback");

             }

 

             viewRoot = viewHandler.restoreView(facesContext, viewId);

@@ -109,10 +109,9 @@
         }

         else

         {

-            if (log.isTraceEnabled())

+            if (log.isLoggable(Level.FINEST))

             {

-                log

-                        .trace("Request is not a postback. New UIViewRoot will be created");

+                log.log(Level.FINEST, "Request is not a postback. New UIViewRoot will be created");

             }

 

             viewRoot = viewHandler.createView(facesContext, viewId);

@@ -183,8 +182,7 @@
             int dot = viewId.lastIndexOf('.');

             if (dot == -1)

             {

-                log

-                        .error("Assumed extension mapping, but there is no extension in "

+                log.log(Level.SEVERE, "Assumed extension mapping, but there is no extension in "

                                 + viewId);

                 viewId = null;

             }