Olá,
Criei o método uma classe ProjetoResource com o método de busca, segue o código:
package br.com.alura.loja.resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import br.com.alura.loja.dao.ProjetoDAO;
import br.com.alura.loja.modelo.Projeto;
@Path("projetos")
public class ProjetoResource {
@GET
@Produces(MediaType.APPLICATION_XML)
public String busca() {
Projeto projeto = new ProjetoDAO().busca(1l);
return projeto.toXML();
}
}
Depois criei a classe Projeto DAO:
package br.com.alura.loja.dao;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import br.com.alura.loja.modelo.Projeto;
public class ProjetoDAO {
private static Map<Long, Projeto> banco = new HashMap<Long, Projeto>();
private static AtomicLong contador = new AtomicLong(1);
static {
banco.put(1l, new Projeto(1l, "Minha loja", 2014));
banco.put(2l, new Projeto(2l, "Alura", 2012));
}
public void adiciona(Projeto projeto) {
long id = contador.incrementAndGet();
projeto.setId(id);
banco.put(id, projeto);
}
public Projeto busca(long id) {
return banco.get(id);
}
public Projeto remove(long id) {
return banco.remove(id);
}
}
Criei a classe Projeto:
package br.com.alura.loja.modelo;
import com.thoughtworks.xstream.XStream;
public class Projeto {
long id;
String nome;
int anoDeInicio;
public Projeto( long id, String nome, int anoDeInicio){
this.id = id;
this.nome = nome;
this.anoDeInicio = anoDeInicio;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getAnoDeInicio() {
return anoDeInicio;
}
public void setAnoDeInicio(int anoDeInicio) {
this.anoDeInicio = anoDeInicio;
}
public String toXML() {
// TODO Auto-generated method stub
return new XStream().toXML(this);
}
}
Por fim, criei a classe de Teste:
package br.com.alura.loja;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import org.junit.Assert;
import org.junit.Test;
public class ProjetoTeste {
@Test
public void testaQueAConexaoComOServidorFuncionaNoPathDeProjetos() {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080");
String conteudo = target.path("/projetos").request().get(String.class);
Assert.assertTrue(conteudo.contains("<nome>Minha loja"));
}
}
Sendo que ao executar pelo Junit dá o seguinte erro : Não sei o possa estar acontecendo, alguém teria alguma ideia, poderia me ajudar? Agradeceria.....
/**javax.ws.rs.NotFoundException: HTTP 404 Not Found
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:917)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770)
at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296)
at br.com.alura.loja.ProjetoTeste.testaQueAConexaoComOServidorFuncionaNoPathDeProjetos(ProjetoTeste.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
(....)