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.