Usuário com melhor resposta
Web service retorna Lista vazia

Pergunta
-
Pessoal, estou consumindo um serviço no C# porém estou com um problema.
Todos os métodos que retornam uma lista, estão retornado essa lista vazia. utilizei a ferramenta SOA UI pra verificar se o problema é no serviço, mas não. No SOAP UI os dados retornam normalmente.
Verifiquei que na classe Reference.cs, nos métodos "response" ex. encontrarListaResponse(), falta uma notation que é comum nos métodos que não retornam lista (Form=System.Xml.Schema.XmlSchemaForm.Unqualified)). Adicionei na mão, e o método passou a retornar valor.
Alguem sabe se preciso fazer alguma configuração na hora de importar a WSDL para que essa informação seja inserida de forma automática? Pois esse problema, ocorreu após uma atualização no serviço.
Respostas
-
Pessoal, consegui identificar o problema. Caso alguém passe pelo mesmo, segue a solução.
Identifiquei uma notation nas classes modelo do java (xmlRootSerialization). Acredito q pelo fato de ter havido uma atualização no SDK do Java ou no Jboss(Ambos foram atualizados). Nessas notations passei a informar o parametro (Name) além de ter que herdar a classe(Serializable) ficando o código da seguinte forma.(Sei que o problema é em Java mas pode ser que alguém passe pela mesma situação).
@XmlRootElement(name="NomeClasse") public class NomeClasse extends Serializable
Código que não funcionava:
@XmlRootElement() public class NomeClasse
Fazendo as alterações conforme dito acima. A WSDL passou a ser gerada de acordo com o que era esperado pelo cliente(.net).
Agradeço mais uma vez, o Renato pela ajuda!
- Editado joao.p.aquino sexta-feira, 13 de março de 2015 13:06
- Marcado como Resposta joao.p.aquino sexta-feira, 13 de março de 2015 13:06
Todas as Respostas
-
Acho que o ideal seria vc recriar a referência ao serviço na aplicação que consome o mesmo. De qualquer forma, o problema que vc reportou é bem estranho.
Temos Web Services aqui no trabalho que vivem sendo atualizados, o que não obriga a mudanças nas referências de projetos que dependem dos mesmos.
Espero ter ajudado.
Abs
-
Renato, muito obrigado pela resposta!
Mas o problema não está no cliente.
Identifiquei que na WSDL gerada pelo serviço, algumas informações estão diferentes
este trecho é a estrutura que antes funcionava.
<xs:complexType name="metodoWS"> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="nomeDo retorno" type="tns:tipoDoRetorno"/> </xs:sequence> </xs:complexType>
Já este trecho é a forma que esta sendo gerado o wsdl atualmente e que não funciona.
<xs:complextype name="metodoWS"> <xs:sequence> <xs:element maxoccurs="unbounded" minoccurs="0" ref="tns:tipoDoRetorno"> </xs:element> </xs:sequence> </xs:complextype>
Note que no primeiro exemplo, a WSDL gera 2 parametros (name e type) e no segundo, apenas um(ref).
Desta forma, o problema é gerado pelo serviço e não pelo cliente... como o serviço é em Java. não sei se conseguirei ajuda aqui. rs.
Se me der alguma luz serei muito grato!!
Mas de qualquer forma, muito obrigado pela resposta!
- Editado joao.p.aquino sexta-feira, 6 de março de 2015 04:48
-
João,
Aí complicou mesmo.
Pelo fato do serviço estar em Java, vc não tem controle sobre como ele gera o WSDL. Vc não consegue conversar com o pessoal responsável pelo mesmo, a fim de checar este problema?
Tente mostrar que alguma mudança afetou o WSDL e que está inviabilizando o acesso em .NET. Embora o padrão SOAP tenha por objetivo simplificar a comunicação entre diferentes plataformas, já vi problemas assim acontecerem na integração .NET e Java.
- Sugerido como Resposta Renato GroffeMVP segunda-feira, 9 de março de 2015 13:40
-
Pessoal, consegui identificar o problema. Caso alguém passe pelo mesmo, segue a solução.
Identifiquei uma notation nas classes modelo do java (xmlRootSerialization). Acredito q pelo fato de ter havido uma atualização no SDK do Java ou no Jboss(Ambos foram atualizados). Nessas notations passei a informar o parametro (Name) além de ter que herdar a classe(Serializable) ficando o código da seguinte forma.(Sei que o problema é em Java mas pode ser que alguém passe pela mesma situação).
@XmlRootElement(name="NomeClasse") public class NomeClasse extends Serializable
Código que não funcionava:
@XmlRootElement() public class NomeClasse
Fazendo as alterações conforme dito acima. A WSDL passou a ser gerada de acordo com o que era esperado pelo cliente(.net).
Agradeço mais uma vez, o Renato pela ajuda!
- Editado joao.p.aquino sexta-feira, 13 de março de 2015 13:06
- Marcado como Resposta joao.p.aquino sexta-feira, 13 de março de 2015 13:06