iOS下WebService接口调用与解析-一、Soap对象的封装

本文介绍了一个用于简化SOAP请求创建过程的Objective-C类。该类通过封装请求体,避免了手动拼接SOAP请求时可能出现的错误。文章详细展示了SOAPMessage类的设计与实现。

封装Soap对象

Soap对象是对请求体的简单封装,免去重复而又容易出错的拼接工作。

首先是头文件:SOAPMessage.h

#import <Foundation/Foundation.h>

@interface SOAPMessage : NSObject

@property (nonatomic, strong) NSString *nameSpace;
@property (nonatomic, strong) NSString *methodName;
@property (nonatomic, strong) NSDictionary *params;

- (SOAPMessage *)initWithNameSpace:(NSString *)nameSpace withMethodName:(NSString *)method withParams:(NSDictionary *)params;

/**
 * 创建SOAP消息,内容格式就是网站上提示的请求报文的实体主体部分
 */
- (NSString *)getSoapMessage;

@end

头文件中,定义了三个属性,分别为:

  • nameSpace:命名空间
  • methodName:方法名
  • params:方法名对应的参数列表

一个初始化方法:
- (SOAPMessage )initWithNameSpace:(NSString )nameSpace withMethodName:(NSString )method withParams:(NSDictionary )params;
包含三个参数,对应定义的三个属性。
最后一个方法的作用是将封装后的SOAP类型的xml对象转换成NSString。

然后是实现:SOAPMessage.m

#import "SOAPMessage.h"

@interface SOAPMessage ()

- (NSString *) generateMethod;
- (NSString *) generateParams:(NSDictionary *)dict;

@end

@implementation SOAPMessage

- (SOAPMessage *)initWithNameSpace:(NSString *)nameSpace withMethodName:(NSString *)methodName withParams:(NSDictionary *)params {
    if(self =[super init]) {
        self.nameSpace = nameSpace;
        self.methodName = methodName;
        self.params = params;
    }

    return self;
}

- (NSString *)getSoapMessage {

    NSString *soapMsg = [NSString stringWithFormat:
                         @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                         "<soap12:Envelope "
                         "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
                         "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
                         "xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
                         "<soap12:Body>"
                         "%@"
                         //"<say xmlns=\"http://service.core.soft.com\">"
                         //"<name>%@</name>"
                         //"</say>"
                         //"<getSupportCity xmlns=\"http://WebXml.com.cn/\">"
                         //"<byProvinceName>%@</byProvinceName>"
                         //"</getSupportCity>"
                         "</soap12:Body>"
                         "</soap12:Envelope>", [self generateMethod]];

    return soapMsg;
}


- (NSString *) generateMethod {
    NSString *result = [[NSString alloc] initWithFormat:@"<%@ xmlns=\"%@\">%@</%@>",
                       [self methodName],
                       [self nameSpace],
                       [self generateParams:[self params]],
                       [self methodName]];
    return result;
}

- (NSString *) generateParams:(NSDictionary *)dic {
    NSMutableString *params = [NSMutableString string];
    for (id key in [dic allKeys]) {
        NSString *param = @"<%@>%@</%@>";

        NSString *p = [[NSString alloc]initWithFormat:param, key, [dic objectForKey:key], key];
        [params appendString:p];
    }
    return params;
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值