iOS调用SOAP协议的WebServices接口

使用AFN请求webServices接口


SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。

或者更简单地说:SOAP 是用于访问网络服务的协议。详细了解SOAP:http://www.w3school.com.cn/soap/soap_intro.asp

第一:我们的问题是怎么请求ws接口数据,第二:请求到的数据如何解析

先说第一个问题

我们先写一个请求数据的类SOAPRequest,便于调用

+(NSString*)defautldefaultSoapMesage:(NSString*)methodName params:(NSDictionary *)dic

{

    NSError *parsError = nil;

    NSData *jsonDatas = [NSJSONSerialization dataWithJSONObject:dic

                                                        options:NSJSONWritingPrettyPrinted

                                                          error:&parsError];

    NSString *info =[[NSString alloc] initWithData:jsonDatas

                                            encoding:NSUTF8StringEncoding];

    NSString *soapMsg = [NSString stringWithFormat:

                         

                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"

                         

                         "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"

                         

                         "<soap:Body>\n"

                         

                         "<g:%@ xmlns:g=\"http://ws.chat.tianjian.com/\">\n"

                         

                         "<attr>%@</attr>\n"

                         

                         "</g:%@>"

                         

                         "</soap:Body>\n"

                         

                         "</soap:Envelope>\n"

                         

                         ,methodName,info,methodName];

    

    return soapMsg;

}


写一个类名字ChatRequestTool用来请求数据

+ (void)getBasicInfoWithParam:(NSDictionary *)param success:(void (^)(id))success failure:(void (^)(NSError *error))failure

{//获取个人信息

    NSString *soapMeg = [SOAPRequest defautldefaultSoapMesage:@"getBasicInfo" params:param];//此处调用方法defautldefaultSoapMesage,传入方法名和参数

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];

    [manager.requestSerializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

    [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) {

        return soapMeg;

    }];

    manager.securityPolicy.allowInvalidCertificates = YES;

    [manager POST:ChatURL_Service parameters:soapMeg success:^(AFHTTPRequestOperation *operation, id responseObject) {


        if (success) {

            success(responseObject);

        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        if (failure) {

            failure(error);

        }

    }];

}

第二个问题,请求下来的数据进行解析,此处使用Google开发的XML解析库

+(NSDictionary *)dictionaryFromeResponseString:(NSString *)resopse

{

    NSLog(@"resopse  %@",resopse);

    GDataXMLDocument *xmlDoc = [[GDataXMLDocument allocinitWithXMLString:resopse options:0 error:nil];

    

    GDataXMLElement *xmlEle = [xmlDoc rootElement];

    NSArray *array = [xmlEle children];

    NSLog(@"count : %d", [array count]);

    

    for (int i = 0; i < [array count]; i++) {

        GDataXMLElement *ele = [array objectAtIndex:i];

        GDataXMLNode *themeURLNode = [ele attributeForName:@"userInfo"];//字符串

        NSString *themeURL = themeURLNode.stringValue;

        NSLog(@"%@",themeURL);

        // 根据标签名判断

        if ([[ele nameisEqualToString:@"name"]) {

            // 读标签里面的属性

            NSLog(@"name --> %@", [[ele attributeForName:@"value"stringValue]);

        } else {

            // 直接读标签间的String

            NSLog(@"age --> %@", [ele stringValue]);

            NSError *error = nil;

            NSDictionary *string2dic = [NSJSONSerialization JSONObjectWithData: [[ele stringValuedataUsingEncoding:NSUTF8StringEncoding]

                                                                       optionsNSJSONReadingMutableContainers

                                                                         error: &error];

            return string2dic;

        }

    }

    return nil;

}

---------------------------------调用方法返回解析数据---------------------------------

NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:securityUserBaseInfoId,@"securityUserBaseInfoId",hspConfigBaseInfoId,@"hspConfigBaseInfoId",flagHspOrSecurity,@"flagHspOrSecurity",userName,@"userName",@"",@"deptId",@"",@"deptName",tenantId,@"tenantId", nil];

    DLog(@"%@",info);

    

    [ChatRequestTool getBasicInfoWithParam:info success:^(id responseObject) {

        NSString *response = [[NSString alloc] initWithData:(NSData *)responseObject encoding:NSUTF8StringEncoding];

        NSDictionary *infoDic = [SOAPRequest dictionaryFromeResponseString:response];

        //此处调用方法dictionaryFromeResponseString,解析数据

        NSLog(@"获得个人基本信息==%@",infoDic);

  

        }else{

            

        }

    } failure:^(NSError *error) {

        NSLog(@"error == %@", error);

    }];


方法的调用是从下往上看的哈害羞害羞


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值