O post de hoje foi uma contribuicao enviada pelo colega Samuel Carvalho (sam.goes@gmail.com). Um texto muito bom e bastante detalhado tratando de Webservices com tipos complexos, tanto os que recebem tipos complexos como parametro de entrada como os que retornam esse tipo de dado.Alguns WebServices recebem parametros do tipo complexo (ComplexType). Nesses casos, e necessario passar como parametro para a funcao Chamar Servico Web (Soap 1.2) o envelope Soap (estrutura XML) contendo os parametros de entrada do metodo a ser consumido e o cabecalho da requisicao. O retorno do WebService tambem sera um objeto do tipo complexo.O exemplo a seguir ira demonstrar, no Maker, como consumir e exibir o retorno de um WebService que recebe parametros do tipo complexo. Se voce esta tentando consumir um Webservice que recebe como parametro um tipo complexo, esta informacao e tratada na primeira parte do texto. No entanto se o seu Webservice apenas retorna um tipo complexo, va direto para a parte 2 do texto.Parte 1: Utilizando a ferramenta SoapUI para conhecer o WebserviceExiste uma ferramenta bem interessante chamada SoapUI, onde e possivel consumir qualquer tipo de WebService. A utilizacao dessa ferramenta de apoio faz-se necessaria para que possamos verificar se o WebService esta ativo, sendo possivel consumi-lo, verificando os metodos, portas, parametros e retorno do servico disponivel.Iremos utilizar o WebService de CEP, o qual possui parametros do tipo complexo.Endereco: http://www.autocep.com.br/webcep/wsEndereco.asmx?WSDLNo SoapUI ao clicarmos em File, New soapUI Project e possivel adicionar o endereco do WebService no campo Inicial WSDL/WADL, conforme a imagem a seguir:Com o projeto criado e possivel visualizar as portas utilizadas pelo WebService (wsEnderecoSoap12 e wsEnderecoSoap) e tambem os metodos de cada porta. No nosso exemplo, iremos consumir o metodo AutenticaCliente da porta wsEnderecoSoap, conforme imagem abaixo:Ao expandir o metodo e clicar na opcao Request1, e possivel verificar o envelope Soap, composto pelo cabecalho (Header) e pelo Body. No Body e possivel verificar os parametros do metodo: idCliente, chave, CEP. Segue a estrutura do XML abaixo:Para teste colocamos os valores fixos. No idCliente colocamos 1, na chave colocamos "teste" e no CEP "123", conforme imagem abaixo:Ao clicar no botao submit (seta verde abaixo da palavra Request 1) e possivel executar o metodo do WebService com os parametros informados na estrutura XML. O SoapUI ira apresentar uma outra janela com o resultado. No caso do nosso exemplo e possivel visualizar esse resultado na proxima imagem:O retorno desse WebService e um XML. Verifique o destaque na imagem acima com a mensagem de que o cliente nao existe, ou seja, os parametros informados nao sao validos e o metodo do WebService retornou essa mensagem dentro do XML.Ok. Agora que nos conhecemos o WebService que sera utilizado, atraves do SoapUI, podemos partir para as funcoes no Maker.Parte 2: Consumindo o WebService no MakerApenas consumindo o WebService pelo SoapUI ja fica claro tres dos quatro parametros que sao necessarios para a funcao Chamar Servico Web (SOAP 1.2):1. URL do WebService = http://www.autocep.com.br/webcep/wsEndereco.asmx?WSDL2. Porta = wsEnderecoSoap3. Nome do Metodo = AutenticaClienteSo falta o 4o parametro que refere-se ao envelope Soap que sera enviado. Basta copiar o conteudo da tag