Appcelerator Titanium: sviluppare app per Android e iPhone – Quinta Parte

Appcelerator Titanium: sviluppare app per Android e iPhone – Quinta Parte

In questo articolo vedremo come poter utilizzare un web service attraverso il protocollo SOAP. Per poter fare delle prove utilizzeremo un Web Service messo a disposizione da W3schools (che non è in alcun modo legata al W3C) che converte il valore dei gradi Celsius in Farenheit (e viceversa i metodi esposti sono due). Un ulteriore sito che offre la possibilità di poter provare dei Web Service è http://www.webservicex.net/ws/default.aspx , su cui tra l'altro, è basato l'esempio presente nell'applicazione Kitchen Sink fornita Appcelerator stessa (scaricabile dal sito http://github.com/appcelerator/KitchenSink).

Appcelerator Titanium: sviluppare app per Android e iPhone – Seconda Parte
Appcelerator Titanium: sviluppare app per Android e iPhone – Terza Parte
Installare e configurare l’Android SDK

In questo articolo vedremo come poter utilizzare un web service attraverso il protocollo SOAP. Per poter fare delle prove utilizzeremo un Web Service messo a disposizione da W3schools (che non è in alcun modo legata al W3C) che converte il valore dei gradi Celsius in Farenheit (e viceversa i metodi esposti sono due). Un ulteriore sito che offre la possibilità di poter provare dei Web Service è http://www.webservicex.net/ws/default.aspx , su cui tra l’altro, è basato l’esempio presente nell’applicazione Kitchen Sink fornita Appcelerator stessa (scaricabile dal sito http://github.com/appcelerator/KitchenSink).

La nostra applicazione di esempio utilizza un file esterno chiamato suds.js che non è altro che un cliente Javascript compatibile col protocollo SOAP. Troviamo questo file suds.js sempre nell’applicazione di esempio Kitchen Sink.

Per poter configurare il nostro client SOAP abbiamo bisogno di alcune informazioni del Web Service presenti nel suo WSDL, nel nostro esempio lo troviamo all’indirizzo:

http://www.w3schools.com/webservices/tempconvert.asmx?WSDL

Innanzitutto abbiamo bisogno del suo End point, cioè dell’URI utilizzata per poter comunicare con un’istanza del servizio (indica una specifica locazione per accedere al Web Service utilizzando uno specifico protocollo). Nel nostro caso stiamo cercando un end point per il protocollo SOAP quindi cerchiamo la voce <soap:address> ed il valore del suo attributo location:

<soap:address location=”http://www.w3schools.com/webservices/tempconvert.asmx” />

Abbiamo poi bisogno del targetNamespace, che troviamo facilemente come attributo del tag <wsdl:definitions>:

<wsdl:definitions
...
targetNamespace="http://tempuri.org/"
.../">

Infine dobbiamo cercare l’operazione (il metodo) che vogliamo invocare del nostro servizio, la cerchiamo visionando i tag wsdl:operation (annidati all’interno del tag wsdl:binding). Nel file WSDL ne sono presenti due:

  • FahrenheitToCelsius;
  • CelsiusToFahrenheit.

nel nostro esempio useremo il secondo. Vediamo inoltre che il metodo accetta come input un literal (stringa) e come output ci restituirà ancora un literal. In particolare dovremo specificare l’elemento Celsius come input di ingresso e ritroveremo in CelsiusToFahrenheitResult il valore di ritorno.

Abbiamo tutti i parametri che cercavamo, possiamo ora scrivere il codice per la nostra app:

Titanium.include('suds.js');
var window = Ti.UI.currentWindow;
var label = Ti.UI.createLabel({
    top: 10,
    left: 10,
    width: 'auto',
    height: 'auto',
    text: 'Contacting web service...'
});

window.add(label);

var url = "http://www.w3schools.com/webservices/tempconvert.asmx";
var callparams = {
		Celsius: '30'
};

var suds = new SudsClient({
    endpoint: url,
    targetNamespace: 'http://tempuri.org/'
});

try {
    suds.invoke('CelsiusToFahrenheit', callparams, function(xmlDoc) {
        var results = xmlDoc.documentElement.getElementsByTagName('CelsiusToFahrenheitResult');
        if (results && results.length>0) {
            var result = results.item(0);
            label.text = '30 Gradi Celsius equivalgono a ' + results.item(0).text + ' Gradi Fahrenheit.';
        } else {
            label.text = 'Oops, could not determine result of SOAP call.';
        }
    });
} catch(e) {
    Ti.API.error('Error: ' + e);
}
>

COMMENTS

WORDPRESS: 0