Continuando a saga...
Eu havia me baseado na versão anterior do Web Service/Wsdl que me foi passado, pra implementar todas as estruturas internas no Ensemble (a saber, o BPEL e as "Business Operations", na linguagem deste).
Bem, na versão anterior, o wizard gerava todas as estruturas como classes, ou seja, se eu tivesse que atualizar uma estrutura "Pessoa", eu teria uma classe "Pessoa" com as propriedades "Nome", "Idade", etc... e o método receberia uma instância desta classe. Entretanto, agora o wizard gerou o método recebendo cada propriedade da estrutura como um parâmetro, ou seja, antes eu tinha:
atualizaPessoa(p as Pessoa)
E agora ele me gerou:
atualizaPessoa(nome as %String, idade as %Integer, ...)
E é CLARO que isso quebrou tudo o que eu havia feito. Para não ter que retrabalhar todas as outras classe, resolvi que seria melhor alterar na mão as classes que o wizard havia gerado, para se adaptarem aos objetos com que eu já trabalhava.
Então lá fui eu alterar a classe Web Client gerada:
(antes)
(depois)
Pensei que só isso já bastaria para funcionar. Compilei e mandei rodar. Não funcionou... Resumindo a luta, descobri que desse modo ele não estava escrevendo o Body do envelope SOAP conforme o Web Service esperava, contendo os namespaces corretamente declarados.
Procurando uma solução, me deparei com a propriedade "WriteSOAPBodyMethod" da classe %SOAP.WebBase, que é superclasse de %SOAP.WebClient. Essa propriedade permite definir um método que escreva de maneira personalizada o body de uma mensagem SOAP.
Usando essa propriedade, temos:
(escrevendo um elemento SOAP-Body personalizado)
Com isso, finalmente consegui preservar todo o código que eu havia feito anteriormente, e ainda acionava corretamente o Web Service. Entretanto, a saga não acaba aqui...
Continua...
segunda-feira, 3 de setembro de 2007
Web Services no Caché/Ensemble - A Saga - parte 2
Postado por
Andarilho
às
12:19
Marcadores: caché, ensemble, pepinos e tabajarices, soap, webservice, xml
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário