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;
}