5

Some kind of nightmare - can not launch primitive servlet on Apache Tomcat 9.0.22 (or Glassfish 5.0.1) and Apache NetBeans IDE 11.0 (Build incubator-netbeans-release-404-on-20190319) by using servlet annotations.. Using JDK 1.8u221. Here is the code:

@WebServlet(name = "NewServlet", urlPatterns = {"/meow"})
public class NewServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("test");
    }
}

And web.xml file:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">

</web-app>

The root cause (note the line number, it's always 1!):

java.lang.RuntimeException: 
    com.example.NewServlet.<init>(NewServlet.java:1)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    java.base/java.lang.Class.newInstance(Class.java:584)
    org.apache.openejb.core.WebContext.newWeakableInstance(WebContext.java:147)
    org.apache.openejb.core.WebContext.newInstance(WebContext.java:181)
    org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:78)
    org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:124)
    org.apache.tomee.catalina.JavaeeInstanceManager.newInstance(JavaeeInstanceManager.java:119)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.invoke(OpenEJBSecurityListener.java:97)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1839)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:834)

The goal is to declare servlets only by annotations, like @WebServlet(name = "NewServlet", urlPatterns = {"/meow"}).

Tested on NetBeans 8.2 with JDK1.8u221 - all works as expected. I suspect the problem is in Apache NetBeans 11, even if project JDK is set to 8 (also source/binary format).

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Ernestas Gruodis
  • 8,567
  • 14
  • 55
  • 117

2 Answers2

6

I encountered this problem in Netbeans 12.0 today using OpenJDK 14. It turns out the problem was resolved by installing the nb-javac plugin.

mwarble
  • 69
  • 1
  • 2
  • 1
    The installation of this plugin did work for me using Apache Netbeans 12.0, with JDK 8 to GlassFish 5.1.0 and for project's java platform. Seems that it is needed in case you are using JDK just as a library, without define your environment variables, since my default JDK is 13. Here the describe of nb-javac plugin for someone who wants give more accurate statement about the need of it to run a servlet: https://blogs.apache.org/netbeans/entry/what-s-nb-javac-in – Leandro Arruda Aug 08 '20 at 16:03
  • Confirming nb-javac plugin also solves the problem on Apache Netbeans 12.3 running on 64-bit OpenJDK 15.0.2 using Apache 8.5.8 running on JDK 1.8.0_172 – hfmanson Oct 16 '21 at 16:53
2

The fault was in Apache NetBeans 11. In later version (still unofficial) 11.1 the Servlet annotations works as it should be, even without web.xml file. Tested with Apache Tomcat 9.0.22 and Glassfish 5.0.1 on Apache NetBeans IDE 11.1 (available for download from this web page).

Ernestas Gruodis
  • 8,567
  • 14
  • 55
  • 117
  • FYI, Apache NetBeans 11.1 was formally released yesterday. You can [download the zip from here](https://netbeans.apache.org/download/nb111/nb111.html). – skomisa Jul 24 '19 at 01:11