Estrategia para interoperabilidade entre versoes para um web service

Fala Galera,

Sem entrar em detalhes muito tecnicos, gostaria de saber que estrategia voces estao usando para fazer interoperabilidade entre versoes de um mesmo webservice. Por exemplo: Tenho na versao 1.0 do meu software um webservice que prove a comunicacao entre meu cliente 1.0 e meu servidor 1.0. Para a versao 2.0 do software, eu vou adicionar um novo parametro ao metodo e eu gostaria que meu cliente 1.0 fosse capaz de acessar o meu servidor 2.0 e vice versa.

Opcoes pensadas:

  1. Criar um novo endpoint a cada versao - assim se nao consigo acessar a versao mais nova (2.0) eu tento acessar a versao mais velha (1.0). Questao: Isso nao seria problematico em relacao a redes - esperar um time out para um endpoint pode demorar um tempo excessivo.
  2. Criar um novo namespace dentro de um mesmo endpoint, assim nao tem time-out. Assim teriamos um novo namespace para cada versao no mesmo endpoint. Isso me parece possivel mas nao tenho certeza - estou usando JEE 5.
  3. (Nojento) Usar um servico que passa um Object[]<String key,String value> e retorna um Object[]<String key,String value> - passar um atributo versao, assim podemos saber que versao estamos usando. Isso me parece nojento, procedural e trabalhoso - tenho que reconstruir a cada request os objetos outra vez para utiliza-los.

E entao, o que voces tem feito quanto a este problema ?

Me perdoem quanto aos acentos - nao estou no Brasil e aqui nao tem teclado com acentos.
Abracos,
Alan

Tem que ser SOAP?

REST com versão em um cabeçalho HTTP resolve isso mole.

Fala philip,

O problema eh que tenho que usar JEE 5 (SAP NetWeaver - :frowning: ) - nao tem como usar um framework externo REST and a gente nao tempo suficiente para desenvolver algo interno. Assim acho que a resposta eh sim, tem que ser SOAP.

Mas a sua solucao do cabecalho nao seria algo parecido com a terceira solucao proposta por mim - passar um Object[]<String,String>, com um atributo versao, como parametro do metodo web service ? Como voce faria em SOAP ?

Valeu !
Alan

Faz tanto tempo que eu não faço nad aem SOAP que não sei. Deve ter uma especificação para isso, não?

Em rest pode também usar a versao na url, o que seria parecido com a sua opcao dois. A diferenca é a maneira SOAP de se fazer a coisa, que é complexa até pra coisas simples.

So para complementar encontrei a seguinte pagina (http://docs.codehaus.org/display/XFIRE/Versioning) no blog do XFire falando sobre isso. Acho que eh a unica fonte da internet falando sobre esse problema.