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:
Framework.NET WCF Java
posted @ venerdì 27 luglio 2007 11:35