Comecei a mexer com web services há algumas semanas.
Primeiro descobri que não é possível usar tipos de dados específicos, como um HashMap.
Como eu precisava de um mapa, eu resolvi implementar um na unha mesmo, só com os métodos principais.
Só que aí eu descobri que também não vou poder usar esse mapa que implementei, por que ele tem, por exemplo, o método getValue(int key) que, segundo o que descobri, não pode ser utilizado pelos clientes do web service. Resumindo, só se pode usar métodos simples, como get e set. Certo?
Então, o que eu quero saber é se isto é verdade mesmo.
Não existe nenhum jeito de fazer com que isso seja possível?
O que exatamente impede que isso seja possível? Existe alguma pesquisa sobre web services que possivelvente fará com que isto seja possível?
Se estiver implementando em Java seu WS, você tem a opção de implementar normalmente com as classes Java com retorno de objetos Java e usar o XFire que faz a conversão pra SOAP (Caso seja WS-* SOAP) ou pode fazer usando WS REST (eu prefiro) que usa HTTP como protocolo de comunicação e devolcer um XML, JSon, etc.
Da uma olhada no frameworks XFire, Axis 2 e em WebServices Restful.
[quote=rodrigoK]Se estiver implementando em Java seu WS, você tem a opção de implementar normalmente com as classes Java com retorno de objetos Java e usar o XFire que faz a conversão pra SOAP (Caso seja WS-* SOAP) ou pode fazer usando WS REST (eu prefiro) que usa HTTP como protocolo de comunicação e devolcer um XML, JSon, etc.
Da uma olhada no frameworks XFire, Axis 2 e em WebServices Restful.
Abraços,[/quote]
Valeu. Eu vou dar uma pesquisada nisso.
Mas talvez eu não tenha sido claro na pergunta.
O que eu quero é escrever um método complexo (como o getValue de um mapa) e permitir que o cliente do meu web service consuma isso.
Por exemplo:
Escrevo uma classe CustomMap.
Escrevo um método web que retorna um objeto CustomMap preenchido com valores de interesse do meu cliente. Obviamente o cliente pode executar este método.
Mas não é isso que eu quero. Eu quero que o cliente possa executar um método complexo da classe CustomMap.
Ele já tem um CustomMap preenchido, e vai executar o getValue(int key) neste objeto. Não será uma chamada remota. Ele vai chamar esse método no objeto CustomMap que já foi retornado pela chamada remota.
Depois de alguma pesquisa eu estou achando que faz sentido que isso não seja possível.
Porque digamos que eu implemente meu ws em java e o meu cliente seja desenvolvido em php. Como é que eu vou enviar o método getValue (int key) escrito em java e ele vai executar isso em php?
É, não deve dar mesmo.