构建Restful服务失败 - CDI部署失败

时间:2016-11-06 12:05:50

标签: java rest netbeans jersey glassfish

当我尝试部署项目时,会发生以下异常:

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。自由泽西岛。所有最新版本。

我认为这是一个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;
    }

}

1 个答案:

答案 0 :(得分:0)