简体   繁体   中英

Grails project - Servlet call - ClassNotFoundException: javax.servlet.AsyncContext

I am using

  • intellij idea ultimate 12..4
  • grails 2.2.0 ,
  • grails.servlet.version = "2.5" in BuildConfig.groovy file

and implemented simple servlet post request. Using RESTClient for post request i found these scenariol

Scenario:

  • When i use locally it works fine. URL: localhost:9090/testProject/api/testReport

  • but when i deploy it in local server follwing error messages are shown URL:192.168.1.10:9090/testProject/api/testReport

local server configuration is as localhost has....

code:   
ERROR errors.GrailsExceptionResolver  - ClassNotFoundException occurred when processing request: [POST] /testProject/api/testReport
        javax.servlet.AsyncContext. Stacktrace follows:
        java.lang.ClassNotFoundException: javax.servlet.AsyncContext
                at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
                at java.lang.Class.getDeclaredMethods(Class.java:1808)
                at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
                at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
                at org.grails.jaxrs.support.ConverterUtils.jsonToMap(ConverterUtils.groovy:94)
                at org.grails.jaxrs.support.DomainObjectReaderSupport.readFromJson(DomainObjectReaderSupport.groovy:124)
                at org.grails.jaxrs.support.DomainObjectReaderSupport.readFrom(DomainObjectReaderSupport.groovy:93)
                at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474)
                at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
                at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
                at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
                at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:183)
                at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
                at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
                at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
                at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
                at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
                at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
                at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
                at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
                at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
                at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
                at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
                at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
                at org.grails.jaxrs.web.JaxrsContext$JaxrsServiceImpl.process(JaxrsContext.java:192)
                at org.grails.jaxrs.JaxrsController$_closure1.doCall(JaxrsController.groovy:48)
                at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
                at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
                at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46)
                at java.lang.Thread.run(Thread.java:722)

After Couple of days of searching and integrating i found the solution .....

  1. Why a ClassNotFoundException exception occurs most frequently here the article is real good ...

    http://javarevisited.blogspot.com/2011/08/classnotfoundexception-in-java-example.html

  2. The main reason of the problem shows the log java.lang.ClassNotFoundException: javax.servlet.AsyncContext

    it means it is not finding the asyncContext class provided by javax.servlet-3.0 . In servlet 2.5 its missing.

i was running Apache Tomcat 7 in localhost, but in local server 192.168.1.10 i was running Apache Tomcat 6 . In the given link apache doc says the servlet version.

 So the solution is either anyone upgrade the Apache Tomcat 6 to Apache Tomcat 7
 or posting the file javax.servlet-3.0 in Apache Tomcat 6 lib folder.
 [Here][3] is the jar file.

You can also force your Grails app to use Servlet 2.5 In your BuildConfig.groovy

grails.servlet.version = "2.5"

Hope it helps

Edward

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM