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.
Antes de mais nada, explique… porque você precisa fazer com servlets?
[]´s
H
hich
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.
M
marcobiscaro2112
hich:
Depois vou passar as informções do usuario via xml…
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?
H
hich
Sou obrigado a fazer a chamada através do método HTTP PUT(ou POST), com mime type do conteúdo como text/xml.
XML Request Autorização:
PUT http…
123
127.0.0.5
e receber um XML Response Autorização:
123
127.0.0.5
Autorizado
A
Alexandre_Saudate
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” ?
[]´s
H
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.
A
Alexandre_Saudate
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.
[]´s
H
hich
Entendi…, eu estava procurando libs em vez de frameworks…
vou tentar aqui qualquer coisa falo com você.
Brigadao
H
hich
Eu estava pensando em usar um framework restlet. www.restlet.org/ tu conhece? nao sei se é bom
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.
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
orogerio
Olá!
O caminho mais simples é vc usar a api JAXB(usar os marshaller e unmarshaller) para tratar o xml recebido.
Depois de tratado e só vc criar um webservice (rest ou jax-ws), que recebe e envia uma string(no formato xml).
Até mais
A
alexmacedo
Olá hich,
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:
packageclient;importjavax.ws.rs.core.MediaType;importbr.com.k19.models.Banda;importcom.sun.jersey.api.client.Client;importcom.sun.jersey.api.client.ClientResponse;importcom.sun.jersey.api.client.WebResource;importcom.sun.jersey.api.client.config.ClientConfig;publicclassExemploDeCliente{publicstaticvoidmain(String[]args){Clientclient=Client.create();client.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS,true);WebResourceresource=client.resource("http://localhost:8080/restful-exemplo/rest/bandas");// Exemplo GET com stringStringresponse=resource.path("1").get(String.class);System.out.println("Response do GET: "+response);// Exemplo GET com BandaClientResponseclientResponse=resource.path("1").get(ClientResponse.class);// vc "converte" o xml da resposta em um objeto usando getEntityBandab=clientResponse.getEntity(Banda.class);System.out.println("Nome da banda com id=1: "+b.getNome());// Exemplo POST com stringStringcontent="<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 stringcontent="<banda><nome>Teste depois do PUT</nome><anoDeFormacao>9999</anoDeFormacao></banda>";// PUT http://localhost:8080/restful-exemplo/rest/bandas/3response=resource.path("3").type(MediaType.TEXT_XML).put(String.class,content);System.out.println("Response do PUT: "+response);// Exemplo PUT com classe BandaBandabanda=newBanda();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.
L
lazaru
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?
@DELETE
@Produces({MediaType.TEXT_XML,MediaType.APPLICATION_XML})
public void delete (T toDelete) {
deleteFromDatabase(toDelete);
}
Postei um conteúdo no meu blog, há um tempo atrás, mostrando como fazer isso (com Jersey e Spring). Dê uma olhada lá, talvez ajude.
[]´s
A
andredecotia
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.
Muito bom este tutorial. Aliás, a escola K19 é muito boa, já fiz curso lá e recomendo.
L
lazaru
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?
A
Alexandre_Saudate
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ê.
[]´s
L
lazaru
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:
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:HTTPmethodDELETEdoesn'tsupportoutput]
E
eugabgomes
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
E
eugabgomes
Descobri o erro!
eu estava usando a anotação @FormParam no parâmetro que é o XmlRootElement do meu método.
Removi e funcionou direitinho!