Невозможно запустить веб-службу Jersey 2 Restful на Tomcat 9 - PullRequest
0 голосов
/ 27 августа 2018

Я пишу веб-сервис Джерси 2 Restful.Вот класс обслуживания:

package com.Test.PS;
import java.io.IOException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.QueryParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;

import com.Test.Exchange.*; // Here class UserInfo is defined

@Path("/ps")
public class TestService {
    private UserInfo ui;
    public TestService () throws IOException {
        ui = new UserInfo();
    }
    public TestService (String uid) throws IOException {
        UserInfo ui = ObjectFileStore.serializeDataIn(uid);
    }

    public TestService (UserInfo ui) throws IOException {
        this.ui = ui;
        ObjectFileStore.serializeDataOut(ui);
    }

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHelloHTML(@QueryParam("uid") String uid) {     
        String resource="<h1> Hi '" + uid + "'. </h1>";
        return resource;
    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public UserInfo postNK(@QueryParam("asid") String asid, UserInfo u) {
        return ui;
    }
}

Вот зависимости maven:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>2.27</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>2.27</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
  <version>2.27</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.inject</groupId>
  <artifactId>jersey-hk2</artifactId>
  <version>2.27</version>
  <scope>provided</scope>
</dependency>

Наконец, это мой файл web.xml:

  <display-name>Test-PS</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Test-PS</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.PS</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Test-PS</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

Iя получаю следующую ошибку при запуске этого сервиса на Tomcat 9 с использованием URL (http://localhost:8081/Test-PS/rest/ps?uid=90):

HTTP Status 404 – Not Found
Type Status Report
Message /Test-PS/rest/ps
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

На экране консоли я вижу:

INFO: Reloading Context with name [/Test-PS] has started
org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/Test-PS] is completed

Я попытался добавить несколько других зависимостейкак и предполагалось другими сообщениями здесь, однако, все еще с той же проблемой. Удивительно, но иногда это работает по неизвестной причине !!!

Я также удалил все репозитории maven, ничего не изменилось !!!

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Проблема решается следующим образом:

  • Удаление Eclipse и установка версии EE.
  • Удаление Tomcat и установка версии 9.0.11.
  • Повторное создание проектас нуля.
0 голосов
/ 27 августа 2018
  1. Удалите <scope>provided</scope> из всех ваших зависимостей Джерси.Вы используете это только тогда, когда сервер уже имеет эти файлы в своей библиотеке.У Tomcat нет банок из джерси.Если, с другой стороны, вы использовали Glassfish, вы можете использовать provided, поскольку Glassfish уже имеет все банки Джерси.

  2. Удалите зависимости Jersey-client и jersey-server.Они оба уже втянуты jersey-container-servlet.Нет необходимости в резервировании.

...