Será que alguém teria algum exemplo de como enviar uma lista de objetos como parâmetro para uma operação de um WS feito em .net utilizando a API Ksoap2?
Consultei vários fóruns e tutoriais e ainda não consegui… Estou começando a ficar com o pé atrás, pois quase todo mundo tem problemas para enviar objetos e listas de objetos como parâmetros (com essa api)
Olá Pedro! Dei uma olhada neste artigo, mas ele não responde minha dúvida. Mas de qualquer forma, vlw.
P
pedrohms
Responde sim. Acho q sua duvida seria como serializar o objeto para envia-lo via web service. certo ?
M
maranata
Não. Pelos testes que fiz e pelo que vi, p/ enviar uma LISTA de objetos (que é o que eu preciso) não basta que estes objetos estejam serializados, sacou?
P
pedrohms
Pela experiencia que tenho com ksoap2 nao tive problemas em enviar objetos serializados vi WS. Se você poder enviar a mensagem de erro ajudaria.
A
adrielcafe
Tenta com alguma implementaçao do JSON, como o Jackson ou GSON.
A ideia é simples: serializar um objeto, convertendo para String, para transportá-lo mais facilmente e do outro lado é só desserializá-lo, convertendo novamente no objeto original.
Exemplo com Jackson:
ObjectMappermapper=newObjectMapper();Pessoapessoa=newPessoa();// SerializandoStrings=mapper.writeValueAsString(pessoa);// Transporta a String para o WS// DesserializandoPessoapessoa=mapper.readValue(s,Pessoa.class);
Já passei um array de objetos (Pessoa[]) e funcionou perfeitamente. Para implementar com uma List o processo é praticamente o mesmo.
M
maranata
adrielcafe:
Tenta com alguma implementaçao do JSON, como o Jackson ou GSON.
A ideia é simples: serializar um objeto, convertendo para String, para transportá-lo mais facilmente e do outro lado é só desserializá-lo, convertendo novamente no objeto original.
Exemplo com Jackson:
ObjectMappermapper=newObjectMapper();Pessoapessoa=newPessoa();// SerializandoStrings=mapper.writeValueAsString(pessoa);// Transporta a String para o WS// DesserializandoPessoapessoa=mapper.readValue(s,Pessoa.class);
Já passei um array de objetos (Pessoa[]) e funcionou perfeitamente. Para implementar com uma List o processo é praticamente o mesmo.
Olá Adriel,
Usando uma implementação do JSON seria necessário alguma mudança no WebService?
A
adrielcafe
maranata:
Usando uma implementação do JSON seria necessário alguma mudança no WebService?
Você apenas precisa adicionar o Jar (no cliente e no WS) da implementação JSON. Não precisa alterar nada no WS, você apenas vai tá passando uma String de uma lado para o outro, serializando e desserializando. É tudo muito transparente.
M
maranata
adrielcafe:
maranata:
Usando uma implementação do JSON seria necessário alguma mudança no WebService?
Você apenas precisa adicionar o Jar (no cliente e no WS) da implementação JSON. Não precisa alterar nada no WS, você apenas vai tá passando uma String de uma lado para o outro, serializando e desserializando. É tudo muito transparente.
O problema é que o Web Service é feito em .net
Teria alguma outra sugestão?
A
adrielcafe
Transportar strings não seria o problema certo? O problema seria qual implementação JSON usar, já que estamos falando e Java e .Net. No site do JSON, lá embaixo, tem uma lista de implementações pra C#, Visual Basic e diversas outras linguagens.
No Android você usaria uma API e no WS outra API que possuem o mesmo padrão de serialização: JSON. Dessa forma dá certo
A
adrielcafe
Acabei de fazer um teste transportando uma List<Categoria>, uma lista com POJOs, usando o Jackson e funcionou perfeito :)
Fiz assim:
// SerializandoObjectMappermapper=newObjectMapper();Categoriac1=newCategoria();Categoriac2=newCategoria();Categoriac3=newCategoria();// Populando os POJOsList<Categoria>lista=newArrayList<Categoria>();lista.add(c1);lista.add(c2);lista.add(c3);Strings=mapper.writeValueAsString(lista);// DesserializandoList<Categoria>cats=mapper.readValue(s,newTypeReference<List><Categoria>>(){});
A chave para desserializar com sucesso a List<Categoria> foi usar [color=blue]new TypeReference< List<Categoria> >() {}[/color] .