Java java .lang.NoClassDefFoundError для ImmediateHk2InjectionManager с использованием Tomcat и Jersey - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь скомпилировать и запустить простое веб-приложение, используя реализацию JAX-RS на Джерси на сервере приложений Tomcat. Поскольку я не использую какую-либо строительную систему, например Maven, из-за ограничений инфраструктуры, я создал стандартный проект Eclipse Web Dynami c, а затем добавил эталонную реализацию Jersey в качестве единой библиотеки.

Когда я пытаюсь запрашивая веб-сервис через браузер, я получаю следующее исключение:

javax.servlet.ServletException: Servlet.init() for servlet [jersyServlet] threw exception
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)

Причина:

Java.lang.NoClassDefFoundError: Could not initialize class org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager
    org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory$Hk2InjectionManagerStrategy$1.createInjectionManager(Hk2InjectionManagerFactory.java:55)
    org.glassfish.jersey.inject.hk2.Hk2InjectionManagerFactory.create(Hk2InjectionManagerFactory.java:73)
    org.glassfish.jersey.internal.inject.Injections.createInjectionManager(Injections.java:69)
    org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:259)
    org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:154)
    org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:347)
    javax.servlet.GenericServlet.init(GenericServlet.java:158)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)

Инфраструктура: - JRE 1.8.0_241 - JDK 1.8.0_241 - Apache Tomcat 8.5.53

Включенные библиотеки (экспортированные / опубликованные):

  • jaxrs-ri-2.30.1.jar (эталонная реализация пакета Джерси)
  • junit-4.13 .jar

Код сервлета:

package com.test.services;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;


@Path("/up")
public class HelloService {


    @GET
    @Path("/sayhi")
    @Produces(MediaType.TEXT_HTML)
    public Response greetClient() {
        String output = "Hi ";
        return Response.status(200).entity(output).build();
    }

    @Path("/sayHello")
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHello() {
        String helloMessage = "<h1>Hi! Welcome To JAX RS</h1>";
        return helloMessage;
    }
}

Вот мой веб-сайт. xml file:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>testTomCat</display-name>
    <servlet>
        <servlet-name>jersyServlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.test.services</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersyServlet</servlet-name>
        <url-pattern>/firstJersey/*</url-pattern>
    </servlet-mapping>
</web-app>

Знаете ли вы, в чем проблема?

...