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.
pedrohms
Responde sim. Acho q sua duvida seria como serializar o objeto para envia-lo via web service. certo ?
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?
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.
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.
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?
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.
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?
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
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] .