VRaptor + Restfulie [Resolvido]  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Chegou a necessidade de consumir os controllers que estão como restful no vraptor, se eu acesso a uri no navegador, me aparece o documento xml correto, agora se na hora em que vou consumir esse webservice esta dando esse erro:



This message was edited 4 times. Last update was at 07/01/2010 21:23:12


- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Como o cliente será uma aplicação mobile, o client restifulie foi descartado.

A minha pergunta agora seria, como já existe aplicações usando SOAP como webservice, tem como através de SOAP fazer chamadas REST?
Dessa forma eu utilizo o Restifulie no server-side.

- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
Alex Basto
JavaBaby
[Avatar]

Membro desde: 11/11/2009 09:56:06
Mensagens: 98
Offline

davisnog wrote:Como o cliente será uma aplicação mobile, o client restifulie foi descartado.

A minha pergunta agora seria, como já existe aplicações usando SOAP como webservice, tem como através de SOAP fazer chamadas REST?
Dessa forma eu utilizo o Restifulie no server-side.


Na sua pergunta eu não consigo entender a que conceitos você quer dizer sobre SOAP para REST, você quer empregar invocações para que especificação ? Na sua observação o Client Restifulie fora descarto "Implementação a que ?".
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

Não sei como você está gerando o webservice, porém pelo erro é quando você esquece de colocar um alias para o bean. No caso o erro não parece ser no webservice, mas sim no seu cliente que consome o xml.

Quando você declara suas classes java precisa apontar quais atributos serão convertidos em qual classe. No caso o xstream usa ou o nome completo da classe ou então você precisa definir o alias manual, seja via código ou annotation.
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Alex Basto seguinte, hoje eu gero os webservices com o restifulie, biblioteca disponibilizada pelo pessoal da caelum, junto com o vraptor, nesse caso os metodos de meus controllers são consumidos via webservice REST.

Mais, as aplicações mobile que temos hoje, consomem webservices no padrão SOAP, a minha pergunta era, seria possivel consumir os REST através de SOAP?

- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

garcia-jj, as minhas classes model quanto a minha classe cliente, nos dois casos CategoriaVeicular, estão com alias do xstream.
Mais como eu havia dito, pra mobile ficou inviavel utilizar o restifulie como client, no caso será utilizado somente no server.


This message was edited 1 time. Last update was at 14/12/2009 21:00:17


- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Aproveitando a oportunidade.

Hoje tenho minha classe model no projeto web, com as annotations do hibernate, por exemplo CategoriaVeicular.

No outro projeto mobile tem mesma classe, mais sem annotations, pois ela é utilizada para receber os dados do webservice.

Nesse caso eu tenho nos dois projetos com a mesma classe CategoriaVeicular, a diferença é que no projeto web eu tenho as dependências do hibernate e no mobile não.

Minha pergunta seria: Tem alguma sugestão para que eu possa gerar um jar das classes model e disponibilizar para as duas aplicações, nesse caso as alterações seriam todas feitas no projeto web, e dessa forma qualquer alteração necessária seria feita num unico projeto.

- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

Hmm, você pode nos mostrar como está seu cliente? Apenas a classe que consome.
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Codigo no client, essa é uma aplicação console que esta consumindo o webservice.



No servidor a diferença é que tem as annotations do hibernate.

This message was edited 1 time. Last update was at 15/12/2009 08:28:40


- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

davisnog wrote:Aproveitando a oportunidade.

Hoje tenho minha classe model no projeto web, com as annotations do hibernate, por exemplo CategoriaVeicular.

No outro projeto mobile tem mesma classe, mais sem annotations, pois ela é utilizada para receber os dados do webservice.

Nesse caso eu tenho nos dois projetos com a mesma classe CategoriaVeicular, a diferença é que no projeto web eu tenho as dependências do hibernate e no mobile não.

Minha pergunta seria: Tem alguma sugestão para que eu possa gerar um jar das classes model e disponibilizar para as duas aplicações, nesse caso as alterações seriam todas feitas no projeto web, e dessa forma qualquer alteração necessária seria feita num unico projeto.


Davi, você pode usar algum gerador que sempre que você altere a classe ele crie para você a classe do projeto mobile. Mas minha sugestão é fazer manual mesmo, pois essa coisa de classe persistente ser espelho de classe de transferencia de dados não me parece bom. Obvio que isso varia de projeto a projeto, mas não curto muito (minha opinião).

Penso assim porque nem sempre você tem as classes exatamente iguais. Uma coisa é a sua estrutura de tabelas e outra é o que você precisa trafegar e exibir para o cliente.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 5632
Offline

Então... mesmo definindo os Alias via anotações, vc precisa registrar as classes no XStream... tem algo como xstream.readAnnotations(CategoriaVeicular.class) ou coisa do tipo...

qto a pergunta se tem como consumir REST via SOAP, acho que não dá... o formato das msgs soap é bem diferente (tem cabeçalho, corpo e tal)

--
Caelum
www.caelum.com.br

garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

davisnog wrote:Codigo no client, essa é uma aplicação console que esta consumindo o webservice.
[...]
No servidor a diferença é que tem as annotations do hibernate.


Davi, me parece normal sua classe mesmo. Mande o envelope do XML para comparar?

Abraços

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2673
Localização: Porto Alegre
Offline

lucascs wrote:qto a pergunta se tem como consumir REST via SOAP, acho que não dá... o formato das msgs soap é bem diferente (tem cabeçalho, corpo e tal)


Não, não dá mesmo. Rest além de você possuir aqueles estados que o SOAP também tem, no rest você não possui um contrato formal, portanto seu XML é assim como você quiser, por exemplo:



Já no SOAP você tem contratos fortes entre o serviço e o consumidor. Todo SOAP possui um WSDL que define esse contrato e garante que todo mundo saiba como consumir esse webservice. O webservice possui um envelope com uma série de informações além do seu próprio XML de retorno.

http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
davisnog
JavaEvangelist

Membro desde: 21/05/2007 21:05:18
Mensagens: 437
Localização: Blumenau/SC
Offline

Bom a classe envelope se eu entedi é essa:


- DAVI NOGUEIRA -
Assim como um pai se compadece de seus filhos, assim o SENHOR se compadece daqueles que o temem. Salmos 103:13

@davisnog
[MSN]
Guilherme Silveira
Administrador

Membro desde: 14/08/2002 10:09:26
Mensagens: 1093
Localização: Sao Paulo
Offline

Bom dia Davi, Garcia,

Realmente a exception parece não estar usando o XStream com a configuração que voce citou. Mas como no cliente não poderá usar o restfulie por ser celular, deixamos de lado. Se aparecer o problema novamente, poste o código do cliente por aqui?

Sobre SOAP consumir REST, como as mensagens em REST geradas pelo serializador não está envelopada em soap por padrão, não funcionará.
Mas a questão da arquitetura REST não possuir um contrato formal é um pouco diferente. Você pode - e muitos dizem que deve - criar xsd's ou utilizar o schematron para fazer a validação de sua estrutura xml e REST não te proibe de faze-lo, basta adicionar o cabeçalho com link para seu schema:



Tem um post aqui sobre o assuntO: http://guilhermesilveira.wordpress.com/2009/12/08/hypermedia-making-it-easier-to-create-dynamic-contracts/

O REST também possui as informações (metadados) que o soap define em diversos momentos, mas utiliza cabeçalhos http (o protocolo em si) para passar parte dessas informações.

Na parte de criar uma classe anotada/não anotada para ser usada nos dois lugares, algumas pessoas vão recomendar não usar a mesma classe mesmo: se você disponibiliza a mesma classe para os dois lados, você aumenta o acoplamento entre os dois lados. Permitindo cada lado ter uma representação diferente (com os campos que interessa para cada um) diminui o acoplamento, mas isso só faz sentido se você for disponibilizar para outros clientes diferentes.


Abraço

-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team