java - 容器异常 : The ResourceConfig instance does not contain any root resource classes while deploying my app on Wildfly Server

标签 java rest jboss jersey wildfly

我正在尝试制作一个简单的休息服务并将应用程序部署在 Wildfly 服务器上,当我尝试在服务器上部署我的应用程序时,出现以下异常:

Cannot upload deployment: {"WFLYCTL0080: Failed services" => 
{"jboss.undertow.deployment.default-server.default-host./resttestapp" => 
"org.jboss.msc.service.StartException in service 
jboss.undertow.deployment.default-server.default-host./resttestapp: 
com.sun.jersey.api.container.ContainerException: The ResourceConfig 
instance does not contain any root resource classes. Caused by: 
com.sun.jersey.api.container.ContainerException: The ResourceConfig 
instance does not contain any root resource classes."}}

我从 stackoverflow 尝试了很多东西,但没有任何效果。

我正在使用 Wildfly 9.0.2(独立版,通过管理控制台部署)、Intellij idea。

这是我的 pom.xml 的一部分:

<groupId>cz.prg.rob</groupId>
  <artifactId>resttestapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>resttestapp Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <jersey.version>1.19.4</jersey.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>${jersey.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-server -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>${jersey.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-bundle -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-bundle</artifactId>
      <version>${jersey.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20180813</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.6</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
  </dependencies>

这是我的 web.xml:

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>JerseyServlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>cz.prg.rob</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

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

这是我的服务类别:

package cz.prg.rob;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import java.util.Date;

@Path("/name")
public class UserService {

    @GET
    @Produces("text/plain")
    public String getName() {
        return "Qwerty";
    }

    @GET
    @Path("/user")
    @Produces("application/json")
    public User getUser(@QueryParam("name") String name, @QueryParam("surname") String surname, @QueryParam("birthDate") Date birthDate) {
        return new User(name, surname, birthDate);
    }

}

这是我的用户(模型)类的一部分:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
    private String name;
    private String surname;
    private Date birthDate;
}

这是我的项目结构:

project structure

我不明白我做错了什么。请帮助我。

最佳答案

对我有帮助的解决方案:

我已将其添加为 JerseyServlet 的初始化参数

<init-param>
  <param-name>javax.ws.rs.Application</param-name>
  <param-value>cz.prg.rob.UserServiceApplication</param-value>
</init-param>

这是我定义资源类的类

public class UserServiceApplication extends Application {
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(UserService.class);
        return s;
    }
}

所以看起来我必须明确地告诉 jersey 哪些类是资源类。如果您想添加新的资源类,只需将它们添加到 HashSet 中的 getClasses() 方法中即可。

关于java - 容器异常 : The ResourceConfig instance does not contain any root resource classes while deploying my app on Wildfly Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55379234/

相关文章:

java - Spring MVC 转换方法

java - 使用 Splunk 通用转发器或 Splunk REST API 的优势?

iphone - [iPhone 和网络服务] : REST vs SOAP

java - JBoss下链式MySQL语句

java - JBoss war 文件部署问题

java - 从主 Java 调用方法

用于非常大的数字的快速乘法的 Java 库

未调用 Java Rest Put 方法 (Jersey/JAX)

java - 如何以编程方式邀请用户参加 Google Hangout 直播?

java - 在8843端口启动Jboss服务器5.x