>From: mraible <[EMAIL PROTECTED]> > > > 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: >
Sorta looks like there is not a mock implementation for the JspFactory. Just poking thru the code, it looks like it's trying to find a shared EL context. You might give shale-test a try. Gary > ERROR - DefaultFacesInitializer.initFaces(126) | Error initializing MyFaces: > null > java.lang.NullPointerException > at > org.apache.myfaces.webapp.DefaultFacesInitializer.initFaces(DefaultFacesInitiali > > zer.java:102) > at > org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(Start > > upServletContextListener.java:57) > at > org.appfuse.web.BasePageTestCase.performFacesContextConfig(BasePageTestCase.java > > :58) > at > org.appfuse.web.BasePageTestCase.(BasePageTestCase.java:50) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorI > > mpl.java:39) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA > > ccessorImpl.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(NativeConstructorAccessorI > > mpl.java:39) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA > > ccessorImpl.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.(TestSuite.java:140) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorI > > mpl.java:39) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorA > > ccessorImpl.java:27) > at java.lang.reflect.Constructor.newInstance(Constructor.java:494) > at > org.apache.maven.surefire.junit.JUnitTestSet.constructTestObject(JUnitTestSet.ja > > va:151) > at > org.apache.maven.surefire.junit.JUnitTestSet.getTestCount(JUnitTestSet.java:247) > > at > org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(Abstra > > ctDirectoryTestSuite.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.jav > > a:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBoote > > r.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; > > > org.apache.myfaces.webapp.StartupServletContextListener> r-class> > > > at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:90) > at > org.appfuse.web.BasePageTestCase.performFacesContextConfig(BasePageTestCase.java > > :60) > at > org.appfuse.web.BasePageTestCase.(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.(TestSuite.java:140) > > Lines 55-61 are: > > StartupServletContextListener facesListener = > new StartupServletContextListener(); > ServletContextEvent event = new ServletContextEvent(servletContext); > facesListener.contextInitialized(event); > > LifecycleFactory lifecycleFactory = > (LifecycleFactory) > FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); > > > 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#a > > 11670577 > Sent from the MyFaces - Users mailing list archive at Nabble.com. >