Soap - exmo/equizmo-ios GitHub Wiki
Onde foi utilizado?
Foi criada a classe SoapConnection.h para simplificar a criação do envelope para o envio e recebimento de webservices; Nos models User.m e Category.m utilizamos este tipo de serviço.
Como utilizar?
Vamos utilizar a classe User como referência para as explicações.
Para facilitar as criação de requisições SOAP criamos uma classe SoapConnection, que abstrai a criação do envelope soap e retorna o xml de retorno do servidor.
O primeiro passo é criar uma instancia de SoapConnection e configura-la. Vamos executar a operação de Login, que enviará como parâmetros o nome, email e coordenadas.
Primeiro vamos criar o dicionário de parâmetros:
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:name forKey:@"name"];
[parameters setObject:email forKey:@"email"];
[parameters setObject:[NSNumber numberWithDouble:location.coordinate.latitude] forKey:@"latitude"];
[parameters setObject:[NSNumber numberWithDouble:location.coordinate.longitude] forKey:@"longitude"];
Agora vamos criar a instancia de SoapConnection passando os parâmetros do webservice:
SoapConnection *soap = [[SoapConnection alloc]initWithSoapAddress:SOAP_ADDRESS
targetNamespace:WSDL_TARGET_NAMESPACE
operationName:OPERATION_LOGIN
parameters:parameters headers:nil];
Com o SoapConnection configurado vamos executar a chamada:
[soap loadServiceWithCallbak:@selector(didLoginWithXML:) forInstance:self andFailureCallback:@selector(didLoginWithError:)];
Esta chamada recebeu um callback que é o método que queremos que trate o XML em caso de sucesso no login, e também passamos o failureCallback em caso de falha. A instancia que fará a execução destes métodos foi definida por self(Rankin).
O retorno do login é um XML muito pequeno com apenas um campo, por isso não foi utilizado nenhum mecanismo de parseamento do mesmo, apenas uma busca simples de Strings para extrair a pontuação do usuário logado.
Para ver um exemplo um pouco mais complexo de parseamento de XML vejam a classe Category.h. Esta classe implementa o protocolo NSXMLParserDelegate.
O tratamento de xml deve ser analisado caso-a-caso, mostramos como tratar com os recursos nativos. Existem algumas bibliotecas que auxiliam porém é preciso analizar a necessidade para não adicionar pontos de falha ao projeto.