使用Java Web Service的Objective C SOAP请求

我有一个简单的Java Web服务:

@WebService(serviceName = "Catalogo_V1") public class Catalogo_V1 { /** This is a sample web service operation */ @WebMethod(operationName = "hello") public String hello(@WebParam(name = "name") String txt) { System.out.println("kkk"+txt); if(txt != null) { txt= txt +"www"; } return "Hello " + txt + " !"; } } 

我在这个Web服务中做了一个测试:(http:// localhost:8080 / WSServer / Catalogo_V1?Tester)

方法返回

 java.lang.String : "Hello davidwww !" SOAP Request      david    

SOAP响应

     Hello davidwww !    

好的,之后我在Objective C中完成了这个请求:

ConfigViewController.h

 @interface ConfigViewController : UITableViewController { NSMutableData *webData; NSXMLParser *xmlParser; NSString *finaldata; NSString *convertToStringData; NSMutableString *nodeContent; } -(IBAction) buttonPressed: (id) sender; @end 

ConfigViewController.m

 #import "ConfigViewController.h" @implementation ConfigViewController ... - (IBAction)buttonPressed:(id)sender { nodeContent = [[NSMutableString alloc]init]; NSString *soapFormat = [NSString stringWithFormat: @"\n" "\n" "\n" "\n" "david\n" "\n" "\n" "\n"]; NSLog(@"The request format is: \n%@",soapFormat); NSURL *locationOfWebService = [NSURL URLWithString:@"http://localhost:8080/WSServer/Catalogo_V1?wsdl"]; NSLog(@"web url = %@",locationOfWebService); NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc]initWithURL:locationOfWebService]; NSString *msgLength = [NSString stringWithFormat:@"%d",[soapFormat length]]; [theRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; [theRequest addValue:@"http://localhost:8080/WSServer/Catalogo_V1?wsdl" forHTTPHeaderField:@"SOAPAction"]; [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"]; [theRequest setHTTPMethod:@"POST"]; //the below encoding is used to send data over the net [theRequest setHTTPBody:[soapFormat dataUsingEncoding:NSUTF8StringEncoding]]; NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self]; if (connect) { webData = [[NSMutableData alloc]init]; } else { NSLog(@"No Connection established"); } } -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [webData setLength: 0]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [webData appendData:data]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"ERROR with theConenction"); [connection release]; [webData release]; } -(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { return YES; } -(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession]; [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"DONE. Received Bytes: %d \n", [webData length]); NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; NSLog(@"\n%@",theXML); [connection release]; } ... @end 

我的控制台显示:

  2011-09-02 10:17:32.748 Catalogo-V1[1131:207] The request format is:     david    2011-09-02 10:17:32.749 Catalogo-V1[1131:207] web url = http://localhost:8080/WSServer/Catalogo_V1?wsdl 2011-09-02 10:17:32.757 Catalogo-V1[1131:207] DONE. Received Bytes: 224 2011-09-02 10:17:32.757 Catalogo-V1[1131:207]     Hello null !    

根据您在控制台中显示的内容,您制定的XML请求无效。 你有

  david  

但你应该(注意删除无效的XML标记终止):