Nano Hash - криптовалюты, майнинг, программирование

Ошибка развертывания с веб-службой JAX-RS 2.0 RESTful и tomcat 8.0

Я новичок в написании REST WebServices. В настоящее время я пытаюсь написать службу RESTful, используя jersey-2.x и tomcat 8.0. Однако, когда я пытаюсь развернуть в eclipse, это дает мне следующую ошибку:

java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;

Что я сделал:

  1. написал ниже классов:

    @ApplicationPath("resources")
    public class RestTestApplication extends Application
    {
        @Override
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<Class<?>>();
            // register root resource
            classes.add(HelloResource.class);
            return classes;
        }
    }
    
    @Path("sayhello")
    public class HelloResource
    {
        @GET
        @Produces("text/plain")
        public String sayhello ()
        {
            return "Hi, How are you !!";
        }
    }
    
  2. загружено с http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jaxrs-ri/2.12/jaxrs-ri-2.12.zip

  3. загружен jsr311-api-1.1.2.r612.jar

  4. скопировал все файлы *.jar из jaxrs-ri-2.12.zip и jsr311-api-1.1.2.r612.jar в WEB-INF/lib, а также импортировал в путь сборки.

  5. Отредактировал web.xml, как показано ниже:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
        <display-name>RestWS</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list> 
    <servlet>
        <servlet-name>Rest Test</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.example</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Rest Test</servlet-name>
        <url-pattern>/resources/*</url-pattern>
    </servlet-mapping>
    </web-app>`
    
  6. запустить как -> запустить на сервере

  7. Получение ошибки, упомянутой выше.

пожалуйста, дайте мне знать, что я делаю неправильно.


Ответы:


1

Я думаю, это потому, что у вас есть обе банки из jaxrs-ri-2.12.zip и jsr311-api-1.1.2.r612.jar в вашем пути к классам. jsr311-api-1.1.2.r612.jar имеет более старую реализацию JAX-RS API. Ваш класс Application, из которого расширяется ваш RestTestApplication, принадлежит классу jsr311-api-1.1.2.r612.jar; однако во время выполнения упоминается класс Application из вашей банки jaxrs в jaxrs-ri-2.12.zip. Мы надеемся, что удаление jar jsr311 из вашего WEBINF/lib должно решить проблему.

Если вы декомпилируете класс Application из обоих банок, вы заметите, что класс в jsr311 банке не имеет метода getProperties и, следовательно, ошибки java.lang.NoSuchMethodError.

20.09.2014
  • Теперь это работает. Спасибо за решение вместе с подробным объяснением. 21.09.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..