Хобрук: Ваш путь к мастерству в программировании

Служба Wildfly развернута, но ресурс не найден

Я только что начал проект веб-приложения в Wildfly, используя maven. Судя по логам, служба развернута правильно, но я не знаю, что не так, что я не могу получить доступ к ресурсам.

Я пытался использовать функцию автоматического сканирования, определение @Application и т. д., но ни один из них не работал.

Результат из журнала сервера для окончательного кода, который я публикую:

20:57:25,781 INFO  [stdout] (ServerService Thread Pool -- 66) ************ Constructor **********

20:57:25,781 INFO  [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 66) RESTEASY002225: Deploying javax.ws.rs.core.Application: class es.domain.prj.rest.JaxRsActivator
20:57:25,781 INFO  [stdout] (ServerService Thread Pool -- 66) ************ Initializing **********

20:58:03,634 INFO  [stdout] (ServerService Thread Pool -- 66) *** REST SERVICE ****

20:58:09,600 INFO  [stdout] (ServerService Thread Pool -- 66) ************ Initializing **********

20:58:11,113 INFO  [stdout] (ServerService Thread Pool -- 66) *** REST SERVICE****

20:58:13,440 INFO  [org.jboss.resteasy.resteasy_jaxrs.i18n] (ServerService Thread Pool -- 66) RESTEASY002220: Adding singleton resource es.domain.prj.rest.RestService from Application class es.domain.prj.rest.JaxRsActivator
20:58:13,633 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 66) WFLYUT0021: Registered web context: /prj

Я пытался получить доступ к:

http://localhost:8080/prj/jlanza/resource --> Не найдено

http://localhost:8080/prj/jlanza --> Не найдено

http://localhost:8080/prj/resource --> Не найдено

Не могли бы вы дать мне несколько советов? Где зарегистрированы ресурсы? Я знаю, что это должна быть довольно глупая вещь, но я не могу ее идентифицировать.

Найдите ниже исходный код, файлы pom.xml и web.xml.

Заранее спасибо.

web.xml

<?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" 
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
  id="WebApp_ID" 
  version="3.0">

  <display-name>MyFirstProject</display-name>

  <!-- Auto scan REST service -->
  <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
  </context-param>

  <context-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>es.domain.prj.rest.JaxRsActivator</param-value>
  </context-param>

  <!-- this needs to be the same as servlet-mapping url-pattern -->
  <!-- set this if you map the Resteasy servlet to something other than /* -->
  <!-- 
  <context-param>
      <param-name>resteasy.servlet.mapping.prefix</param-name>
      <param-value>/resteasy</param-value>
   </context-param>
   -->

  <listener>
    <listener-class>
      org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
    </listener-class>
  </listener>

  <servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
      org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>es.domain</groupId>
  <artifactId>prj</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <slf4j.version>1.7.21</slf4j.version>
    <!-- current log4j 2 release -->
    <log4j.version>2.5</log4j.version> 
    <jena.version>3.0.1</jena.version>
    <jboss.resteasy.version>3.0.16.Final</jboss.resteasy.version>
    <javax.cdi-api.version>1.2</javax.cdi-api.version>
    <javax.servlet.version>3.0-alpha-1</javax.servlet.version>

    <maven.plugin.version>3.5.1</maven.plugin.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!-- Binding for Log4J -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
          </exclusion>
        </exclusions>
    </dependency>
    <!-- Log4j API and Core implementation required for binding -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j.version}</version>
    </dependency>

    <!-- Import the JAX-RS API, we use provided scope as the API is included 
        in JBoss WildFly -->
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxrs</artifactId>
      <version>${jboss.resteasy.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <version>${javax.cdi-api.version}</version>
    </dependency>

<!-- 
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>${javax.servlet.version}</version>
      <scope>provided</scope>
    </dependency>
-->     
    <!-- Jena library -->
    <dependency>
       <groupId>org.apache.jena</groupId>
       <artifactId>apache-jena-libs</artifactId>
       <type>pom</type>
       <version>${jena.version}</version>
       <exclusions>
        <exclusion>
          <artifactId>log4j</artifactId>
          <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
          <artifactId>slf4j-log4j12</artifactId>
          <groupId>org.slf4j</groupId>
        </exclusion>
       </exclusions>
    </dependency> 
  </dependencies>

  <build>
    <finalName>prj</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven.plugin.version}</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
     </plugins>
   </build>
</project>

JaxRsActivator.java

package es.domain.prj.rest;

import java.util.HashSet;
import java.util.Set;

//import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

//@ApplicationPath("/api")
public class JaxRsActivator extends Application {

    public JaxRsActivator() {
      System.out.println("************ Constructor **********");
    }

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
//        classes.add(MyResource.class);
        return classes;
    }

    @Override
    public Set<Object> getSingletons() {
  System.out.println("************ Initializing **********");
        Set<Object> singletons = new HashSet<Object>();
        singletons.add(new RestService());
        return singletons;
    }
}

RestService.java

package es.domain.prj.rest;

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.core.Response;
import javax.ws.rs.core.Response.Status;

@Path("/jlanza")
public class RestService {

    public RestService() {
      System.out.println("*** REST SERVICE ****");
    }

    @GET
    @Path("resource")
    @Produces(MediaType.TEXT_PLAIN)
    public Response getResource() {
      System.out.println("***Calling function****");
      return Response.status(Status.OK).entity("working").build();
    }
}
10.05.2016

Ответы:


1

ваше приложение должно быть доступно по адресу:

http://localhost:8080/prj/jlanza/resource

Попробуйте протестировать свою wildfly, проверив порт 8080. Затем попробуйте протестировать свое приложение, используя некоторые расширения, доступные в Firefox, такие как Resteasy. Вы получите ответы http, которые могут помочь вам найти проблему.

10.05.2016
  • Wildfly работает в порту корректно. Но я все еще получаю Not Found при доступе к ресурсам. Вы видите ошибку в коде? Есть ли что-то еще, что мне нужно настроить в wildfly? 11.05.2016
  • Думаю, я нашел ответ. имя сервера должно быть одинаковым в web.xml для обеих записей. resteasy-servlet и resteasy отличаются. Меняя их, кажется, работает. 11.05.2016

  • 2

    Я не знаю, поможет ли это кому-то, но в моем случае проблема заключалась в том, что сервер не обновлялся при синхронизации. А причиной проблемы стала смена целевой среды выполнения сервера.

    Это связано с этой веткой: https://developer.jboss.org/thread/276899

    Решение состояло в том, чтобы удалить и воссоздать среду выполнения и сервер.

    11.06.2018

    3

    Проблема в том, что под <servlet-name> для <servlet> и <servlet-mapping> я использовал два разных имени. Это приводит к тому, что невозможно связать, как запустить службу.

    Кроме того, я включил в свой файл pom:

        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>${jboss.resteasy.version}</version>
        </dependency>
    
    16.05.2016
    Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.