如何调用接口用IOS调用WebService

15:37 提问
IOS手机端如何调用JavaCXF编写的WebService接口
tomcat发布了webservice,Java版本的,请大神解答IOS端如何调用
其他相关推荐IOS 调用WebService(同步和异步) - Elliott - 博客园
随笔 - 34, 文章 - 0, 评论 - 25, 引用 - 0
因为公司的服务全都是webservice,每次总要花费大量时间在调试服务上面,干脆就写了一个解析wsdl的项目,希望将来能用上吧。还未经过烘焙,有问题,还请高手点播点播。
下面,我拿天气服务的wsdl作为例子吧。
服务的WSDL地址:
WSDL包含以下节点
definitions 根节点
根节点下面有以下节点:
types 数据类型定义。方法的参数名都包含在里面。
message 消息数据结构。
portType 描述服务和服务的方法。
binding 描述Web Service的通信协议。
service 描述Web Service 的访问点的集合。
下面对来一步一步解析如何根据wsdl 生成SOAP 消息体。
1.添加一个类扩展,如下图DDXMLElement+WSDL.h和DDXMLElement+WSDL.m
头文件中,暴露以下方法
2.SoapUtility 文件是用来封装soap消息的。SoapUtility调用DDXMLElement+WSDL
在SoapUtility头文件中,暴露以下方法
3.服务调用,上面,都把Soap消息给准备好了。那么最后一步就是服务的调用了。这里分两种调用方式:同步和异步。
4.使用方法,下面是天气服务的调用例子
//参数列表
NSDictionary *dic=@{@"theCityName": cityname};
NSString *methodName=@"getWeatherbyCityName";
//封装soap信封
SoapUtility *soaputility=[[SoapUtility alloc] initFromFile:@"WeatherWebService"];
NSString *postData=[soaputility BuildSoapwithMethodName:@"getWeatherbyCityName" withParas:dic];
//初始化服务
SoapService *soaprequest=[[SoapService alloc] init];
soaprequest.PostUrl=@".cn/WebServices/WeatherWebService.asmx";
soaprequest.SoapAction=[soaputility GetSoapActionByMethodName:methodName SoapType:SOAP];
if (isSync) {
//同步方法
ResponseData *result= [soaprequest PostSync:postData];
[self.result setText:result.Content];
//异步请求
[soaprequest PostAsync:postData Success:^(NSString *response) {
[self.result setText:response];
} falure:^(NSError *response) {
[self.result setText:response.description];
5.代码实现
欢迎大家给意见。在一次项目开发过程中,用到IOS调用WebService接口,所以抽个空把这方面的内容给大家整理出来,分享给大家。
方法一:使用WSDL2ObjC工具,将接口转成OC类。
1.在浏览器中输入webService接口地址(Safari不可用,我用的是Firefox),如:http://xxx.xxx.asmx, 地址后面添加上.wsdl成http://xxx.xxx.asmx.wsdl打开。
2.将页面另存为wsdl文件,保存的时候后缀加上.wsdl,保存成如xxxxService.asmx.xml.wsdl。
3.使用WSDL2ObjC工具将wsdl文件转成OC类。
4.将生成的OC类的全部文件导入到项目中。然后就可以调用了。现在没有写Demo,我就贴一部分调用代码,以后有机会传个Demo上来。
- (NSString *)skHkshListOfpagenow2:(NSInteger)aPagenow pagesize:(NSInteger)aPagesize {
& MURPXzshServiceSoapBinding *binding = [[MURPXzshServiceSoapBinding alloc]initWithAddress:[NSString stringWithFormat:@&%@%@&, self.jjjj, XZSH_SERVICE]];//接口地址
& binding.logXMLInOut = YES;//可以直接copy
& MURPXzshService_HkshList *parm = [[MURPXzshService_HkshList alloc] init];//接口中方法初始化
& parm.xxxx = [umcid stringValue];//接口中方法传参数
& parm.pagenow = [NSNumber numberWithInteger:aPagenow];//接口中方法传参数
& parm.pagesize = [NSNumber numberWithInteger:aPagesize];//接口中方法传参数
& MURPXzshServiceSoapBindingResponse *resp = [binding HkshListUsingParameters:parm];//调用方法
& //下面是返回值
& for (id mine in resp.bodyParts) {
&&& if ([mine isKindOfClass:[MURPXzshService_HkshListResponse class]]) {
&&&&& NSString *resultStr = [mine HkshListResult];
&&&&& return resultS
&注意:上面我的webService名字是MURPXzshService,Soap是MURPXzshServiceSoapBinding,调用的方法是HkshList。
方法二:直接通过网络请求调用,解析XML的方法。
不说了,先上代码:
- (void)viewDidAppear:(BOOL)animated {
& [super viewDidAppear:animated];
& //假如在这开始请求
& NSString *webServiceBodyStr = [NSString stringWithFormat:
&&&&&&&&&&&&&&&&& @&&Jsjy_yjy xmlns=\&/murpwebservice/\&&&
&&&&&&&&&&&&&&&&& &&xxx&34192&/xxx&&
&&&&&&&&&&&&&&&&& &&pagenow&1&/pagenow&&
&&&&&&&&&&&&&&&&& &&pagesize&20&/pagesize&&
&&&&&&&&&&&&&&&&& &&/Jsjy_yjy&&];//这里是参数
& NSString *webServiceStr = [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&
&&&&&&&&&&&&&&& &%@\n&
&&&&&&&&&&&&&&& &&/soap:Body&\n&
&&&&&&&&&&&&&&& &&/soap:Envelope&&,
&&&&&&&&&&&&&&& webServiceBodyStr];//webService头
& NSString *SOAPActionStr = [NSString stringWithFormat:@&/murpwebservice/%@&, @&Jsjy_yjy&];//SOAPAction
& NSURL *url = [NSURL URLWithString:@&http://xxxx/key/MurpjsjyService.asmx&];
& NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
& NSString *msgLength = [NSString stringWithFormat:@&%ld&, webServiceStr.length];
& [theRequest addValue:@&text/ charset=utf-8& forHTTPHeaderField:@&Content-type&];
& [theRequest addValue:SOAPActionStr forHTTPHeaderField:@&SOAPAction&];
& [theRequest addValue:msgLength forHTTPHeaderField:@&Content-Length&];
& [theRequest setHTTPMethod:@&POST&];
& [theRequest setHTTPBody:[webServiceStr dataUsingEncoding:NSUTF8StringEncoding]];
& NSURLConnection *theConn = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
& if (theConn) {
&&& NSLog(@&8888哈哈哈笑&);
&&& NSLog(@&5555你给我哭&);
&//接收到数据的代理
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
& NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
& NSLog(@&%@&, str);//得到想要的XML字符串然后解析
& //系统自带的
& NSXMLParser *par = [[NSXMLParser alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding]];
& [par setDelegate:self];//设置NSXMLParser对象的解析方法代理
& [par parse];//调用代理解析NSXMLParser对象,看解析是否成功
#pragma mark xmlparser
//step 1 :准备解析
- (void)parserDidStartDocument:(NSXMLParser *)parser{
//step 2:准备解析节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
& NSLog(@&%@&, NSStringFromSelector(_cmd) );
//step 3:获取首尾节点间内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
& NSLog(@&%@&, string);
//step 4 :解析完当前节点
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
& NSLog(@&%@&,NSStringFromSelector(_cmd) );
//step 5;解析结束
- (void)parserDidEndDocument:(NSXMLParser *)parser{
//获取cdata块数据
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{
本文已收录于以下专栏:
相关文章推荐
首先有几点说在前面
一般,在请求URL的后面带有WSDL字样的需要调用WebService
URL样式例子:http://ip:port/navigable/webservice/loginSeric...
封装Soap对象Soap对象是对请求体的简单封装,免去重复而又容易出错的拼接工作。
方法一:使用WSDL2ObjC工具,将接口转成OC类。
1.在浏览器中输入webService接口地址(Safari不可用,我用的是Firefox),如:http://xxx.xxx.asmx,...
由于项目需要,需要实现VC调用WebService接口,之前没接触过这个,所以花了一天找了点资料,并自己编写了demo。
     1. 首先调用WebService有几种方法, 一是直接采用托管...
由于项目需要,需要实现VC调用WebService接口,之前没接触过这个,所以花了一天找了点资料,并自己编写了demo。
     1. 首先看了Soap相关资料,见http://www.w...
webservice调用,包括soap请求与响应,返回(xml,json)解析。
soap请求与响应:ios webservice+soap编程
xml,json解析:ios XML,JSON,数组解...
Jmeter也可以对WebService接口测试。本次测试的接口是:
getSupportCityString
获得支持的城市/地区名称和与之对应的ID
输入参数:theRegionCo...
WebService简介
Web Services 是应用程序组件,使用开放协议进行通信,是独立的(self-contained)并可自我描述,可通过使用UDDI来发现,可被其他应用程序使用(跨平...
他的最新文章
讲师:姜飞俊
讲师:汪木铃
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)android ,IOS 同步数据库(用 webservice) ,求整理思路
现在是这样的:有两个sqlite,一个是android,一个ios的,因为每次项目更新数据的时候,测试数据的正确性都要几次进行,测完android的然后又要测试ios的,很费劲。
因此我就想,新建一个主数据库(mssql),然后每次有更新的数据或者修改的数据就返回相应的XML,然后 android 和 ios 那边就读取这些XML ,然后对 各自的数据库进行更新。不知这样可行不,求建议,如果行,大家能给啥建议和什么注意的

我要回帖

更多关于 java如何调用存储过程 的文章

 

随机推荐