• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Einbinden eines Webservice

Mole23

Grahams Jubiläumsapfel
Registriert
05.07.10
Beiträge
104
Hi zusammen,

ich versuche gerade einen in Java geschriebenen Webservice in eine iPadApp einzubinden. Leider konnten mir weder Tutorials noch die Doku weiterhelfen. Ich habe hier zwar etwas gefunden, allerdings nicht verstanden.

Was ich benötige ist ein möglichst simples Tutorial, in dem ich gut den Call des Services (Syntax, Übergabe der Parameter etc.) und die Weiterleitung des Results erkennen kann.

Für Links oder Codeschnipsel bin ich natürlich ebenso Dankbar...

Gruß!
 
Hi, erstmal Danke, aber das ist genau das Ding wo ich nicht so ganz durchsteige... Ich suche nach nem simplen Beispiel, in dem ich mir das erstmal son bissle abschauen kann... Ich habe die selbe Nummer vor ein paar Wochen mit AS3 durchgezogen, da erschien mir das aber deutlich einfacher...

Besten Gruß, Ole!
 
Moinsen,

Webservice ist ja mal grundsätzlich ein dehnbarer Begriff :) Nutzt du REST oder SOAP? Was für ein Response-Format bekommst du?
 
Hi, da hast du natürlich Recht.

Der Service wird per SOAP übertragen. Ich weiß leider nicht genau was das Response-Format ist bzw. wie man dieses nennt. Evtl. kannst du mir ja auf die Sprünge helfen. Auf jeden Fall bekomme ich ein Objekt zurück, das typische get/set Spielchen eben... Oder geht es beim Response-Format um die Codierung der Zeichen?

Schonmal Danke vorweg!
 
Sers,

ich hatte mich zu diesem Thema mal kurz belesen. So bequem wie bspw. in Java, wo man mittels Axis mal eben aus einer WSDL-Datei Java-Klassen generieren kann, gehts mit Objective-C/Cocoa wohl leider nicht. An dem Punkt habe ich dann die Lust verloren ;) . Ich hab hier allerdings noch ein paar Bookmarks, vielleicht helfen sie dir ja weiter:

http://ditchnet.org/soapclient/
http://www.felix-ritter.de/files/soap-client-mit-cocoa.html
http://www.macresearch.org/interacting-soap-based-web-services-cocoa-part-1
http://www.macresearch.org/interacting-soap-based-web-services-cocoa-part-2

Viel Erfolg!
 
Hi,

ich habe die Links mal eben schnell überflogen, weil mir jetzt nach Feierabend auch nicht mehr so richtig nach coden war. Aber das scheint in etwa das zu sein, was ich suche. Ich muss mir das morgen früh noch einmal etwas genauer reinziehen, aber schonmal vielen Dank dafür! :-D

Evtl. stelle ich morgen dann noch ein paar detailiertere Fragen...


Besten Gruß aus dem Norden!
 
So, denke ich komme jetzt selbst zurecht... Falls jemand auch sowas in der Art plant, habe ich hier noch ein paar sehr gute Links zum Thema:

Einmal ein sehr gutes Tutorial mit Code und Video... (Der Code leider nur für IOS 2):
http://icodeblog.com/2008/11/03/iphone-programming-tutorial-intro-to-soap-web-services/

Desweiteren hatte ich in diesem Thread einen sehr guten Support!
http://www.osxentwicklerforum.de/index.php?page=Thread&threadID=12853


Ansonsten vielen Dank noch einmal für die Hilfe! Besten Gruß, Ole!
 
Hallo noch einmal,

zum Teil scheint der Request jetzt zu laufen, zumindest bekomme ich eine XML-Datei als Result. Leider enthält diese folgende Fehlermeldung:


The endpoint reference (EPR) for the Operation not found is /.../ and the WSA Action = null



Diese "endpoint reference" finde ich auch in meiner wsdl Datei, bei den URL-Links wieder... Sieht dort in etwa so aus:

Code:
<wsdl:port name="UsersSessionsManagerHttpSoap11Endpoint" binding="ns:UsersSessionsManagerSoap11Binding">
<wsdl:port name="UsersSessionsManagerHttpSoap12Endpoint" binding="ns:UsersSessionsManagerSoap12Binding">
<wsdl:port name="UsersSessionsManagerHttpEndpoint" binding="ns:UsersSessionsManagerHttpBinding">

Muss ich jetzt einen davon an die URL mit ranhängen? Außerdem ist da noch die Geschichte mit der WSA-Action. Ich habe mittlerweile herrausgefunden, dass diese WSA-Action im Header definiert wird. Wenn ich das versuche, erhalte ich derzeit allerdings immer einen Error als Antwort. Das Problem habe ich mit allen Header-Befehlen...

Ich weiß auch garnicht wo ich am besten anfangen soll. An sich bräuchte ich Hilfe bei der Erstellung von der XML-Datei.


Ich poste am besten mal den wsdl link: http://www.smartexpertise.de:9180/axis2/services/UsersSessionsManager?wsdl

Meine XML-Datei schaut derzeit wie folgt aus:


Code:
<?xml version="1.0" encoding="utf-8"?>

<SOAP-ENV:Envelope  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:getSession="urn:getSession"  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<getSession xmlns="http://management.users.webservices.nexmo.eu">

<username xsi:type="xsd:string">pw</username>
<password xsi:type="xsd:string">pw</password>
<mainLanguage xsi:type="xsd:string">original</mainLanguage>

</getSession>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ich bin mir auch nicht ganz sicher, wie ich jetzt vorgehen musss. Ich denke ich muss den Header definieren. Aber wie? Wenn da noch jemand ein Tip oder so hätte, wäre das super! Besten Gruß, Ole!
 
Zuletzt bearbeitet:
Endlich! Nach gerade mal drei Tagen, habe ich das Ding zum laufen gebracht. Da soll mal einer von "Simple"... Object Access Protocol sprechen...

Hier ist noch mein Code, falls jemand mal Ähnliches plant... Ich habe den Parser weggelassen, dann ist das einfacher zu verstehen...

Vielen Dank noch einmal an alle!

Code:
[I]//
//  Hello_SOAPAppDelegate.h
//  Hello_SOAP
//
//  Created by Ole Bruens on 27/07/2010.
//  Copyright by Ole Bruens 2010. All rights reserved.
//
  
  
#import "Hello_SOAPViewController.h"
  
  
@implementation Hello_SOAPViewController
@synthesize greeting, webData, soapResults, xmlParser;
  
  
-(IBAction)buttonClick:(id)sender
  
    {
        NSString *soapMessage = [NSString stringWithFormat:
        @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
        "<SOAP-ENV:Envelope  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"  xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"  SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"  xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                                 
        "<SOAP-ENV:Body>"
                "<getSession xmlns=\"http://management.users.webservices.olebruens.com\">"
                "<username xsi:type=\"xsd:string\">pw</username>"
                "<password xsi:type=\"xsd:string\">pw</password>"
                "<mainLanguage xsi:type=\"xsd:string\">languageType</mainLanguage>"
                "</getSession>"
        "</SOAP-ENV:Body>"
        "</SOAP-ENV:Envelope>"                             
        ];
    
    
        NSLog(@"soapMessage: %@", soapMessage);
    
        NSURL *url = [NSURL URLWithString:@"http://0.100.90.0:0000/axis2/services/UsersSessionsManager/"];
        NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
        NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
    
        [theRequest addValue: @"Mac OS X; WebServicesCore (357)" forHTTPHeaderField:@"User-Agent"];
        [theRequest addValue: @"text/xml" forHTTPHeaderField:@"Content-Type"];
        [theRequest addValue: @"0.100.90.0" forHTTPHeaderField:@"Host"];
        [theRequest addValue: @"urn:getSession" forHTTPHeaderField:@"SOAPAction"];
        [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
        
        [theRequest setHTTPMethod:@"POST"];
        [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    
        NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    
        if ( theConnection )
        {
            webData = [[NSMutableData data] retain];
        }
    
        else
        {
            NSLog(@"theConnection is NULL");
        }
    }
  
  
-(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];
    }
  
  
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
    
    {
        NSLog(@"DONE. Received Bytes: %d", [webData length]);
        NSString *theXML = [[NSString alloc] initWithBytes: [webData  mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
        NSLog(@"theXML: %@", theXML);
    
        
        UIAlertView *resultAlert = [[UIAlertView alloc]
                            
        initWithTitle:@"ACHTUNG:" 
        message: (@"Result %@", theXML)
        delegate:self
        cancelButtonTitle:nil
        otherButtonTitles:@"OK", nil];
    
        [resultAlert show];
        [theXML release];
    }
  
  
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
  
    {
        // Return YES for supported orientations
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
  
  
- (void)didReceiveMemoryWarning 
    
    {
        [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
        // Release anything that's not essential, such as cached data
    }
  
  
- (void)dealloc 
  
    {
        [xmlParser release];
        [super dealloc];
    }
  
  
@end[/I]
 
Hallo,
ich habe das selbe Problem. Zurzeit entwickle ich ein iPad App, welches sich mit einem Server durch das sogenannte wsdl - Addressing (SOAP) verbinden soll. Ich habe eine wsdl Adresse für das Login-Service. Das kann ich mit Hilfe von Sudzc.com oder mit der Programm wsdl2objc in Objective-C generieren. Weiter komme aber ich leider nicht mehr. Mir fehlen die Grundkenntnisse :(. Ich hoffe, dass ich hier richtig bin und dass man mir hier helfen kann.
 
Und was ist jetzt konkret deine Frage bzw. das Problem?
 
Zum Thema, Werbung in eigener Sache: Ich habe das — augenscheinlich etwas verwaiste — wsdl2objc mal auf github gezogen ( https://github.com/below/wsdl2objc) und würde mich über Kollaboration freuen.