jetty 9.4.39.v2021032 giving error when upgrading application from java 11 to java 17

197 Views Asked by At

I am getting below error when trying to upgrade app from java 11 to java 17.

at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) at org.eclipse.jetty.server.Server.doStart(Server.java:387) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) at com.akamai.abattery.ablc.Main.startServer(Main.java:111) at com.akamai.abattery.ablc.Main.main(Main.java:67) Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 61 at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:201) at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:179) at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:165) at jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:289) at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener.process(AnnotationAcceptingListener.java:148) at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:888) at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:842) at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:751)

I have googled around and I think this error is about compiling on lower version on JDK and running on higher version on JDK, in this case jdk 11 to jdk 17 but I have cross checked multiple time but I am compiling on jdk 17 only.

Next I tried to update the jetty version 9.4.39.v20210325 to 11 and jersey version 2.29.1 to 3.1.1 but this is giving below exception -

2023-06-21 12:58:04,027 ERROR \[main\] Main: Fatal Error:
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
org/glassfish/jersey/servlet/WebComponent.\<init\>(Lorg/glassfish/jersey/servlet/WebConfig;Lorg/glassfish/jersey/server/ResourceConfig;)V @177: invokespecial
Reason:
Type 'org/glassfish/jersey/server/ResourceConfig' (current frame, stack\[3\]) is not assignable to 'jakarta/ws/rs/core/Application'
Current Frame:
bci: @177
flags: { }
locals: { 'org/glassfish/jersey/servlet/WebComponent', 'org/glassfish/jersey/servlet/WebConfig', 'org/glassfish/jersey/server/ResourceConfig', '\[Lorg/glassfish/jersey/servlet/internal/sp
i/ServletContainerProvider;', integer, 'org/glassfish/jersey/servlet/internal/spi/RequestScopedInitializerProvider', 'org/glassfish/jersey/servlet/WebComponent$WebComponentBinder', 'java/lan
g/Object' }
stack: { 'org/glassfish/jersey/servlet/WebComponent', uninitialized 168, uninitialized 168, 'org/glassfish/jersey/server/ResourceConfig', 'org/glassfish/jersey/servlet/WebComponent$WebCo
mponentBinder', 'java/lang/Object' }
Bytecode:
0000000: 2ab7 000a 2a2b b500 0b2c c700 082b b800
0000010: 0c4d b800 0d4e 2a2c 2db7 000e 0336 0401
0000020: 3a05 2d3a 0619 06be 3607 0336 0815 0815
0000030: 07a2 003a 1906 1508 323a 0919 09c1 000f
0000040: 9900 2519 09c0 000f 3a0a 190a b900 1001
0000050: 0099 0006 0436 0419 05c7 000c 190a b900
0000060: 1101 003a 0584 0801 a7ff c52a 1905 c600
0000070: 0819 05a7 0006 b200 12b5 0013 2a15 04b5
0000080: 0001 bb00 1459 2a2c b600 1501 b700 163a
0000090: 062c 1906 b600 1757 2bb9 0018 0100 121a
00000a0: b900 1b02 003a 072a bb00 1c59 2c19 0619
00000b0: 07b7 001d b500 022a 2ab7 001e b500 1f2a
00000c0: 2bb9 0020 0100 b200 21a6 0010 2c12 22b6
00000d0: 0023 9900 0704 a700 0403 b500 242a 2c12
00000e0: 25b6 0023 9a00 0704 a700 0403 b500 262a
00000f0: 2cb6 0015 1228 03b8 0029 122a b800 2bc0
0000100: 002a b600 2cb5 002d 2a2a b400 02b6 0003
0000110: 122e 04bd 002f 5903 b200 3053 b900 3103
0000120: 00c0 002e b500 32b1
Stackmap Table:
full_frame(@18,{Object\[#256\],Object\[#257\],Object\[#258\]},{})
full_frame(@45,{Object\[#256\],Object\[#257\],Object\[#258\],Object\[#259\],Integer,Object\[#260\],Object\[#259\],Integer,Integer},{})
append_frame(@87,Object\[#261\],Object\[#262\])
chop_frame(@101,2)
chop_frame(@107,3)
same_locals_1_stack_item_frame(@118,Object\[#256\])
full_frame(@121,{Object\[#256\],Object\[#257\],Object\[#258\],Object\[#259\],Integer,Object\[#260\]},{Object\[#256\],Object\[#260\]})
full_frame(@217,{Object\[#256\],Object\[#257\],Object\[#258\],Object\[#259\],Integer,Object\[#260\],Object\[#263\],Object\[#264\]},{Object\[#256\]})
full_frame(@218,{Object\[#256\],Object\[#257\],Object\[#258\],Object\[#259\],Integer,Object\[#260\],Object\[#263\],Object\[#264\]},{Object\[#256\],Integer})
same_locals_1_stack_item_frame(@235,Object\[#256\])
full_frame(@236,{Object\[#256\],Object\[#257\],Object\[#258\],Object\[#259\],Integer,Object\[#260\],Object\[#263\],Object\[#264\]},{Object\[#256\],Integer})

        at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:154)
        at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:347)
        at jakarta.servlet.GenericServlet.init(GenericServlet.java:178)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:633)
        at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:415)
        at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:725)
        at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
        at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:749)
        at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:392)
        at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:896)
        at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:306)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
        at org.eclipse.jetty.server.Server.start(Server.java:469)
        at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
        at org.eclipse.jetty.server.Server.doStart(Server.java:414)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.akamai.abattery.ablc.Main.startServer(Main.java:111)
        at com.akamai.abattery.ablc.Main.main(Main.java:67)

below is my dependencies -

<jackson.version>2.11.4</jackson.version> <jersey.version>2.29.1</jersey.version> <jersey-media.version>2.29.1</jersey-media.version> <logback.version>1.2.9</logback.version> <jetty.version>9.4.39.v20210325</jetty.version> <powermock.version>2.0.0</powermock.version>

Below is the code where Jetty and jersey integration is happening - Here the main issue I see is the class org.glassfish.jersey.servlet.ServletContainer.class if I replace this with org.eclipse.jetty.servlet.DefaultServlet.class then server starts working fine but API starts giving 404. but if we run the same code in JDK11 everything works fine.

        private static void startServer() {
            final int port = Integer.parseInt(System.getProperty("PORT", "8080"));
            final InetSocketAddress addr = new InetSocketAddress("127.0.0.1", port);
            Server server = new Server(addr);

            ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

            ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
            jerseyServlet.setInitOrder(0);

            jerseyServlet.setInitParameter(ServerProperties.APPLICATION_NAME, "helloApp");
            jerseyServlet.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES,
                                       resourceNames.stream().collect(Collectors.joining(",")));
            jerseyServlet.setInitParameter(ServerProperties.TRACING_THRESHOLD, "SUMMARY");
            jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES,
                                       packageNames.stream().collect(Collectors.joining(",")));
            server.setHandler(context);
            try {
                server.start();
                server.join();
            } catch (Throwable t) {
                log.error("Fatal Error:", t);
                System.exit(1);
            }

        }

Any help is appreciated.

0

There are 0 best solutions below