Thanks to Taha, I managed to make the tests run by adding the following line in the CheetahPageTester constructor: *registry.getService(ApplicationContext.class).getBean("cheetahService");* This had the effect of loading the Spring ApplicationContext and the cheetahService Spring bean (which are lazilly loaded by default). Furthermore, I altered the way the Spring config file was loaded as follows: * servletContext.addInitParameter("contextConfigLocation", "cheetah-service-application-context.xml");* I was then able to run the tests. Regards, Julien. P.S. I must admit I lost a great deal of time with two test libraries on the classpath: testng and junit. Maven does not like that at all.
2011/7/18 Taha Hafeez <tawus.tapes...@gmail.com> > Can you share the full source code as a zip/jar, I will look into that > (Sorry, too busy to create an new example) > > regards > Taha > > On Mon, Jul 18, 2011 at 5:30 PM, Julien Martin <bal...@gmail.com> wrote: > > Hello again, > > Do I need to add my CheetahPageTester to some configuration somewhere? > > J. > > > > 2011/7/18 Julien Martin <bal...@gmail.com> > > > >> Hello Taha, > >> > >> Thanks for your replies! > >> > >> Regarding Tapestry + Spring + tests, you put me on the right track yet I > >> have not being able to get it to work. > >> > >> Here is my PageTester class: > >> > >> *package com.cheetah.web; > >> > >> import org.apache.tapestry5.TapestryFilter; > >> import org.apache.tapestry5.internal.spring.SpringModuleDef; > >> import org.apache.tapestry5.ioc.Registry; > >> import org.apache.tapestry5.ioc.def.ModuleDef; > >> import org.apache.tapestry5.test.PageTester; > >> import org.springframework.mock.web.MockServletContext; > >> > >> > >> public class CheetahPageTester extends PageTester { > >> > >> private MockServletContext servletContext; > >> > >> public CheetahPageTester(String appPackage, String appName, String > >> contextPath, Class... moduleClasses) { > >> super(appPackage, appName, contextPath, moduleClasses); > >> Registry registry = this.getRegistry(); > >> // Set Tapestry registry in mock servlet context > >> > servletContext.setAttribute(TapestryFilter.REGISTRY_CONTEXT_NAME, > >> registry); > >> } > >> > >> public CheetahPageTester(String appPackage, String appName) { > >> super(appPackage, appName); > >> } > >> > >> @Override > >> protected ModuleDef[] provideExtraModuleDefs() { > >> // Set spring configuration files location > >> servletContext = new MockServletContext(); > >> servletContext.addInitParameter("contextConfigLocation", > >> "classpath*:cheetah-web-application-context.xml"); > >> return new ModuleDef[]{ > >> new SpringModuleDef(servletContext) > >> }; > >> } > >> > >> > >> }* > >> > >> and the relevant bit in my test class: > >> * CheetahPageTester tester = new CheetahPageTester(appPackage, appName, > >> "src/main/webapp");* > >> > >> I get exactly the same exception as before... Any idea why? What else > might > >> I have got wrong? > >> > >> Regards, > >> Julien. > >> > >> > >> 2011/7/18 Taha Hafeez <tawus.tapes...@gmail.com> > >> > >>> Hi > >>> > >>> Follow this : > >>> > http://spreadthesource.com/2010/08/start-spring-application-context-for-your-tapestry-unit-tests/ > >>> > >>> regards > >>> Taha > >>> > >>> On Mon, Jul 18, 2011 at 3:01 AM, Julien Martin <bal...@gmail.com> > wrote: > >>> > 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 > >>> > > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > >>> For additional commands, e-mail: users-h...@tapestry.apache.org > >>> > >>> > >> > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > >