Interoperabilità dei dati: i Web Services ASMX e i DataSets

Nell’interrogare i Web Services scritti in ASP (ASMX Web Services), che internamente utilizzano gli ADO RecordSet, da un client Java (o comunque in altri linguaggi non “Microsoft-compliant“), si possono avere dei noti problemi di interoperabilità.

L’utilizzo dei DataSet di ADO.NET è alquanto diffuso sui sistemi Windows, vista la certa flessibilità e velocità nella presentazione delle informazioni recuperate da un database. Si possono aggirare i problemi di interoperabilità utilizzando i DataSet tipizzati  (Typed DataSet) in combinazione con definizioni personalizzate dei WSDL (Web Services Description Language), come spiegato nell’ottimo tutorial che ho preso come riferimento: Web Services and DataSet.

 

Livelli di interoperabilità. Aggiorniamoci con un pò di teoria: la capacità di elaborare i dati, indipendentemente da dove essi provengano, costituisce il livello più primitivo di interoperabilità (definita ” interoperabilità dei dati “). Lo standard XML 1.0 è stato specificamente sviluppato per facilitare appunto tale interoperabilità. Dati serializzati in XML 1.0 possono essere facilmente estratti e manipolati su qualsiasi piattaforma, usando qualsiasi linguaggio di programmazione per cui esista un processore di XML. Per raggiungere l’interoperabilità dei dati occorre esporre da ambo le parti (server e client) uno strato di XML API.

 

DataInteroperabilityInXML

 

L’utilizzo di XML per la distribuzione di Web Services semplifica, dunque, l’interoperabilità tra sistemi distribuiti eterogenei e i Web Services stessi potrebbero essere implementati e consumati utilizzando direttamente le XML API. Tale approccio offre il pieno controllo nell’elaborazione dei messaggi, ma richiede un grosso overhead nell’implementazione dell’infrastruttura comune di Web Services. Lavorare su uno strato di XML API (sia sul client che sul server), è abbastanza oneroso. Tuttavia, framework come Microsoft ASP.NET automatizzano la traduzione tra documenti XML e istanze di oggetti in fase di esecuzione (WebMethod framework) e aiutano lo sviluppatore a lavorare su oggetti anziché su output XML.

Toolkit Interoperability

Se lato client, volessimo usare Java e, in particolare, il toolkit Axis di Apache per “consumare” il Web Service (WSDL2Java), potremmo pensare di generare automaticamente le classi a partire dalle definizioni dell’XML Schema, senza scendere ad un livello inferiore di API XML. L’idea è quella di passare ad un successivo livello di interoperabilità, costituito da un “ToolKit interoperability”: sia sul client che sul server gli oggetti verranno serializzati-deserializzati automaticamente a partire da XML (lo strato di API XML diventerebbe per noi trasparente).

 

Il problema dei DataSet. Il DataSet è un tipo polimorfo, la cui attuale struttura non è determinata fino alla fase di esecuzione (finchè il DataSet stesso non viene riempito con i dati). In fase di progettazione, quando lo sviluppatore Java lancia il WSDL2Java di Axis, non si hanno abbastanza informazioni nella definizione dello schema per poter mappare i tag XML su proprietà di un oggetto POJO. Axis, non sapendo il tipo dell’oggetto, non riuscirà a deserializzare e l’unico modo per lo sviluppatore Java è quello di consumare il servizio web utilizzando le API DOM.

Utilizzare i Typed Datasets. Probabilmente il modo più semplice per aggirare il precedente problema è di non utilizzare i DataSet generici negli ASMX Web Services. I Dataset tipizzati (Typed Dataset) sono classi che derivano da Datasets ed espongono membri fortemente tipizzati che rappresentano una vista specifica di dati. A differenza dei DataSet generici, i DataSet tipizzati sono vincolati ad una struttura specifica, ad una definizione dello schema XML, specificata in fase di progettazione. È possibile generare automaticamente DataSet tipizzati dalla definizioni di schema XML utilizzando il comando xsd.exe o il built-in designer di Visual Studio ®. NET.

Lato Axis, quando provederete a generare gli stub, vi troverete magicamente gli oggetti o gli array di Java POJO, su cui potete lavorare in modo sicuramente più agevole che non parsando l’XML.

La parte operativa la potete tranquillamente vedere sul tutorial che vi ho precedentemente segnalato: http://msdn.microsoft.com/en-us/magazine/cc188755.aspx

Ecco di seguito un pò di link utili agli sviluppatori Java per la generazione degli stub client in AXIS:

Creative Commons License
This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2013/07/06/i-web-services-asmx-e-i-datasets/.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


− uno = 5