It seems I need jsp-api 2.1 in my classpath or I get the following error:

java.lang.NoClassDefFoundError: javax/el/ELResolver

After I add that in, I get the following error. Adding/removing commons-el
doesn't seem to have an effect. My BasePageTestCase is at
http://tinyurl.com/yv68y7.

ERROR - DefaultFacesInitializer.initFaces(126) | Error initializing MyFaces:
null
java.lang.NullPointerException
        at
org.apache.myfaces.webapp.DefaultFacesInitializer.initFaces(DefaultFacesInitializer.java:102)
        at
org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:57)
        at
org.appfuse.web.BasePageTestCase.performFacesContextConfig(BasePageTestCase.java:57)

I'd love to develop a BasePageTestCase that's a bit more implementation
agnostic, but that seems somewhat difficult to do.

Matt


Werner Punz-2 wrote:
> 
> Ok Matt I ran into a similar problem in a testmigration of an old 
> project to myfaces 1.2.
> 
> Following, make sure that you are on a current container version 
> implementing the newest jsp and servlet apis (in my case tomcat running 
> on java 5)
> then remove all traces to the jsp-api and any el-implementation (however 
> commons-el has to be still there if you use tomahawk otherwise you will 
> get an error, tomahawk references commons-el logger somewhere)
> 
> if done it should work.
> 
> The main problem with the migration is that old installs relied on a 
> hogde podge of various deps into el implementations and servlet specs,
> 1.2 is pure jee5 so any older version of the servlet spec or el or jsp 
> in your runtime classpath is a source of possible problems.
> 
> 
> 
> 
> mraible schrieb:
>> I had the following BasePageTestCase class that I've been using to test
>> my
>> JSF 1.1 pages. Unfortunately, after upgrading to JSF 1.2, it no longer
>> works. Here's the stack trace:
>> 
>> ERROR - DefaultFacesInitializer.initFaces(126) | Error initializing
>> MyFaces:
>> null
>> java.lang.NullPointerException
>>         at
>> org.apache.myfaces.webapp.DefaultFacesInitializer.initFaces(DefaultFacesInitializer.java:102)
>>         at
>> org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:57)
>>         at
>> org.appfuse.web.BasePageTestCase.performFacesContextConfig(BasePageTestCase.java:58)
>>         at
>> org.appfuse.web.BasePageTestCase.<clinit>(BasePageTestCase.java:50)
>>         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>> Method)
>>         at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>> org.apache.maven.surefire.booter.SurefireExecutionException:
>> org.appfuse.web.UserFormTest; nested exception is
>> java.lang.ExceptionInInitializerError: null; nested exception is
>> org.apache.maven.surefire.testset.TestSetFailedException:
>> org.appfuse.web.UserFormTest; nested exception is
>> java.lang.ExceptionInInitializerError: null
>> org.apache.maven.surefire.testset.TestSetFailedException:
>> org.appfuse.web.UserFormTest; nested exception is
>> java.lang.ExceptionInInitializerError: null
>> java.lang.ExceptionInInitializerError
>>         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>> Method)
>>         at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>         at
>> java.lang.reflect.Constructor.newInstance(Constructor.java:494)
>>         at junit.framework.TestSuite.createTest(TestSuite.java:54)
>>         at junit.framework.TestSuite.addTestMethod(TestSuite.java:280)
>>         at junit.framework.TestSuite.<init>(TestSuite.java:140)
>>         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>> Method)
>>         at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>         at
>> java.lang.reflect.Constructor.newInstance(Constructor.java:494)
>>         at
>> org.apache.maven.surefire.junit.JUnitTestSet.constructTestObject(JUnitTestSet.java:151)
>>         at
>> org.apache.maven.surefire.junit.JUnitTestSet.getTestCount(JUnitTestSet.java:247)
>>         at
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:104)
>>         at
>> org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:150)
>>         at org.apache.maven.surefire.Surefire.run(Surefire.java:111)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>         at
>> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:290)
>>         at
>> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:818)
>> Caused by: java.lang.IllegalStateException: No Factories configured for
>> this
>> Application. This happens if the faces-initialization does not work at
>> all -
>> make sure that you properly include all configuration settings necessary
>> for
>> a basic faces application and that all the necessary libs are included.
>> Also
>> check the logging output of your web application and your container for
>> any
>> exceptions!
>> If you did that and find nothing, the mistake might be due to the fact
>> that
>> you use some special web-containers which do not support registering
>> context-listeners via TLD files and a context listener is not setup in
>> your
>> web.xml.
>> A typical config looks like this;
>> <listener>
>>  
>> <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
>> </listener>
>> 
>>         at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:90)
>>         at
>> org.appfuse.web.BasePageTestCase.performFacesContextConfig(BasePageTestCase.java:60)
>>         at
>> org.appfuse.web.BasePageTestCase.<clinit>(BasePageTestCase.java:50)
>>         ... 22 more
>>         at
>> java.lang.reflect.Constructor.newInstance(Constructor.java:494)
>>         at junit.framework.TestSuite.createTest(TestSuite.java:54)
>>         at junit.framework.TestSuite.addTestMethod(TestSuite.java:280)
>>         at junit.framework.TestSuite.<init>(TestSuite.java:140)
>> 
>> Lines 55-61 are:
>> <snip>
>>         StartupServletContextListener facesListener =
>>             new StartupServletContextListener();
>>         ServletContextEvent event = new
>> ServletContextEvent(servletContext);
>>         facesListener.contextInitialized(event);
>> 
>>         LifecycleFactory lifecycleFactory =
>>             (LifecycleFactory)
>> FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
>> </snip>
>> 
>> Here's the full class:
>> 
>> BasePageTestCase.java:
>> 
>> package org.appfuse.web;
>> 
>> import javax.faces.FactoryFinder;
>> import javax.faces.application.Application;
>> import javax.faces.application.ApplicationFactory;
>> import javax.faces.context.FacesContext;
>> import javax.faces.context.FacesContextFactory;
>> import javax.faces.el.ValueBinding;
>> import javax.faces.lifecycle.Lifecycle;
>> import javax.faces.lifecycle.LifecycleFactory;
>> import javax.faces.webapp.FacesServlet;
>> import javax.servlet.ServletContextEvent;
>> import javax.servlet.ServletContextListener;
>> 
>> import junit.framework.TestCase;
>> import org.apache.myfaces.webapp.StartupServletContextListener;
>> 
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> import org.springframework.mock.web.MockHttpServletRequest;
>> import org.springframework.mock.web.MockHttpServletResponse;
>> import org.springframework.mock.web.MockServletConfig;
>> import org.springframework.mock.web.MockServletContext;
>> import org.springframework.web.context.ContextLoader;
>> import org.springframework.web.context.ContextLoaderListener;
>> import org.springframework.web.context.WebApplicationContext;
>> import org.springframework.web.jsf.FacesContextUtils;
>> 
>> public abstract class BasePageTestCase extends TestCase {
>>     protected final Log log = LogFactory.getLog(getClass());
>>     protected static FacesContext facesContext;
>>     protected static MockServletConfig config;
>>     protected static MockServletContext servletContext;
>>     protected static WebApplicationContext ctx;
>> 
>>     // This static block ensures that Spring's BeanFactory and JSF's 
>>     // FacesContext is only loaded once for all tests. 
>>     static {
>>         servletContext = new MockServletContext("");
>>         // This static block ensures that Spring's BeanFactory and JSF's 
>>         // FacesContext is only loaded once for all tests. 
>>        
>> servletContext.addInitParameter(ContextLoader.CONFIG_LOCATION_PARAM,
>>                                        
>> "/WEB-INF/applicationContext*.xml");
>> 
>>         ServletContextListener contextListener = new
>> ContextLoaderListener();
>>         ServletContextEvent event = new
>> ServletContextEvent(servletContext);
>>         contextListener.contextInitialized(event);
>> 
>>         config = new MockServletConfig(servletContext);
>>         facesContext = performFacesContextConfig();
>>         ctx =
>> FacesContextUtils.getRequiredWebApplicationContext(facesContext);
>>     }
>>     
>>     protected static FacesContext performFacesContextConfig() {
>>         StartupServletContextListener facesListener =
>>             new StartupServletContextListener();
>>         ServletContextEvent event = new
>> ServletContextEvent(servletContext);
>>         facesListener.contextInitialized(event);
>> 
>>         LifecycleFactory lifecycleFactory =
>>             (LifecycleFactory)
>> FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
>> 
>>         Lifecycle lifecycle =
>> lifecycleFactory.getLifecycle(getLifecycleId());
>> 
>>         FacesContextFactory facesCtxFactory =
>>             (FacesContextFactory)
>> FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
>> 
>>         FacesContext ctx =
>>             facesCtxFactory.getFacesContext(servletContext,
>>                                             new MockHttpServletRequest(),
>>                                             new
>> MockHttpServletResponse(),
>>                                             lifecycle);
>> 
>>         return ctx;
>>     }
>> 
>>     protected static String getLifecycleId() {
>>         String lifecycleId =
>>            
>> servletContext.getInitParameter(FacesServlet.LIFECYCLE_ID_ATTR);
>> 
>>         return (lifecycleId != null) ? lifecycleId
>>                                      :
>> LifecycleFactory.DEFAULT_LIFECYCLE;
>>     }
>> 
>>     /**
>>      * Get managed bean based on the bean name.
>>      *
>>      * @param beanName the bean name
>>      * @return the managed bean associated with the bean name
>>      */
>>     protected Object getManagedBean(String beanName) {
>>         return
>> getValueBinding(getJsfEl(beanName)).getValue(facesContext);
>>     }
>> 
>>     private Application getApplication() {
>>         ApplicationFactory appFactory =
>>             (ApplicationFactory)
>> FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
>> 
>>         return appFactory.getApplication();
>>     }
>> 
>>     private ValueBinding getValueBinding(String el) {
>>         return getApplication().createValueBinding(el);
>>     }
>> 
>>     private String getJsfEl(String value) {
>>         return "#{" + value + "}";
>>     }
>> }
>> 
>> Thanks,
>> 
>> Matt
>> 
>> 
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Testing-JSF-1.2-Managed-Beans-vs.-JSF-1.1-tf4103841.html#a12278068
Sent from the MyFaces - Users mailing list archive at Nabble.com.

Reply via email to