Hello, I am not able to test my Tapestry application. What is very odd is that the exception is not thrown when I run the app in a browser.
Can anyone please help? Thanks in advance, Julien. Here is the test class: * public class CreateJobPostingTest { @Test public void test1() { String appPackage = "com.cheetah.web"; String appName = "app"; PageTester tester = new PageTester(appPackage, appName, "src/main/webapp"); Document doc = tester.renderPage("recruiters/createjobposting"); Element createJobPostingForm = doc.getElementById("createJobPostingForm"); Map<String, String> fieldValues = new HashMap<String, String>(); fieldValues.put("jobPostingTitle", "Développeur java/Tapestry/Junit"); fieldValues.put("jobPostingBody", "Poste de de développeur agile/XP qui travaillera en TDD exclusivement"); Document docFromForm = tester.submitForm(createJobPostingForm, fieldValues); assertTrue(docFromForm.toString().contains("TDD exclusivement")); } @Test @Ignore public void test2() { assertTrue(false); } }* Here is the class being tested: * import com.cheetah.domain.JobPosting; import org.apache.tapestry5.EventConstants; import org.apache.tapestry5.annotations.*; import org.apache.tapestry5.corelib.components.BeanEditForm; public class CreateJobPosting { @InjectComponent private BeanEditForm createJobPostingForm; @InjectPage private ConfirmationPage confirmationPage; @SessionState @Property private JobPosting jobPosting; @Log @OnEvent(value = EventConstants.VALIDATE) void validateCreateJobPostingForm() { if (createJobPostingForm.isValid()) { if (jobPosting.getJobPostingTitle().contains("toto")) { createJobPostingForm.recordError("pas de toto svp"); } } } @OnEvent(value = EventConstants.SUCCESS) @DiscardAfter Object displayConfirmationPage() { this.confirmationPage.setupJobPosting(this.jobPosting); return ConfirmationPage.class; } }* Here is the second "ConfirmationPage" page: * import com.cheetah.domain.JobPosting; import com.cheetah.service.CheetahService; import org.apache.tapestry5.EventConstants; import org.apache.tapestry5.annotations.DiscardAfter; import org.apache.tapestry5.annotations.OnEvent; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.annotations.InjectService; import org.apache.tapestry5.services.ApplicationStateManager; public class ConfirmationPage { @Persist @Property private JobPosting jobPosting; @Inject private CheetahService cheetahService; @Inject private ApplicationStateManager applicationStateManager; void setupJobPosting(JobPosting jobPosting) { this.jobPosting = jobPosting; } @OnEvent(value = EventConstants.ACTION) @DiscardAfter Object saveJobPosting() { cheetahService.persistJobPosting(jobPosting); applicationStateManager.set(JobPosting.class, null); return JobPostingsTable.class; } }* and here is the exception I get: 2879 [main] ERROR org.apache.tapestry5.ioc.Registry - Error obtaining injected value for field com.cheetah.web.pages.recruiters.ConfirmationPage.cheetahService: No service implements the interface com.cheetah.service.CheetahService. 2879 [main] ERROR org.apache.tapestry5.ioc.Registry - Operations trace: 2879 [main] ERROR org.apache.tapestry5.ioc.Registry - [ 1] Constructing instance of page class com.cheetah.web.pages.recruiters.CreateJobPosting 2880 [main] ERROR org.apache.tapestry5.ioc.Registry - [ 2] Assembling root component for page recruiters/CreateJobPosting 2880 [main] ERROR org.apache.tapestry5.ioc.Registry - [ 3] Transforming component class com.cheetah.web.pages.recruiters.ConfirmationPage 2880 [main] ERROR org.apache.tapestry5.ioc.Registry - [ 4] Injecting field cheetahService 2887 [main] ERROR org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler - Processing of request failed with uncaught exception: Exception assembling root component of page recruiters/CreateJobPosting: Could not convert 'jobPosting' into a component parameter binding: Exception generating conduit for expression 'jobPosting': java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; java.lang.RuntimeException: Exception assembling root component of page recruiters/CreateJobPosting: Could not convert 'jobPosting' into a component parameter binding: Exception generating conduit for expression 'jobPosting': java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:124) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$000(ComponentAssemblerImpl.java:38) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:82) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$1.invoke(ComponentAssemblerImpl.java:79) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1063) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleRootComponent(ComponentAssemblerImpl.java:77) at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageLoaderImpl.java:182) at org.apache.tapestry5.internal.pageload.PageLoaderImpl$3.invoke(PageLoaderImpl.java:174) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1063) at org.apache.tapestry5.internal.pageload.PageLoaderImpl.loadPage(PageLoaderImpl.java:173) at $PageLoader_13139f4802e.loadPage($PageLoader_13139f4802e.java) at org.apache.tapestry5.internal.services.PageSourceImpl.getPage(PageSourceImpl.java:81) at $PageSource_13139f4802d.getPage($PageSource_13139f4802d.java) at org.apache.tapestry5.internal.services.NonPoolingRequestPageCacheImpl.get(NonPoolingRequestPageCacheImpl.java:74) at $RequestPageCache_13139f4802c.get($RequestPageCache_13139f4802c.java) at $RequestPageCache_13139f48026.get($RequestPageCache_13139f48026.java) at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55) at org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2326) at $PageRenderRequestHandler_13139f4802a.handle($PageRenderRequestHandler_13139f4802a.java) at $PageRenderRequestHandler_13139f48024.handle($PageRenderRequestHandler_13139f48024.java) at org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48) at org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47) at $ComponentRequestHandler_13139f48025.handlePageRender($ComponentRequestHandler_13139f48025.java) at $ComponentRequestHandler_13139f48004.handlePageRender($ComponentRequestHandler_13139f48004.java) at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45) at $Dispatcher_13139f48006.dispatch($Dispatcher_13139f48006.java) at $Dispatcher_13139f47ffe.dispatch($Dispatcher_13139f47ffe.java) at org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:321) at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:984) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:974) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at org.apache.tapestry5.internal.test.EndOfRequestCleanupFilter.service(EndOfRequestCleanupFilter.java:42) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:80) at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103) at $RequestHandler_13139f48000.service($RequestHandler_13139f48000.java) at $RequestHandler_13139f47fef.service($RequestHandler_13139f47fef.java) at org.apache.tapestry5.test.PageTester.renderPageAndReturnResponse(PageTester.java:209) at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:179) at com.cheetah.web.pages.CreateJobPostingTest.test1(CreateJobPostingTest.java:21) 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:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) 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:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException: Could not convert 'jobPosting' into a component parameter binding: Exception generating conduit for expression 'jobPosting': java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; [at classpath:com/cheetah/web/pages/recruiters/CreateJobPosting.tml, line 2] at org.apache.tapestry5.internal.services.BindingSourceImpl.newBinding(BindingSourceImpl.java:82) at $BindingSource_13139f48043.newBinding($BindingSource_13139f48043.java) at org.apache.tapestry5.internal.services.PageElementFactoryImpl.newBinding(PageElementFactoryImpl.java:184) at $PageElementFactory_13139f4803a.newBinding($PageElementFactory_13139f4803a.java) at org.apache.tapestry5.internal.pageload.PageLoaderImpl$12.execute(PageLoaderImpl.java:859) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:217) at org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.performAssembleRootComponent(ComponentAssemblerImpl.java:103) ... 76 more Caused by: org.apache.tapestry5.internal.services.PropertyExpressionException: Exception generating conduit for expression 'jobPosting': java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.build(PropertyConduitSourceImpl.java:1325) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.create(PropertyConduitSourceImpl.java:1208) at $PropertyConduitSource_13139f480cc.create($PropertyConduitSource_13139f480cc.java) at org.apache.tapestry5.internal.bindings.PropBindingFactory.newBinding(PropBindingFactory.java:49) at $BindingFactory_13139f480cd.newBinding($BindingFactory_13139f480cd.java) at $BindingFactory_13139f48092.newBinding($BindingFactory_13139f48092.java) at org.apache.tapestry5.internal.services.BindingSourceImpl.newBinding(BindingSourceImpl.java:78) ... 82 more Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.buildAdapter(PropertyAccessImpl.java:103) at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.getAdapter(PropertyAccessImpl.java:68) at $PropertyAccess_13139f47ff6.getAdapter($PropertyAccess_13139f47ff6.java) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.infoForPropertyOrPublicField(PropertyConduitSourceImpl.java:1028) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.infoForMember(PropertyConduitSourceImpl.java:1021) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createGetterAndSetter(PropertyConduitSourceImpl.java:451) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createAccessors(PropertyConduitSourceImpl.java:435) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl$PropertyConduitBuilder.createInstance(PropertyConduitSourceImpl.java:290) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.build(PropertyConduitSourceImpl.java:1321) ... 88 more Caused by: java.lang.NoClassDefFoundError: Lcom/cheetah/web/pages/recruiters/ConfirmationPage; at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2291) at java.lang.Class.getDeclaredField(Class.java:1880) at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.isScalaGetterMethod(PropertyAccessImpl.java:196) at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.addPropertyIfScalaGetterMethod(PropertyAccessImpl.java:145) at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.addPropertiesFromScala(PropertyAccessImpl.java:138) at org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl.buildAdapter(PropertyAccessImpl.java:97) ... 96 more Caused by: java.lang.ClassNotFoundException: caught an exception while obtaining a class file for com.cheetah.web.pages.recruiters.ConfirmationPage at javassist.Loader.findClass(Loader.java:359) at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$PackageAwareLoader.findClass(ComponentInstantiatorSourceImpl.java:102) at javassist.Loader.loadClass(Loader.java:311) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 103 more Caused by: org.apache.tapestry5.internal.services.TransformationException: Error obtaining injected value for field com.cheetah.web.pages.recruiters.ConfirmationPage.cheetahService: No service implements the interface com.cheetah.service.CheetahService. at org.apache.tapestry5.internal.services.ComponentClassTransformerImpl$1.run(ComponentClassTransformerImpl.java:208) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:50) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:47) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:46) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:56) at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1058) at org.apache.tapestry5.internal.services.ComponentClassTransformerImpl.transformComponentClass(ComponentClassTransformerImpl.java:119) at $ComponentClassTransformer_13139f48015.transformComponentClass($ComponentClassTransformer_13139f48015.java) at org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.onLoad(ComponentInstantiatorSourceImpl.java:212) at javassist.Loader.findClass(Loader.java:340) ... 106 more Caused by: org.apache.tapestry5.ioc.internal.OperationException: Error obtaining injected value for field com.cheetah.web.pages.recruiters.ConfirmationPage.cheetahService: No service implements the interface com.cheetah.service.CheetahService. at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:102) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:69) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:46) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:56) at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1058) at org.apache.tapestry5.internal.transform.InjectWorker.transform(InjectWorker.java:54) at $ComponentClassTransformWorker_13139f4804d.transform($ComponentClassTransformWorker_13139f4804d.java) at $ComponentClassTransformWorker_13139f4803e.transform($ComponentClassTransformWorker_13139f4803e.java) at org.apache.tapestry5.internal.services.ComponentClassTransformerImpl$1.run(ComponentClassTransformerImpl.java:202) ... 116 more Caused by: java.lang.RuntimeException: Error obtaining injected value for field com.cheetah.web.pages.recruiters.ConfirmationPage.cheetahService: No service implements the interface com.cheetah.service.CheetahService. at org.apache.tapestry5.internal.transform.InjectWorker$1.run(InjectWorker.java:75) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:50) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:47) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:65) ... 123 more Caused by: java.lang.RuntimeException: No service implements the interface com.cheetah.service.CheetahService. at org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:670) at org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:45) at org.apache.tapestry5.internal.services.ServiceInjectionProvider.provideInjection(ServiceInjectionProvider.java:40) at $InjectionProvider_13139f48056.provideInjection($InjectionProvider_13139f48056.java) at $InjectionProvider_13139f48044.provideInjection($InjectionProvider_13139f48044.java) at org.apache.tapestry5.internal.transform.InjectWorker$1.run(InjectWorker.java:67) ... 126 more java.lang.NullPointerException at org.apache.tapestry5.test.PageTester.validateElementName(PageTester.java:286) at org.apache.tapestry5.test.PageTester.submitFormAndReturnResponse(PageTester.java:421) at org.apache.tapestry5.test.PageTester.submitForm(PageTester.java:399) at com.cheetah.web.pages.CreateJobPostingTest.test1(CreateJobPostingTest.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Process finished with exit code 255