【问题标题】:Wildfly swarm - Page not found errorWildfly swarm - 找不到页面错误
【发布时间】:2023-03-06 12:25:01
【问题描述】:

这是我拥有的 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>hu.javacity.app.buildingsofcities</groupId>
    <artifactId>city</artifactId>
    <name>WildFly Swarm Example</name>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <version.wildfly.swarm>2018.4.1</version.wildfly.swarm>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>bom-all</artifactId>
        <version>${version.wildfly.swarm}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <finalName>demo</finalName>
    <plugins>
      <plugin>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>wildfly-swarm-plugin</artifactId>
        <version>${version.wildfly.swarm}</version>

        <executions>
          <execution>
            <goals>
              <goal>package</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- Java EE 7 dependency -->
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- WildFly Swarm Fractions -->

  </dependencies>
</project>

这将是 HelloWorldEndpoint.java

package hu.javacity.app.buildingsofcities.city.rest;


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


@Path("/hello")
public class HelloWorldEndpoint {

    @GET
    @Produces("text/plain")
    public Response doGet() {
        return Response.ok("Hello from WildFly Swarm!").build();
    }
}

运行 Maven 后,它说:“WildFly Swarm 已准备就绪”并且我没有收到任何错误所以我尝试将以下 URL 写入:localhost:8080/hello 结果是以下消息:“未找到”我尝试使用Edge、Firefox 或 Chrome,但都没有成功。

【问题讨论】:

    标签: maven wildfly wildfly-swarm


    【解决方案1】:

    所以这里有一些问题。首先,您缺少JAX-RS Swarm 分数。这意味着您的 pom.xml 中的依赖项需要如下所示:

      <dependencies>
        <!-- Java EE 7 dependency -->
        <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-api</artifactId>
          <version>7.0</version>
          <scope>provided</scope>
        </dependency>
        <!-- WildFly Swarm Fractions -->
        <dependency>
          <groupId>org.wildfly.swarm</groupId>
          <artifactId>jaxrs</artifactId>
        </dependency>
      </dependencies>
    

    现在是第二个问题。在 Wildfly Swarm 的 2018.4.1 版本中,swarm 团队删除了标准 JAX-RS 应用程序所需的 javax.ws.rs.core.Application 的自动生成(有关更多信息,请参阅 this blog)。如果您尝试在 2018.4.1 中启动您的代码,您会收到警告:

    WFLYRS0015:没有为 JAX-RS 应用程序找到 Servlet 声明。在 demo.war 要么提供一个扩展类 javax.ws.rs.core.Application 或在 web.xml 中声明一个 servlet 类。

    您的应用程序无法运行。所以你有两种选择来解决那个问题。第一个是只使用2018.3.1,因为它确实会自动生成。然而,这是一个糟糕的修复,因为在未来,Swarm 可能会继续 2018.4.1 版本的行为。因此,要修复它,您需要添加自己的 javax.ws.rs.core.Application,它可能类似于:

    package hu.javacity.app.buildingsofcities.city.rest;
    
    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
    
    @ApplicationPath("/")
    public class RestApplication extends Application {
        // intentionally empty
    }
    

    这会将您的JAX-RS 路径设置为/。一个常见的模式是使用 /rest/svc 之类的东西,但现在这对你来说很好。

    【讨论】:

    • 在这种情况下不建议指定 Jax-RS 依赖项。 Swarm 在自动检测方面非常出色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2016-04-07
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多