iPhone调用java的webService
来源:互联网 发布:北京mba院校排名 知乎 编辑:程序博客网 时间:2024/06/06 04:54
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");
- }
- }
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.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
//// 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];//如果连接已经建好,则初始化dataif( 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];//重新加載xmlParserif( 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"
- ];
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]];
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。
- iPhone调用java的webService
- iPhone调用java的webService
- java webservice的调用
- java调用python的webservice
- java调用WebService的例子
- java调用php的webService
- Java调用.net的WebService
- Java调用.net的WebService
- Java调用.NET的WebService
- java调用.net的 WebService
- java调用php的webService
- java调用php的webService
- java调用.net的webservice
- .Net调用Java的WebService
- java调用.net的webservice
- java调用webservice的例子
- java 调用天气预报的webservice
- Java调用webservice的例子
- Myeclipse反向工程后造成的SQL syntax
- Session的几个主要方法
- MFC中显示图片——Resource
- LSHKIT的编译
- 对象的集中状态
- iPhone调用java的webService
- HQL和Criteria
- 最全的纯净系统下载地址
- 嵌入式系统交叉编译
- 暂且输出到秒
- Dubbo入门
- Oracle游标管理
- Linux下SO_REUSEADDR于TCP/IPv1中的差异
- hdu4287