package br.com.loja;
import java.io.IOException;
import java.net.URI;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;
public class Servidor {
public static void main(String[] args) throws IOException {
HttpServer server = inicializaServidor();
System.out.println("Servidor rodando");
System.in.read();
server.stop();
}
public static HttpServer inicializaServidor() {
ResourceConfig config = new ResourceConfig().packages("br.com.loja");
URI uri = URI.create("http://localhost:8080/");
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri, config);
return server;
}
}
package br.com.loja.dao;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import br.com.loja.modelo.Carrinho;
import br.com.loja.modelo.Produto;
public class CarrinhoDAO {
private static Map<Long, Carrinho> banco = new HashMap<Long, Carrinho>();
private static AtomicLong contador = new AtomicLong(1);
static {
Produto videogame = new Produto(6237, "Videogame 4", 4000, 1);
Produto esporte = new Produto(3467, "Jogo de esporte", 60, 2);
Carrinho carrinho = new Carrinho()
.adiciona(videogame)
.adiciona(esporte)
.para("Rua Francisco Martins, 265", "Rio de Janeiro")
.setId(1l);
banco.put(1l, carrinho);
}
public void adiciona(Carrinho carrinho) {
long id = contador.incrementAndGet();
carrinho.setId(id);
banco.put(id, carrinho);
}
public Carrinho busca(Long id) {
return banco.get(id);
}
public Carrinho remove(long id) {
return banco.remove(id);
}
}
package br.com.loja.modelo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.google.gson.Gson;
import com.thoughtworks.xstream.XStream;
public class Carrinho {
private List<Produto> produtos = new ArrayList<Produto>();
private String rua;
private String cidade;
private long id;
public Carrinho adiciona(Produto produto) {
produtos.add(produto);
return this;
}
public Carrinho para(String rua, String cidade) {
this.rua = rua;
this.cidade = cidade;
return this;
}
public Carrinho setId(long id) {
this.id = id;
return this;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public long getId() {
return id;
}
public void remove(long id) {
for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
Produto produto = (Produto) iterator.next();
if(produto.getId() == id) {
iterator.remove();
}
}
}
public void troca(Produto produto) {
remove(produto.getId());
adiciona(produto);
}
public void trocaQuantidade(Produto produto) {
for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
Produto p = (Produto) iterator.next();
if(p.getId() == produto.getId()) {
p.setQuantidade(produto.getQuantidade());
return;
}
}
}
public List<Produto> getProdutos() {
return produtos;
}
public String toXML() {
return new XStream().toXML(this);
}
}
package br.com.loja.modelo;
public class Produto {
private double preco;
private long id;
private String nome;
private int quantidade;
public Produto(long id, String nome, double preco, int quantidade) {
this.id = id;
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
public double getPreco() {
return preco;
}
public long getId() {
return id;
}
public String getNome() {
return nome;
}
public int getQuantidade() {
return quantidade;
}
public double getPrecoTotal() {
return quantidade * preco;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
}
package br.com.loja.resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import br.com.loja.dao.CarrinhoDAO;
import br.com.loja.modelo.Carrinho;
@Path("carrinhos")
public class CarinhoResource {
@Path("{id}")
@GET
@Produces(MediaType.APPLICATION_XML)
public String busca(@PathParam("id") long id) {
Carrinho carrinho = new CarrinhoDAO().busca(id);
return carrinho.toXML();
}
}
Quando tento levantar o servidor aparece o seguinte erro:
jul 14, 2017 9:58:16 AM org.glassfish.jersey.server.ApplicationHandler initialize
INFORMAÇÕES: Initiating Jersey application, version Jersey: 2.5 2013-12-18 14:27:29...
Exception in thread "main" javax.ws.rs.ProcessingException: IOException thrown when trying to start grizzly server
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:276)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:110)
at br.com.loja.Servidor.inicializaServidor(Servidor.java:22)
at br.com.loja.Servidor.main(Servidor.java:13)
Caused by: java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.Net.bind(Unknown Source)
at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
at org.glassfish.grizzly.nio.transport.TCPNIOBindingHandler.bindToChannelAndAddress(TCPNIOBindingHandler.java:131)
at org.glassfish.grizzly.nio.transport.TCPNIOBindingHandler.bind(TCPNIOBindingHandler.java:87)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.bind(TCPNIOTransport.java:449)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.bind(TCPNIOTransport.java:429)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.bind(TCPNIOTransport.java:420)
at org.glassfish.grizzly.http.server.NetworkListener.start(NetworkListener.java:658)
at org.glassfish.grizzly.http.server.HttpServer.start(HttpServer.java:264)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:274)
... 3 more