2016-11-06 139 views
0

当我尝试部署我的项目,此异常情况:失败构建RESTful服务 - CDI部署失败

Grave: Undeployment failed for context /CRUD_Restful_Pub 
Grave: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type Set<Service> with qualifiers @Default 
    at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject com.google.common.util.concurrent.ServiceManager(Set<Service>) 
    at com.google.common.util.concurrent.ServiceManager.<init>(ServiceManager.java:0) 

我使用NetBeans + Glassfish的。 Lib泽西岛。所有最后的版本。

我认为这是一个CDI问题,任何我无法识别的注释。 如果有人能尽快帮助我,我真的很感激。 这是我第一次来这里。

这里是我的代码:

package br.unirio.soa.todo.resources; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.FormParam; 
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.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Request; 
import javax.ws.rs.core.UriInfo; 

import br.unirio.soa.todo.dao.PublicacaoDao; 
import br.unirio.soa.todo.model.Publicacao; 

// Will map the resource to the URL pubs 
@Path("/pubs") 
public class PubsResource { 

    // Allows to insert contextual objects into the class, 
    // e.g. ServletContext, Request, Response, UriInfo 
    @Context 
    UriInfo uriInfo; 
    @Context 
    Request request; 

    // Return the list of pubs for applications 
    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public List<Publicacao> getPubs() { 
      List<Publicacao> pubs = new ArrayList<>(); 
      pubs.addAll(PublicacaoDao.instance.getModel().values()); 
      return pubs; 
    } 

    // retuns the number of pubs 
    // Use http://localhost:8080/CRUD_Restful_Pub/rest/pubs/count 
    // to get the total number of records 
    @GET 
    @Path("count") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getCount() { 
      int count = PublicacaoDao.instance.getModel().size(); 
      return String.valueOf(count); 
    } 

    @POST 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public void newPub(@FormParam("id") int id, 
        @FormParam("titulo") String titulo, 
        @FormParam("paginaInicial") int paginaInicial, 
        @FormParam("paginaFinal") int paginaFinal, 
        @FormParam("dataPublicacao") String dataPublicacao, 
        @Context HttpServletResponse servletResponse) throws IOException { 
      Publicacao pub = new Publicacao(id, titulo, paginaInicial, paginaFinal, dataPublicacao); 
      if (titulo != null) { 
        pub.setTitulo(titulo); 
      } 
      PublicacaoDao.instance.getModel().put(Integer.toString(id), pub); 

      //servletResponse.sendRedirect("../create_pub.html"); 
    } 

    // Defines that the next path parameter after pubs is 
    // treated as a parameter and passed to the PubResource 
    // Allows to type http://localhost:8080/CRUD_Restful_Pub/rest/pubs/1 
    // 1 will be treaded as parameter pub and passed to PubResource 
    @Path("{pub}") 
    public PubResource getPub(@PathParam("pub") String id) { 
      return new PubResource(uriInfo, request, id); 
    } 


} 

package br.unirio.soa.todo.resources; 

import br.unirio.soa.todo.dao.PublicacaoDao; 
import br.unirio.soa.todo.model.Publicacao; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Request; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.UriInfo; 
import javax.xml.bind.JAXBElement; 

public class PubResource { 

@Context 
UriInfo uriInfo; 
@Context 
Request request; 
String id; 

public PubResource(UriInfo uriInfo, Request request, String id) { 
    this.uriInfo = uriInfo; 
    this.request = request; 
    this.id = id; 
} 

//Application integration 
@GET 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public Publicacao getPub() { 
    Publicacao pub = PublicacaoDao.instance.getModel().get(id); 
    if(pub==null) 
     throw new RuntimeException("Get: Publicacao with " + id + " not found"); 
    return pub; 
    /*List<Publicacao> result = new ArrayList<>(); 
    List<Publicacao> pubs = new ArrayList<Publicacao>(); 
    pubs.addAll(PublicacaoDao.instance.getModel().values()); 

    for (int i = 0; i< pubs.size(); i++){   
     if (titulo.equals(pubs.get(i).getTitulo())){   
      result.add(i,pubs.get(i)); 
     }   
    }  
    return result;*/ 
} 

@PUT 
@Consumes(MediaType.APPLICATION_XML) 
public Response putPub(JAXBElement<Publicacao> pub) { 
    Publicacao c = pub.getValue(); 
    return putAndGetResponse(c); 
} 

@DELETE 
public void deletePub() { 
    Publicacao c = PublicacaoDao.instance.getModel().remove(id); 
    if(c==null) 
     throw new RuntimeException("Delete: Publicacao with " + id + " not found"); 
    } 

private Response putAndGetResponse(Publicacao pub) { 
    Response res; 
    if(PublicacaoDao.instance.getModel().containsKey(pub.getId())) { 
     res = Response.noContent().build(); 
    } else { 
     res = Response.created(uriInfo.getAbsolutePath()).build(); 
    } 
     PublicacaoDao.instance.getModel().put(Integer.toString(pub.getId()), pub); 
     return res; 
    } 

} 

package br.unirio.soa.todo.dao; 

import br.unirio.soa.todo.model.Publicacao; 

import java.util.HashMap; 
import java.util.Map; 

public enum PublicacaoDao { 

    instance; 

    private Map<String, Publicacao> contentProvider = new HashMap<>(); 

    private PublicacaoDao() { 

      Publicacao pub = new Publicacao(1, "A Cloud-based Architecture for the Internet of Things Targeting Industrial Engine Remote Monitoring", 10, 20, "01/10/2015"); 
      contentProvider.put("1", pub); 

      pub = new Publicacao(2, "ResearchOps: The case for DevOps in scientific applications", 30, 45, "11/02/2012"); 
      contentProvider.put("2", pub); 

      pub = new Publicacao(3, "Architecting Cloud Tools using Software Product Line Techniques: an Exploratory Study", 23, 54, "15/07/2013"); 
      contentProvider.put("3", pub); 

      pub = new Publicacao(4, "WISE-SPL: Bringing Multi-tenancy to the Weather InSights Environment System", 120, 168, "20/09/2010"); 
      contentProvider.put("4", pub); 

    } 
    public Map<String, Publicacao> getModel(){ 
      return contentProvider; 
    } 

} 
+0

改进的格式和更正拼写 – Vickyexpert

+0

这是正确的进口? import javax.ws.rs.core.Context; – ACV

回答