Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.0-beta-1
-
Fix Version/s: None
-
Component/s: core
-
Labels:None
-
Environment:servlet container, scripting of nanocontainer done with Groovy
-
Number of attachments :
Description
When setting up the nanocontainer servlet in web.xml using the context-param "nanocontainer.groovy", it only seems to work for the first container that is configured, or, the first compositionScope. If any other scope is provided such as a ServletRequest or HttpSession, it fails with the following message...
"Caused by: groovy.lang.MissingMethodException: No such method: buildContainer for class: nanocontainer with arguments: [org.picocontainer.defaults.DefaultPicoContainer@18abc7b, org.apache.coyote.tomcat5.CoyoteRequestFacade@952905]"
I know it is working the for the first container (in the ServletContext compositionScope) because I print out the compositionScope as soon as the "buildContainer" method is entered and it says...
"compositionScope is: org.apache.catalina.core.ApplicationContextFacade@ebf3f0"
Here is the script...
class DemoBuilder {
buildContainer(parent, compositionScope) {
System.out.println("compositionScope is: " + compositionScope);
pico = new org.picocontainer.defaults.DefaultPicoContainer(parent)
if (compositionScope instanceof javax.servlet.ServletRequest)
else if (compositionScope instanceof javax.servlet.http.HttpSession)
{ System.out.println("I got here to register a component in the servlet session scope!!!!") pico.registerComponentImplementation("counter", SomeCounter.class) }else if (compositionScope instanceof javax.servlet.ServletContext)
{ //nothing to do for now }else { //nothing to do for now }
return pico
}
}
Here's the full stack trace....
org.nanocontainer.integrationkit.PicoCompositionException
at org.nanocontainer.script.groovy.GroovyContainerBuilder.createContainer(GroovyContainerBuilder.java:57)
at org.nanocontainer.integrationkit.LifecycleContainerBuilder.buildContainer(LifecycleContainerBuilder.java:25)
at org.nanocontainer.servlet.ServletRequestContainerLauncher.startContainer(ServletRequestContainerLauncher.java:48)
at org.nanocontainer.servlet.ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Caused by: groovy.lang.MissingMethodException: No such method: buildContainer for class: nanocontainer with arguments: [org.picocontainer.defaults.DefaultPicoContainer@18abc7b, org.apache.coyote.tomcat5.CoyoteRequestFacade@952905]
at groovy.lang.MetaClass.invokeStaticMethod(MetaClass.java:291)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:247)
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:324)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:765)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:214)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:130)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:98)
at nanocontainer.invokeMethod(nanocontainer.groovy)
at org.nanocontainer.script.groovy.GroovyContainerBuilder.createContainer(GroovyContainerBuilder.java:55)
... 27 more
Jake
Activity
Field | Original Value | New Value |
---|---|---|
Attachment | picoservlet.war [ 11423 ] |
Attachment | GroovyContainerBuilder.patch.diff [ 11430 ] |
Resolution | Fixed [ 1 ] | |
Status | Open [ 1 ] | Closed [ 6 ] |
And you are really really sure, that all jars are in correct version,
and you did not got bogus snapshot from codehaus.net ?