RESTful Web 服务

问题描述 投票:0回答:0

我通过在配置中选择 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

rest tomcat cxf
© www.soinside.com 2019 - 2024. All rights reserved.