Java 无法在WildFly 11上上载部署

Java 无法在WildFly 11上上载部署,java,wildfly,Java,Wildfly,我有一个问题,这几天我都快疯了。 我正在尝试在wildfly中部署webapp,但出现以下错误: 无法上载部署:{“WFLYCTL0080:失败的服务”=>{“jboss.undertow.deployment.default server.default host./webapp”=>“com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。原因:com.sun.jersey.api.container

我有一个问题,这几天我都快疯了。 我正在尝试在wildfly中部署webapp,但出现以下错误:

无法上载部署:{“WFLYCTL0080:失败的服务”=>{“jboss.undertow.deployment.default server.default host./webapp”=>“com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。原因:com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。”}

这是我的课

package com.stavros.ticketmanagement.rest;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import com.stavros.ticketmanagement.domain.Ticket;

@Path("/tickets")
public class TicketResource extends Application {   
@GET
@Produces("application/xml")
public List<Ticket> getAllTickets(){
List<Ticket> results= new ArrayList<Ticket>();
results.add(new Ticket(1, "TestName", "Test time", 100, 0));
results.add(new Ticket(2, "TestName2", "Test time2", 102, 0));
return results;
    }
}
package com.statvros.ticketmanagement.rest;
导入java.util.ArrayList;
导入java.util.List;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.products;
导入javax.ws.rs.core.Application;
导入com.statvros.ticketmanagement.domain.Ticket;
@路径(“/票”)
公共类TicketResource扩展应用程序{
@得到
@生成(“应用程序/xml”)
公共列表getAllTickets(){
列表结果=新建ArrayList();
添加(新记录单(1,“测试名称”,“测试时间”,100,0));
结果。添加(新记录单(2,“测试名称2”,“测试时间2”,102,0));
返回结果;
}
}
这是我的web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>
      javax.faces.webapp.FacesServlet
       </servlet-class> 
   </servlet>

   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>

   <context-param>
      <param-name>javax.faces.PROJECT_STAGE</param-name>
      <param-value>Development</param-value>
   </context-param>


    <!-- Configuration for JAX-RS  -->
   <servlet>
      <servlet-name>Jersey Web Application</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>com.stavros.ticketmanagement.rest</param-value>
      </init-param>

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

   <servlet-mapping>
      <servlet-name>Jersey Web Application</servlet-name>
      <url-pattern>/webservice/*</url-pattern>
   </servlet-mapping>

</web-app>

Facesservlet
javax.faces.webapp.FacesServlet
Facesservlet
*.jsf
javax.faces.PROJECT_阶段
发展
Jersey Web应用程序
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.statvros.ticketmanagement.rest
1.
Jersey Web应用程序
/网络服务/*
这是我在TicketResource中使用的票证类

//Domain class. A class that represents the actual real word object (in this case a ticket)
package com.stavros.ticketmanagement.domain;

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

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.xml.bind.annotation.XmlRootElement;

@Entity //Make the class usable from JPA (We store data to db with this class)
@XmlRootElement
public class Ticket implements java.io.Serializable {



    public Ticket() {
        //required by JPA but not used
        super();
    }


    @Id //Used from JPA as primary key
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int ticketId;
    private String eventName;
    private String eventTime;
    private int price;
    private int isReserved;

    @OneToMany(cascade=CascadeType.MERGE) // in the events of an un-persistence obj being found in the Nnotes collection jpa is free to automatically call persist on that obj
    private Set<Note> notes; //this is used to keep a reference of the relative notes to each ticket. Its a collection (Set is better for DBs)Set: collection on obj with no particular order and no duplicate obj

//  @ManyToOne  //(cascade=CascadeType.PERSIST) // this should be manytoone
//  private Set<User> users;

    public Ticket(int ticketId, String eventName, String eventTime, int price, int isReserved) {
        super();
        this.notes = new HashSet<Note>();
        this.ticketId = ticketId;
        this.eventName = eventName;
        this.eventTime = eventTime;
        this.price = price;
        this.isReserved = isReserved;
    }


    public int getTicketId() {
        return ticketId;
    }

    public void setTicketId(int ticketId) {
        this.ticketId = ticketId;
    }

    public String getEventTime() {
        return eventTime;
    }

    public void setEventTime(String eventTime) {
        this.eventTime = eventTime;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getIsReserved() {
        return isReserved;
    }

    public void setIsReserved(int isReserved) {
        this.isReserved = isReserved;
    }

    public Set<Note> getNotes() {
        return notes;
    }

    public void setNotes(Set<Note> notes) {
        this.notes = notes;
    }

    public String getEventName() {
        return eventName;
    }


    //this is what the find*Ticket will return in TestHarness
    public String toString() {
        return "Ticket [ticketId=" + ticketId + ", eventName=" + eventName + ", eventTime=" + eventTime + ", price="+ price + ", isReserved=" + isReserved + "]";
    }

    //Regular methods, for example -10% to a ticket
    public void setEventName(String newEventName) {
        this.eventName = newEventName; //updates the eventName in the db
    }

    //bsn methods
    //add a note
    public void addNote(String newNoteText) {
        Note newNote=new Note(newNoteText);
        this.notes.add(newNote);
    }

    //add a user
//  public void addUser(int userId, String userName, String password, String email, int accessLevel) {
//      User newUser=new User(userId, userName, password, email, accessLevel);
//      this.users.add(newUser);
//  }



    public Set<Note> getAllNotes() {
        // TODO Auto-generated method stub
        return this.notes;
    }


}
//域类。表示实际实词对象的类(在本例中为票证)
包com.statvros.ticketmanagement.domain;
导入java.util.HashSet;
导入java.util.Set;
导入javax.persistence.CascadeType;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.OneToMany;
导入javax.xml.bind.annotation.XmlRootElement;
@实体//使该类从JPA可用(我们使用该类将数据存储到db)
@XmlRootElement
公共类票证实现java.io.Serializable{
公众票{
//JPA要求但未使用
超级();
}
@Id//从JPA用作主键
@GeneratedValue(策略=GenerationType.AUTO)
私人互联网资讯科技署;
私有字符串eventName;
私有字符串事件时间;
私人int价格;
保留私人int;
@OneToMany(cascade=CascadeType.MERGE)//在NONTES集合中发现的非持久化obj事件中,jpa可以自由地自动调用该obj上的持久化
private Set notes;//用于保存每个票据的相关注释的引用。它是一个集合(Set更适合DBs)Set:obj上的集合,没有特定的顺序,也没有重复的obj
//@ManyToOne//(cascade=CascadeType.PERSIST)//这应该是ManyToOne
//私人用户;
公共票证(int ticketId、String eventName、String eventTime、int price、int isReserved){
超级();
this.notes=新的HashSet();
this.ticketId=ticketId;
this.eventName=eventName;
this.eventTime=eventTime;
这个价格=价格;
this.isReserved=isReserved;
}
public int getTicketId(){
返回TID;
}
公共无效SETTICKTID(int TICKTID){
this.ticketId=ticketId;
}
公共字符串getEventTime(){
返回事件时间;
}
public void setEventTime(字符串eventTime){
this.eventTime=eventTime;
}
public int getPrice(){
退货价格;
}
公共无效设置价格(整数价格){
这个价格=价格;
}
public int getIsReserved(){
保留退货;
}
保留公共无效设置(保留整数){
this.isReserved=isReserved;
}
公共集getNotes(){
回条;
}
公共作废集注(集注){
this.notes=注释;
}
公共字符串getEventName(){
返回事件名;
}
//这就是find*票证将在TestHarness中返回的内容
公共字符串toString(){
return“Ticket[ticketId=“+ticketId+”,eventName=“+eventName+”,eventTime=“+eventTime+”,price=“+price+”,isReserved=“+isReserved+”””;
}
//常规方法,例如-10%的票款
public void setEventName(字符串newEventName){
this.eventName=newEventName;//更新数据库中的eventName
}
//bsn方法
//添加注释
public void addNote(字符串newNoteText){
注释newNote=新注释(newNoteText);
this.notes.add(newNote);
}
//添加用户
//public void addUser(int userId、字符串用户名、字符串密码、字符串电子邮件、int accessLevel){
//User newUser=新用户(用户名、用户名、密码、电子邮件、访问级别);
//this.users.add(newUser);
//  }
公共集合getAllNotes(){
//TODO自动生成的方法存根
归还此文件。注意事项;
}
}
我已经尝试了我找到的所有可能的解决方案。web.xml中的路径是正确的

这是我的LIB的照片


非常感谢您的帮助。!

1)您是否有扩展javax.ws.rs.core.Application并定义应用程序路径的类?2)WAR的内容是什么?我建议您不要使用Jersey,因为它看起来并不是针对Jersey的。请使用默认的JAX-rs实现容器h、 我脱下了球衣,效果很好,非常感谢。。!