Oi galera , preciso fazer um integração com o webservice passando um xml e receber um xml de resposta… no Servlet.
Alguem pode me ajudar a faze isso?
Fazer um @PUT usar HTTPCliente por favor se alguem souber fazer me ajude da algum exemplo de codigo que eu me viro !
Brigado.
Pq eu vou receber umas informações de um usuario vindo de um jsp pode ser via outra classe nao tem problema.
Depois vou passar as informções do usuario via xml e receber via xml as informações completa dele e verificar o status dele que vai estar dentro do xml.
[quote=hich]Depois vou passar as informções do usuario via xml…
[/quote]
Por que não passa essas informações através de um POST ou um GET comum? Algum motivo especial para ter que usar XML?
Olha só, o que você quer tem toda a cara de um serviço REST. Porque você não dá uma procurada em como fazer um desses, ao invés de querer fazer “na unha” ?
É exatamente isso o problema é que eu não estou encontrando um lugar que me explique como fazer um serviço Rest…
eu procurei e achei em varios lugares…, mais nada que eu conseguisse aplicar aqui.
Achei esse http://www.k19.com.br/artigos/criando-um-webservice-restful-em-java/ que foi o melhor…
Mais nao serve para mim… pq nao ensina como vou mandar o xml e como vou receber esse é a minha grande dificuldade…
Procure por frameworks que façam. Recentemente (ou nem tanto, rs) saiu uma especificação para isso, chamada JAX-RS. Você pode usar essa palavra chave em suas buscas. Os principais frameworks, IMHO, pra isso, são o RESTEasy e o Restfulie.
Dentro do doPut.
Tentei varias vezes usar um HttpClient mais nao consigo…
PutMethod put = new PutMethod(“http://isp-authenticator.dev.globoi.com:8280/autorizacao”); tentei usa esse PutMethod (q imagino que sirva para fazer o que eu quero… mais também da erro.)
Usando uma lib desse framework Retlet tentei usar esse client:
Client c = new Client(“http://autenticacao.globo.com/ws/rest/autorizacao”); tentei isso mais também não deu.
E por mais que consiga…, nao sei como irei jogar o xml para la e receber o xml. @Path("{id}") @PUT @Consumes(“text/xml”) @Produces(“text/plain”)
public String atualizaBanda(Banda banda, @PathParam(“id”) int id) {
Banda atual = bandasMap.get(id);
atual.setNome(banda.getNome());
atual.setAnoDeFormacao(banda.getAnoDeFormacao());
return banda.getNome() + " atualizada.";
}
tipo nesse código que ta lá no K19 nao sei onde ele passa XML (se passa) e onde e ele recebe…, ai pelo visto ele está recebendo um id, mais eu precisava mandar e receber um objeto Usuario.
Me diz ± onde eu jogo esse endereço http://iso-… e onde eu mando o xml pra esse webservice e onde recebo o xml.
olhei todos os sites que vc me mostrou e tudo fiz…, só q nada me diz como conectar ao http mandar o xml e receber…, fazer o xml nao é o problema.
Se puder me dar um exemplo ficarei mt grato…, nao to conseguindo nem utilizar o httpclient
Abraço.
O indicado já que você está utilizando o Jersey, é utilizar o próprio jersey-client para construir a aplicação cliente.
Se você baixar o código do artigo da K19, pode testar este cliente que eu fiz rapidinho, testado e aprovado na minha máquina
Tentei colocar alguns comentários para ver se fica mais claro:
package client;
import javax.ws.rs.core.MediaType;
import br.com.k19.models.Banda;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
public class ExemploDeCliente {
public static void main(String[] args) {
Client client = Client.create();
client.getProperties()
.put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
WebResource resource = client
.resource("http://localhost:8080/restful-exemplo/rest/bandas");
// Exemplo GET com string
String response = resource.path("1").get(String.class);
System.out.println("Response do GET: " + response);
// Exemplo GET com Banda
ClientResponse clientResponse = resource.path("1").get(
ClientResponse.class);
// vc "converte" o xml da resposta em um objeto usando getEntity
Banda b = clientResponse.getEntity(Banda.class);
System.out.println("Nome da banda com id=1: " + b.getNome());
// Exemplo POST com string
String content = "<banda><nome>Teste</nome><anoDeFormacao>2010</anoDeFormacao></banda>";
response = resource.type(MediaType.TEXT_XML)
.post(String.class, content);
System.out.println("Response do POST: " + response);
// Exemplo PUT com string
content = "<banda><nome>Teste depois do PUT</nome><anoDeFormacao>9999</anoDeFormacao></banda>";
// PUT http://localhost:8080/restful-exemplo/rest/bandas/3
response = resource.path("3").type(MediaType.TEXT_XML)
.put(String.class, content);
System.out.println("Response do PUT: " + response);
// Exemplo PUT com classe Banda
Banda banda = new Banda();
banda.setAnoDeFormacao(8888);
banda.setNome("Teste alterado de novo");
response = resource.path("3").type(MediaType.TEXT_XML)
.put(String.class, banda);
System.out.println("Response do PUT de novo: " + response);
}
}
Ah, é claro que que além de baixar o código lá da K19 pro exemplo acima funcionar, você também deve adicionar o jar do jersey-client ao projeto.
alexmacedo, parabéns pelo Artigo na k19.
bom gostaria de saber como consumir o metodo @DELETE, andei dando uma olhada e vi que alguns foruns sugerem a reescrida do metodo @POST com um cabeçalho diferente tipo “delete/{codigo}”, o que vc me diz?
fazendo assim:
@Path("{id}")
@DELETE
@Produces("text/plain")
public String removeBanda(@PathParam("id") int id) {
bandasMap.remove(id); return "Banda removida.";
}
//é executando assim:
resource.path("1").delete();
Funciona blz, só que gostaria que que fosse passado um objeto banda no lugar do codigo da banda, assim como foi feito no atualiza.
[quote=hich]É exatamente isso o problema é que eu não estou encontrando um lugar que me explique como fazer um serviço Rest…
eu procurei e achei em varios lugares…, mais nada que eu conseguisse aplicar aqui.
Achei esse http://www.k19.com.br/artigos/criando-um-webservice-restful-em-java/ que foi o melhor…
Mais nao serve para mim… pq nao ensina como vou mandar o xml e como vou receber esse é a minha grande dificuldade…
Abraço.[/quote]
Muito bom este tutorial. Aliás, a escola K19 é muito boa, já fiz curso lá e recomendo.
obrigado Alexandre, foi justamente de seu artigo que saiu a inspiração, mas acho que meu problema e em consumir este metodo @DELETE, como vc consome o seu metodo DELETE do seu artigo?
Só mudar o método HTTP… assim como você tem PUT, POST, GET… delete!
Do jeito como você estava fazendo, com o jersey (resource.path().delete() ) tava certinho… deu algum erro, ou algo assim?
Outra coisa, pode ser que tenha a ver… o Jersey reclama quando tem algum método exposto que é void (ele não chega a dar erro, mas dá uma chiada). De repente, pode ser uma luz aí pra você.
usando este codigo não gera erro algum, só que gostaria que ele apaga-se o objeto que passei como parametro, assim eu usaria um codigo parecido com este no server:
@DELETE
@Produces({MediaType.TEXT_XML,MediaType.APPLICATION_XML})
public void delete (T toDelete) {
deleteFromDatabase(toDelete);
}
onde toDelete seria o objeto a ser deletado, estava tentando usar desta forma para consumir usando o “jersey-client-1.5.jar”:
resource.path().delete(String.class, toDelete);
//gera um codigo assim:
[java.net.ProtocolException: HTTP method DELETE doesn't support output]
Bom dia a todos
Estou montando um webservice Resftul, utilizando text/xml, e estou me baseando no artigo do k19 para montar o server e estou utilizando o modelo do client que foi postado aqui no forum.
No meu server está mapeada uma função que recebe via POST meu XMLRootElement e faz as devidas operações. meu client está enviando via POST a string do XML que representa o @XmlRootElement para o server, mas o servidor estoura este erro quando eu tento dar um get em algum parametro dessa classe:
com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
GRAVE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
Preciso de-serializar essa String XML no server para conseguir acessar esses campos? no artigo nao mosta essa de-serialização