我通过在配置中选择 CXf 2.x 创建了一个动态 Web 项目。 我创建了以下课程:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/eshop")
public class Application5_1 extends Application{
/* public Set<Class<?>> getClasses(){
Set<Class<?>> s=new HashSet<Class<?>>();
s.add(EShopServiceImpl.class);
return s;
}*/
public Set<Object> getSingleton(){
Set<Object> s= new HashSet<Object>();
s.add(new EShopServiceImpl());
return s;
}
}
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@Consumes("application/json")
@Produces("application/json")
@Path("/items")
public interface EShopService {
@GET
public Items getItemList();
@POST
public Response createItem(Item item);
@GET
@Path("/{code}")
public Item getItemDetails(@PathParam("code") String code);
@DELETE
@Path("/{code}")
public void deleteItem(@PathParam("code")String code);
@POST
@Path("/{code}/orders/")
public Response orderItem(@PathParam("code") String code);
@GET
@Path("/{code}/orders/{oid}")
public Order getOrder(@PathParam("code") String code,@PathParam("oid") int oid);
}
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.ws.rs.core.Response;
public class EShopServiceImpl implements EShopService {
private HashMap<String,Item> itemCollection=new HashMap<String,Item>();
private HashMap<String,List<Order>> orderCollection=new HashMap<String,List<Order>>();
public EShopServiceImpl() {
itemCollection.put("001",new Item("001","samung-a2",12,1432.0));
itemCollection.put("002",new Item("002","iphone",12,1432.0));
itemCollection.put("003",new Item("003","samung-Galaxy",12,1332.0));
}
@Override
public Items getItemList() {
// TODO Auto-generated method stub
return new Items(new ArrayList<String>(itemCollection.keySet()));
}
@Override
public Response createItem(Item item) {
// TODO Auto-generated method stub
itemCollection.put(item.getCode(), item);
URI uri=null;
try {
uri= new URI("/items/"+item.getCode());
}catch(URISyntaxException e) {}
return Response.created(uri).build();
}
@Override
public Item getItemDetails(String code) {
// TODO Auto-generated method stub
return itemCollection.get(code);
}
@Override
public void deleteItem(String code) {
// TODO Auto-generated method stub
itemCollection.remove(code);
}
@Override
public Response orderItem(String code) {
// TODO Auto-generated method stub
orderCollection.put(code, new ArrayList<Order>());
URI uri=null;
try {
uri= new URI("/items/orders/"+code);
}catch(URISyntaxException e) {}
return Response.created(uri).build();
}
@Override
public Order getOrder(String code, int oid) {
// TODO Auto-generated method stub
return orderCollection.get(code).get(oid);
}
}
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>Esercizi_5_1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
eseguendo http://127.0.0.1:8080/Esercizi_5_1/eshop/items però ottengo questo errore
异常
javax.servlet.ServletException: Servlet.init() for servlet [it.unisaanio.eshop.Application5_1] 抛出异常 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:833) 根本原因
org.apache.cxf.service.factory.ServiceConstructionException org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:220) org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:569) org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:122) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:833) 根本原因
org.apache.cxf.service.factory.ServiceConstructionException:否 找到资源类 org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean.checkResources(AbstractJAXRSFactoryBean.java:318) org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:156) org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.createServerFromApplication(CXFNonSpringJaxrsServlet.java:569) org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.init(CXFNonSpringJaxrsServlet.java:122) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:833)
我认为问题是由于生成的 web.xml