Java 无法在WildFly 11上上载部署
我有一个问题,这几天我都快疯了。 我正在尝试在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实例不包含任何根资源类。”} 这是我的课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
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、 我脱下了球衣,效果很好,非常感谢。。!