写这个笔记之前,我也参考了一些文章,主要是在http://www.cocoachina.com/这个网站上搜索资料。
webService大家可以看一个教程:
http://www.cnblogs.com/hoojo/archive/2011/03/16/1985160.html谢谢这位博主对我提供的帮助。
下面是我的webService代码:
package com.xiva.service; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceContext; public class LoginService { public boolean login(String userName, String password) { MessageContext context = MessageContext.getCurrentMessageContext(); ServiceContext ctx = context.getServiceContext(); if ("admin".equals(userName) && "123456".equals(password)) { ctx.setProperty("userName", userName); ctx.setProperty("password", password); ctx.setProperty("msg", "登陆成功"); return true; } ctx.setProperty("msg", "登陆失败"); return false; } public String getLoginMessage() { MessageContext context = MessageContext.getCurrentMessageContext(); ServiceContext ctx = context.getServiceContext(); return ctx.getProperty("userName") + "#" + ctx.getProperty("msg"); } }
安装前面提到的博客文章,发布好这个Service.
下面就是在iPhone上的调用了。
先把代码给出,我们再一个一个分析。
// // SOAPDemoViewController.h // SOAPDemo // // Created by xiang xiva on 11-4-4. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import <UIKit/UIKit.h> @interface SOAPDemoViewController : UIViewController <NSXMLParserDelegate>{ IBOutlet UITextField *nameInput; IBOutlet UILabel *greeting; NSMutableData *webData; NSMutableString *soapResults; NSXMLParser *xmlParser; BOOL recordResults; } @property(nonatomic, retain) IBOutlet UITextField *nameInput; @property(nonatomic, retain) IBOutlet UILabel *greeting; @property(nonatomic, retain) NSMutableData *webData; @property(nonatomic, retain) NSMutableString *soapResults; @property(nonatomic, retain) NSXMLParser *xmlParser; -(IBAction)buttonClick: (id) sender; - (void)loginSOAP; @end
// // SOAPDemoViewController.m // SOAPDemo // // Created by xiang xiva on 11-4-4. // Copyright 2011 __MyCompanyName__. All rights reserved. // #import "SOAPDemoViewController.h" @implementation SOAPDemoViewController @synthesize greeting, nameInput, webData, soapResults, xmlParser; /* // The designated initializer. Override to perform setup that is required before the view is loaded. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } */ /* // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void)loadView { } */ /* - (void)viewDidLoad { [super viewDidLoad]; } */ /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)viewDidUnload { // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } -(IBAction)buttonClick:(id)sender { greeting.text = @"Getting time …"; [nameInput resignFirstResponder]; [self loginSOAP]; } #pragma mark - #pragma mark webService Data -(void)loginSOAP{ recordResults = NO; //封装soap请求消息 NSString *soapMessage = [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/\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">\n" "<soap:Body>\n" "<login xmlns=\"http://service.xiva.com\">\n" "<userName>admin" "</userName>" "<password>123456" "</password>" "</login>\n" "</soap:Body>\n" "</soap:Envelope>\n" ]; NSLog(@"%a",soapMessage); //请求发送到的路径 NSURL *url = [NSURL URLWithString:@"http://192.168.0.64:8080/axis2/services/LoginService"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; //以下对请求信息添加属性前四句是必有的,第五句是soap信息。 [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue: @"http://service.xiva.com/login" forHTTPHeaderField:@"SOAPAction"]; [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; //请求 NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; //如果连接已经建好,则初始化data if( theConnection ) { webData = [[NSMutableData data] retain]; } else { NSLog(@"theConnection is NULL"); } } -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [webData setLength: 0]; NSLog(@"connection: didReceiveResponse:1"); } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [webData appendData:data]; NSLog(@"connection: didReceiveData:%a", [webData length]); } //如果电脑没有连接网络,则出现此信息(不是网络服务器不通) -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"ERROR with theConenction"); [connection release]; [webData release]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"3 DONE. Received Bytes: %d", [webData length]); NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; NSLog(@"%a",theXML); [theXML release]; //重新加載xmlParser if( xmlParser ) { [xmlParser release]; } xmlParser = [[NSXMLParser alloc] initWithData: webData]; [xmlParser setDelegate: self]; [xmlParser setShouldResolveExternalEntities: YES]; [xmlParser parse]; [connection release]; //[webData release]; } -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName attributes: (NSDictionary *)attributeDict { NSLog(@"4 parser didStarElemen: namespaceURI: attributes:"); if( [elementName isEqualToString:@"soap:Fault"]) { if(!soapResults) { soapResults = [[NSMutableString alloc] init]; } recordResults = YES; } } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSLog(@"5 parser: foundCharacters:"); NSLog(@"recordResults:%@",string); if( recordResults ) { [soapResults appendString: string]; } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"6 parser: didEndElement:"); if( [elementName isEqualToString:@"ns:return"]) { NSLog(@"MSG"); } if( [elementName isEqualToString:@"getOffesetUTCTimeResult"]) { recordResults = FALSE; greeting.text = [[[NSString init]stringWithFormat:@"第%@时区的时间是: ",nameInput.text] stringByAppendingString:soapResults]; [soapResults release]; soapResults = nil; NSLog(@"hoursOffset result"); } } - (void)parserDidStartDocument:(NSXMLParser *)parser{ NSLog(@"-------------------start--------------"); } - (void)parserDidEndDocument:(NSXMLParser *)parser{ NSLog(@"-------------------end--------------"); } - (void)dealloc { [super dealloc]; } @end
在iPhone你直接创建一个视图应用即可。
既然集成了NSXMLParserDelegate的协议,那么我们便可使用这个协议上的方法。
关于connection的方法和xml的方法在此不用多说了;看看方法名大家就知道用途了。
第一个难点:
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
这句话中的soapMessage的拼接。
NSString *soapMessage = [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/\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">\n" "<soap:Body>\n" "<login xmlns=\"http://service.xiva.com\">\n" "<userName>admin" "</userName>" "<password>123456" "</password>" "</login>\n" "</soap:Body>\n" "</soap:Envelope>\n" ];
除了下面这段代码,其他都是一些系统设置,
"<login xmlns=\"http://service.xiva.com\">\n"
"<userName>admin"
"</userName>"
"<password>123456"
"</password>"
"</login>\n"
上面代码中第一行的login,代表我们要调用的方法;xmlns中存放的是命名空间,http://service.xiva.com
service.xiva.com就是java中我们包位置的颠倒。
第二,三行代码我们给login传递一个叫userName的参数,值为admin
第四,五行代码我们给login传递一个叫password的参数,值为123456
第二个难点:
NSURL *url = [NSURL URLWithString:@"http://192.168.0.64:8080/axis2/services/LoginService"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; //以下对请求信息添加属性前四句是必有的,第五句是soap信息。 [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue: @"http://service.xiva.com/login" forHTTPHeaderField:@"SOAPAction"]; [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
首先url,是指我们调用该方法的地址,
第二行初始化一个request给我们的connection调用,
第三行和第七行我们在设置内容的长度
第四行,是注释
第五行,设置http内容的type
第六行,是设置我们soapAction;也就是我们webService调用的方法,命名空间/方法名
第八行设置http的发送方式,为post。(不知道用get会怎么样?)
第九行设置整个Body的内容,也就是我们之前拼接的那个soapMessage。
相关推荐
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
标题 "Delphi调用Java WebService实例" 涉及的是在Delphi编程环境中如何与Java WebService进行交互的技术。Delphi是一款强大的Windows应用程序开发工具,而Java WebService则是一种基于标准的,跨平台的远程调用技术...
### .NET调用Java WebService的关键知识点 #### 一、背景与原理介绍 在实际的软件开发过程中,不同技术栈之间的交互变得越来越普遍。对于.NET应用程序来说,有时需要调用由Java开发的WebService。这种跨平台的服务...
本文将深入探讨如何使用C#调用Java WebService,这是实现.NET与Java平台间互操作性的一个重要方式。我们将首先理解WebService的基本概念,然后详细讲解C#中如何通过.NET Framework的SOAP客户端代理类来调用Java ...
标题中的“PB调用JAVA WEBSERVICE实例”指的是使用PowerBuilder(PB)应用程序调用由Java编写的Web服务。在企业级应用开发中,不同语言之间的互操作性是非常重要的,而Web服务提供了一种标准的方式来实现这一点。让...
本主题将深入探讨如何使用C#作为客户端来调用Java编写的WebService。WebSocket服务提供了平台无关的通信方式,使得不同编程语言间的数据交换变得可能。下面我们将详细讨论这个过程。 首先,了解WebService的基本...
java调用webservicejava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava调用webservice.zipjava...
### ASP.NET 调用 Java WebService 实例详解 #### 背景介绍 随着互联网技术的发展,跨平台、跨语言的服务交互变得越来越重要。Web Service 技术为不同编程环境之间的服务通信提供了一种标准的方式。本文将详细介绍...
调用Java WebService的问题在IT领域中颇为常见,尤其是在跨平台、跨语言的环境中,如C#调用Java WebService。以下将详细解析这一过程中的关键知识点,包括WebService的架构原理、工具选择(如Axis2)、数据类型转换...
ASP.NET调用Java接口主要涉及的是跨平台的通信技术,其中关键步骤是通过WebService作为中间桥梁来实现。这里,我们详细解析整个过程: 1. **部署Java WebService**: - 使用Tomcat这样的应用服务器部署Java ...
本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description Language)文件来实现这一目标。以下是关于这个主题的详细知识点: 1. **Web服务...
本主题聚焦于如何在C++中调用Java WebService接口,这涉及到两种编程语言的互操作性以及Web服务技术的理解。让我们深入探讨这个过程。 首先,我们需要理解什么是Java WebService。WebService是一种基于标准的、平台...
C# 调用 Java 发布的 WebService 终稿 C# 调用 Java 发布的 WebService 是一种常见的跨语言通信方式。在本文中,我们将介绍如何使用 C# 调用 Java 发布的 WebService。 标题解释 C# 调用 Java 发布的 WebService ...
为了帮助你更好地理解和实践,压缩包中的"PB调用WebService"文件很可能包含了一些示例代码或者截图,它们能更直观地展示上述步骤的具体实现。如果在实际操作中遇到任何困难,可以随时联系提供者以获取更多帮助。 总...
Java 调用 ODI webservice 实现数据同步 Java 调用 ODI webservice 是实现数据同步的一种常见方式。ODI(Oracle Data Integrator)是一种数据集成平台,提供了webservice接口,允许用户通过webservice调用ODI方案...
【SAP ABAP调用Java生成的Web Service手册】 在SAP系统中,与外部服务进行交互时,经常需要调用由Java等其他语言编写的Web Service。本手册详细介绍了如何在MyEclipse环境中生成Web Service,并在SAP ABAP环境中...
JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...
本篇将详细讲解如何在Android应用中使用Java调用Webservice。 一、理解Web服务 Web服务是一种基于互联网的、标准化的服务交互方式,它允许不同系统之间的应用程序共享数据和功能。常见的Web服务有SOAP(Simple ...
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
本主题将深入探讨如何使用C#来调用带有身份验证的Java Web服务。Web服务作为一种基于标准的通信方式,允许不同语言和平台之间的应用程序共享数据和功能。在这个案例中,我们将重点关注C#与Java之间的交互,特别是...