Circa Wcf, Axis e... ws-addressing

Eccomi qui a raccontare circa la mia esperienza di interoperazione tra Wcf (Microsoft Windows Communication Fundation) e Axis (libreria per Ws nel modo java) passando da ws-addressing (standardizzazione per l'indirizzamento dei messaggi nei Web Service).

Lo scenario è quello di un server wcf (.NET) e un client java - supporttato da Axis - che dovranno comunicare su canale http. ws-addressing è W3C Recommendation. wcf supporta nativamente ws-addressing impostando WSHttpBinding; Axis/Axis2 supporta ws-addressing "opzionalmente" (?) ed occorre un modulo collaterale di una delle distribuzioni della libreria (Apache Sandesha?). Senza caricare i moduli di ws-addressing di axis i client generati dal tool di analisi del wsdl (org.apache.axis.wsdl.WSDL2Java) non supportano la gestione dello standard nonostante sia richiesto dal wsdl stesso.

<wsp:Policy>
    <wsam:Addressing>
        <wsp:Policy/>
    </wsam:Addressing>
</wsp:Policy>

Le chiamate del client java di default - ignorando l'asserzione delle policy del wsdl - falliscono: The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree The problem seems to be related to WCF's using WS-Addressing policy..

Poche istruzioni in merito in rete e le poche disponibili non sembrano funzionare (errore mio sicuramente). Quindi ad ora l'unica soluzione trovata è quella di intervenire sul codice generato per creare le classi del client da axis ed aggiungere gli header soap mancanti. Soluzione OPINABILE (ogni volta che si ricreano le classi occorre correggere il codice) ma funzionante.

static final String ws_addressing = "http://www.w3.org/2005/08/addressing";

//...

_serviceClient.addStringHeader(new QName(ws_addressing, "Action"), <soap action del metodo>);
_serviceClient.addStringHeader(new QName(ws_addressing, "To"), <url del servzio wcf>);

Riporto per completezza alcune refecence per come si dovrebbero caricare i moduli di addressing con Axis/Axis2/WSO2 Tungsten 1.0/Apache Sandesha (?):

 

Qualcuno mi potrebbe dire che potevo guardare prima un vecchio post in cui Lorenzo consigliava "WSO2 Tungsten 1.0"... beh lo valuterò sicuramente. Ogni volta che mi rimetto a giocare con java mi ritrovo ad appoggiare e sottoscrivere quanto detto da Stefano in suo post dove "confrontava" il mondo .NET e Java: "Vedevo e continuo a vedere in Java una comunità in fermento e molto attiva, ma molto, troppo frammentata e confusionaria".

Technorati Tags:

posted @ venerdì 27 luglio 2007 11:35

Print

Comments on this entry:

# M.rkino

Left by Marco Barzaghi at 05/08/2009 12:11
Gravatar
Le componenti MS supportano BasicHttpBinding senza problemi. Il post era per evidenziare che alcuni strumenti java in genere hanno problemi a essere compatibili con le specifiche w3c... e qualche settimana fa - a 2 anni di distanza dal post - ho avuto il medesimo problema... e la conferma di quanto ho detto.
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011