简体   繁体   中英

AppEngine - Unable to compile class for JSP

I am using a tutorial for creating a guestbook web application and whenever i try to connect to localhost:8080, i get the following error:

  HTTP ERROR 500

Problem accessing /. Reason:

    Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
Caused by:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23)
    at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:61)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java:58)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
    at com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward(StaticFileUtils.java:82)
    at com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile(LocalResourceFileServlet.java:260)
    at com.google.appengine.tools.development.LocalResourceFileServlet.doGet(LocalResourceFileServlet.java:120)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:502)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Im using Apache Maven version 3.3.9 with jdk1.8.0_92. I am able to do mvn appengine:devserver successfully and it says the Dev App Server is now Running . I've seen related questions that involve Tomcat and but they havent been very helpful. Im kind of stuck on what to do and am not too familiar with this process since im following a tutorial. Any ideas on what i can do to fix this? Here is the link to what i am trying (note it is an old link that has been archived).

I have exactly the same problem as you. For me, after I changed the JDK from 1.8 to 1.7, the problem disappeared. ( the compile level is 1.7 when using jdk 1.8 ). I don't know if it helps you.

  • make sure the output of mvn -version displays Java version of 1.7 ex:
    mvn -version Java version: 1.7.0_101, vendor: Oracle Corporation ...
  • if you have Java version 1.8 or other displayed here you must change your PATH env var JAVA_HOME to point to your 1.7 folder... this is where mvn runs java from, you can check this on linux or Mac terminal with: echo $JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64

[ link to how to add to your PATH on Windows, Mac, or Linux ]

try the above and re-run your
mvn clean install
mvn appengine:devserver
commands... hope this helped.

I am having the same problem, but I have an observation that may contribute to solving this. This morning I built the guestbook project using a Maven archetype: mvn archetype:generate -Dappengine-version=1.9.37 .... Immediately after creating the project this way, the following worked: mvn appengine:devserver Jetty started up and I could access the guestbook application in my browser.

After this initial success I tried to get it working within Eclipse. While doing this, I also discovered that I was using different JDK versions simultaneously and I tried corrected this. I had no success with Eclipse. After that I tried to return to mvn appengine:devserver . Only then I had the problem as described above.

I tried erasing the .m2 directory where Maven stores the dependencies it downloads. I also tried to build a fresh copy using mvn archetype:generate ... . These actions did not help.

I have the following classpath:

[INFO] mei 20, 2016 12:01:11 AM org.apache.jasper.compiler.JspRuntimeContext initClassPath
[INFO] FINE: Compilation classpath initialized: 
/C:/work/Bitbucket/MessageApp3/target/MessageApp3-1.0-SNAPSHOT/WEB-INF/classes/;
/C:/work/Bitbucket/MessageApp3/target/MessageApp3-1.0-SNAPSHOT/WEB-INF/lib/appengine-api-1.0-sdk-1.9.37.jar;
/C:/Users/ABB/.m2/repository/com/google/appengine/appengine-java-sdk/1.9.37/appengine-java-sdk/appengine-java-sdk-1.9.37/lib/impl/agent/appengine-agentruntime.jar;
/C:/work/Bitbucket/MessageApp3/target/MessageApp3-1.0-SNAPSHOT/WEB-INF/lib/guava-18.0.jar;
/C:/work/Bitbucket/MessageApp3/target/MessageApp3-1.0-SNAPSHOT/WEB-INF/lib/jstl-1.2.jar;
/C:/work/Bitbucket/MessageApp3/target/MessageApp3-1.0-SNAPSHOT/WEB-INF/lib/objectify-5.1.5.jar;
/C:/Users/ABB/.m2/repository/com/google/appengine/appengine-java-sdk/1.9.37/appengine-java-sdk/appengine-java-sdk-1.9.37/lib/tools/jsp/repackaged-appengine-jakarta-jstl-1.1.2.jar;
/C:/Users/ABB/.m2/repository/com/google/appengine/appengine-java-sdk/1.9.37/appengine-java-sdk/appengine-java-sdk-1.9.37/lib/tools/jsp/repackaged-appengine-jakarta-standard-1.1.2.jar;
/C:/Users/ABB/.m2/repository/com/google/appengine/appengine-java-sdk/1.9.37/appengine-java-sdk/appengine-java-sdk-1.9.37/lib/tools/jsp/repackaged-appengine-jasper-jdt-6.0.29.jar;
/C:/Users/ABB/.m2/repository/com/google/appengine/appengine-java-sdk/1.9.37/appengine-java-sdk/appengine-java-sdk-1.9.37/lib/opt/tools/appengine-local-endpoints/v1/appengine-local-endpoints.jar;
C:\Users\ABB\AppData\Local\Temp\Jetty_127_0_0_1_8080_MessageApp3.1.0.SNAPSHOT____1qwjqs\jsp;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\appengine-local-runtime-shared.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\el-api.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp\repackaged-appengine-ant-1.7.1.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp\repackaged-appengine-ant-launcher-1.7.1.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp\repackaged-appengine-jasper-6.0.29.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp\repackaged-appengine-jasper-el-6.0.29.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp\repackaged-appengine-tomcat-juli-6.0.29.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\jsp-api.jar;
C:\Users\ABB\.m2\repository\com\google\appengine\appengine-java-sdk\1.9.37\appengine-java-sdk\appengine-java-sdk-1.9.37\lib\shared\servlet-api.jar;
C:\work\Bitbucket\MessageApp3\target\MessageApp3-1.0-SNAPSHOT\classes;
[INFO] mei 20, 2016 12:01:11 AM org.apache.jasper.servlet.JspServlet init
[INFO] FINE: Scratch dir for the JSP engine is: C:\Users\ABB\AppData\Local\Temp\Jetty_127_0_0_1_8080_MessageApp3.1.0.SNAPSHOT____1qwjqs\jsp

I am using JDK 1.8.0_91 and Maven 3.3.3

EDIT: When I wrote the above, I was developing under Windows. On May 28 2016 I installed Ubuntu 14 on a 32-bit laptop. Using the answer of i88.ca, I got it to work.

I had the same problem as you and none of the answers helped me so here is my solution. This solution can be a general approach on how to run tutorials for Google AppEngine that worked on JDK 7 to work same way on Java 8. Also note that Google Cloud SDK and Google Cloud Platform are two different installations. Also I used Windows 10 x64 during experiment just for info.

This issue is very similar to - link as you mentioned, but in this case your Jetty server version doesn't support JDK 8. There is a Google tutorial regarding this - link . First I tried Jetty 6.1.x to experience the same problem you did to witness that Jetty server version doesn't support JDK 8(default AppEngine Dev config from Intellij 2016.1.2). Later I've tried Jetty 9.3.x and it worked correctly with JDK 8. Though now when I use Jetty server 9.3 I don't use appengine:devserver that emulates Users and Datastore APIs for tutorial to work. So I switched to emulators provided by gcloud - link , but gcloud is currently missing Users API emulator that is used in tutorial, but provided by appengine:devserver. Funny thing is that when I started to re-implement the tutorial, I found that other developers already did that - link .

Here is how you run the Guestbook tutorial (originally intended for JDK 7) with Maven 3.3.9, JDK 8, Jetty 9.3 and gcloud emulators

  1. [Optional] Correct issue with windows registry - link
  2. Install Python 2.7 - link
  3. Install Google Cloud Platform - link . Enable beta features during install.
  4. Complete this tutorial that is the same Guestbook app but implemented correctly for Java 8 support - Updated Guestbook tutorial

Conclusion

Look for updated tutorials on github if they are missing on https://cloud.google.com/appengine/docs

JDK version needs to be 1.7. SDK version in pom.xml need not change. I have tried all combinations of SDK versions and the only one that worked was setting $JAVA_HOME to 1.7 and leaving the version in pom.xml as it is (1.9.24). My initial jdk version was 1.8 and the app was failing with "Unable to compile class with JSP" error

I had to add

<runtime>java8</runtime>

in appengine-web.xml file to make it work. This is with latest android studio build and latest appengine java sdk - appengine-java-sdk-1.9.59

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