При попытке развернуть мой проект, это исключение происходит:Ошибка построения 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. Либби Джерси. Все последние версии.
Я думаю, что это проблема 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;
}
}
Улучшенное форматирование и Исправленная Правописание – Vickyexpert
Является ли это право на импорт? import javax.ws.rs.core.Context; – ACV