WCF et int éropabilit é avec JAVA

chuckleelephantbutteΛογισμικό & κατασκευή λογ/κού

9 Ιουν 2012 (πριν από 5 χρόνια και 2 μήνες)

363 εμφανίσεις







WCF et intéropabilité avec
JAVA

Version 1.0













Adrien RUFFIE





Dotnet

France Association


Adrien Ruffié




2

WCF et intéropabilité avec JAVA

Sommaire




1

Création du service WCF

................................
................................
................................
.................

3

1.1

Création du contrat de service

................................
................................
................................

3

1.2

Création de l’implémentation du contrat de service

................................
..............................

4

1.3

Création de l’hébergement du service

................................
................................
....................

5

2

Création du client Java

................................
................................
................................
....................

8

3

Conclusion

................................
................................
................................
................................
.....

12








Dotnet

France Association


Adrien Ruffié




3

WCF et intéropabilité avec JAVA

1

Création du service WCF

1.1

Création
du contrat

de service




Pour commencer, nous allons partir d’une solution vide sous Visual Studio

:



Ensuite, pour créer le projet où notre contrat de service sera localisé, il suffit d’aller dans

:

«

Ajouter

» puis «

Nouveau Project

» puis «

WCF

» puis «

WCF
Service Library

».


Le contrat du service est représenté en C# par une interface, ce contrat permettra à votre
web service de définir les opérations/actions qu’il proposera aux différents consommateurs
qui pourront venir le requêter.






Dotnet

France Association


Adrien Ruffié




4

WCF et intéropabilité avec JAVA

Quand Visual Studio
génère votre projet, il nous suffit de supprimer la classe
Service1.cs

et de
renommer l’interface
IService1.cs

en
IConversionService.cs

pour notre exemple.

Ensuite il faut supprimer le contenu de notre interface

:

public

interface

IConversionService

De
plus, nous allons supprimer entièrement la classe auto
-
générée

:

public

class

CompositeType

Ensuite déclarez votre opération qui sera mise à disposition aux consommateurs du service via le
contrat.

Vous devriez obtenir l’interface suivante

:


Pour finir
,
il faut

ensuite
supprimer le fichier App.config
.

1.2

Création de l’implémentation du contrat de service


Dans notre solution, nous allons créer

un nouveau projet qui sera l’implémentation de votre contrat
de service

:






Dotnet

France Association


Adrien Ruffié




5

WCF et intéropabilité avec JAVA

Après la génération

automatique de votre projet, nous allons supprimer le fichier App.config ainsi
que l’interface
IService1.cs
.

Renommons ensuite

la

classe
Service1.cs

en
ConversionService.cs
.

Ajoutons la référence de n
otre projet
ContractServiceLibrary
, p
our avoir accès à

l’interface du

c
ontrat de service.

Dans la classe
ConversionService.cs

il ne faut pas oublier d’importer l’espace de noms

de
ContractServiceLibrary
. De plus, il faut remplacer

l’implémentation de l’interface

IService1

par
IConversionServic
e
.

Ensuite, il faut supprimer le contenu de la classe
ConversionService

puis aller faire un clic droit sur
«

IConversionService

» puis «

Implémenter l’interface

».

Une foi
s
la méthode générée
il suffit de supprimer son contenu généré par Visual Studio et
d’i
mplémenter notre propre logique indiquée ci
-
dessous

:


Cette petite routine nous permet de faire une conversion entre l’Euro et le dollar américain. Le
montant indiqué en paramètre de la méthode en euros sera renvoyé avec une valeur en USD.

1.3

Création de l
’hébergement du service


Pour finir
, nous allons maintenant créer

un troisième projet
pour héberger notre service WCF

:






Dotnet

France Association


Adrien Ruffié




6

WCF et intéropabilité avec JAVA

Ce projet va nous permettre d’héberger notre web service. E
n réalité
, il va nous permettre de publier
un endpoint où n
otre service ser
a disponible.

Un endpoint represente
abstraitement un point de connexion d’où nous pourrons

accéder au service
«

bindé

»

dessus et disponible à une adresse avec différentes possibilités de protocoles comme SOAP
& http GET/POST.

Après génération de ce proj
et, nous allons
supprime
r

l’interface
IService1.cs

et la classe
Service1.svc.cs

auto
-
générées.

Ensuite, nous allons inclure les références de nos deux projets


«

ContractServiceLibrary

» et
«

ImplementationServiceLibrary

».


Renommons

le fichier
Service1.s
vc

en
ConversionService.svc
. Dans c
e fichier
,

nous devons
changer la
ligne suivante

:

<%
@

ServiceHost

Language
="C#"

Debug
="true"

Service
="HostingServiceApplication.Service1"

CodeBehind
="Service1.svc.cs"

%>

Pour obtenir ceci :

<%
@

ServiceHost

Language
="C#"

Debug
="true"

Service
="ImplementationServiceLibrary.ConversionService"
%>


Ensuite dans le

fichier

web.config du projet

HostingServiceLibrary
, il faut remplacer

les occurrences

de

:

HostingServiceApplication.Service1Behavior

Par cette nouvelle valeur

:


ImplementationServiceLibrary.ConsersionServiceBehavior

Il faut, de plus, faire de même pour l’occurrence suivante

:

HostingServiceApplication.Service1

Remplacée par

:

ImplementationServiceLibrary.ConversionService

Faire de même pour cette valeur

:

Hos
tingServiceApplication.IService1

Remplacée par

:

ContractServiceLibrary.IConversionService






Dotnet

France Association


Adrien Ruffié




7

WCF et intéropabilité avec JAVA

Pour finir avec le remplacement d’occurences

Ensuite remplacez la ligne suivante

:

<
endpoint

address
=
""

binding
=
"
wsHttpBinding
"

contract
=
"
ContractServiceLibrary.IConversionService
"
>

Remplacée par cette valeur :

<
endpoint

address
=
""

binding
=
"
basicHttpBinding
"

contract
=
"
ContractServiceLibrary.IConversionService
"
>

Exécutons maintenant notre solution. Nous obtenons ceci

:


On peut constaterque

le fichier de description du web service (le fichier WSDL

: Web Service
Description Language) est disponible à l’adresse suivante

:
http://localhost:50855/ConversionService.svc?wsdl

Nous util
iserons cette adresse pour générer le client Java.













Dotnet

France Association


Adrien Ruffié




8

WCF et intéropabilité avec JAVA

2

Création du client Java


Note de l’auteur

: Pour cette partie j’estime que le temps de développement sous Eclipse étant plus
long et laborieux (et surtout rébarbatif avec les imports de jar, phase
de build ect …) pour les
développeurs Java non expérimentés je ferai la démonstration avec NetBeans 6.5 qui par sa
maniabilité de génération de client web service est relativement simple.


Après avoir lancé NetBeans

allez dans le menu «

Tools

» puis «

Plugins

»,
il faut sélectionner

l’onglet
«

Available Plugins

».

Dans cet

onglet
,

nous allons sélectionner

le
plugin «

Web Services

» et cliquer sur

«

Install

» (si le
plugin
n’
est pas disponible
, il faut mettre à jour
le catalogue en cliquant sur

«

Reload Catalog

» ou
dans l’
onglet «

Settings

» en sélectionnant

tous les «

Update Centers

»
.

Ensuite, aller dans le menu, puis «

New Project

», sélectionnez «

Java

» dans «

Categories

:

» de
projet, puis «

Java Application

»
dans la list «

Projects

:

».

Etape suivante

: faire «

Next

» et pour le champ «

Project Name

» remplir par

ConversionServiceConsume

puis faire «

Finish

».

Faire ensuite un clic droit sur notre projet puis «

New

»


«

Web Service Client

»

















Dotnet

France Association


Adrien Ruffié




9

WCF et intéropabilité avec JAVA

Dans la fenêtre qui vient de s’ouvrir, seléctionner

«

WSDL URL

» et entrer

l’url où n
otre web service
WCF à publié le WSDL:


Note de l’auteur

(Retour d’expérienc
e)

: T
ravaillant depuis environ deux ans dans les systèmes
distribués, je vous conseille d’étu
dier toutes les problématiques liées à l’architecture où sera déployée
votre application. Certains problèmes récurrents et couteux en perte de temps apparaissent dans les
systèmes massivement distribués, ici un bon exemple est

:

L’adresse du WSDL est à

:
http://localhost:50855/ConversionService.svc?wsdl


Si vous testez cette exemple comme moi en hébergent le service WCF sur un ordi et le consommateur
Java sur un autre, lorsque vous passerez cet
te adresse la machine où le client Java est présent
pensera que le localhost est en réalité lui
-
même donc cherchera le wsdl sur son port machine 50855
alors qu’il n’y est pas …

Pour pallier à cela remplacez le

localhost de l’adresse par l’IP

de l’ordinateu
r ou le service WCF est
hébergé exemple avec 192.168.1.10

:
http://192.168.1.10:50855/ConversionService.svc?wsdl

Sachant que vous pourriez aussi rencontrer des problèmes du style firewall,
port inaccessib
le, sous
-
réseaux, résolution DNS

si vous précisez un nom

d’hôte au lieu d’une adresse IP



Après avoir pris conscience des problèmes possible et avoir ajusté l’adresse du WSDL, cliquez sur
«

Finish

».










Dotnet

France Association


Adrien Ruffié




10

WCF et intéropabilité avec JAVA

N
otre projet devrait ressembler à
ceci

:


Dans n
otre classe Main.java, dans la fonction
«

main

» il faut écrire
les lignes suivantes

:


Ces lignes nous permettront

de récupérer le service WCF que
l’on veut appeler
, ensuite le port de
l’endpoint où l’appel sera envoyé pour consommer du se
rvice.

Puis ensuite afficher le r
ésultat d’un conversion d’euro en

dollar en invoquant l’opération de
conversion mise à disposition par le contrat de service, ici «

eurIntoUSDConversion

».





Dotnet

France Association


Adrien Ruffié




11

WCF et intéropabilité avec JAVA

Lançons maintenant l’application en cliquant sur le bouton «

Run

»

:


Nous obtenons maintenant le résultat suivant

:


Avec pour 10.0 € un retour de 13.6039 $
.






















Dotnet

France Association


Adrien Ruffié




12

WCF et intéropabilité avec JAVA

3

Conclusion


Le but de ce document n’était pas de faire polémique entre Java, .Net, PERL … ou n’importe quel
autre langage de développement, mais
nous avons

voulu
f
aire prendre c
onscience que dans la
période où

nous nous trouvons
, tellement d’applications ont

été dév
eloppées dans

différents
langage que, la communication entre ces applications sera l’un des points important
s

des
architectures distrib
uées.

Dans les futures décennies
,

le problème sera aussi la communication entre les nouvelles applications
qui seront développ
ées

et les systèmes
«

legacy

»

hérité
s

des années 80
-
90 qui couterai trop cher à
redévelopper dans les langages de nouvelle génér
ation.

Etant un fervent défenseur de

SOA et que les web services étant l’une de ses grandes parties,
l’interopérabilité entre les différents langages et application
s

n’est pas total. Le Basic Profile, W3C,
WSIT on

écrit des spécifications traita
nt d
es prob
lèmes d’interopérabilité
, sur lesquels
il serait
possible de faire un livre de plusieurs centaines de pages
. Différents problèmes d’interopérabilité
peuvent être par exemple que en Java les long, double …
sont plus volumineux que en .NET
, je vous
consei
l
l
e

de vivement
, et

dès le moindre problème d’interopérabilité
,

d’aller mettre le nez dans
les
specs, posts et autres de ces

organisme
s

pour éviter de perdre le moins de temps possible.


Remarque: j'ai volontairement utilisé NetBeans, car étant plus
«

user fr
iendly

»

pour les non java
users, il permet en quelques clics de réaliser les étapes précédentes, sinon beaucoup de gens
auraient vite lâché le sujet avec Eclipse.