Dans cet exercice déjà étudié de nombreuses fois, le serveur renvoie les résultats au client sous la forme d'un flux XML.
Le service web de calcul de l'impôt écrit précédemment a une architecture en couches :
Dans l'exemple précédent, le service web envoyait à ses clients l'une des deux lignes suivantes :
1.
2.
<erreur>message d'erreur</erreur>
<impot>montant de l'impôt</impot>
Ce n'est pas un document XML bien formé car il n'a pas de balise racine. Le nouveau service web enverra sa réponse sous la forme suivante :
1.
<reponse><erreur>message d'erreur</erreur></reponse>
Ou
1.
<reponse><impot>montant de l'impôt</impot></reponse>
Dans les deux cas, la réponse est un document XML bien formé qui peut être exploité par le module [simpleXML].
Dans le schéma à trois couches, seule la couche [web] doit être modifiée. Son code [impots_05B_web] devient le suivant :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
<?php
require_once "impots_05_metier.php"
;
ini_set("display_errors"
,
"off"
);
header("Content-Type: text/plain; charset=utf-8"
);
$HOTE
=
"localhost"
;
$PORT
=
3306
;
$BASE
=
"dbimpots"
;
$USER
=
"root"
;
$PWD
=
""
;
session_start();
if
(!
isset($_SESSION
[
'metier'
]
)) {
try
{
$_SESSION
[
'metier'
]
=
new
ImpotsMetier(new
ImpotsDaoWithMySQL($HOTE
,
$PORT
,
$BASE
,
$USER
,
$PWD
));
}
catch
(ImpotsException $ie
) {
print
"<reponse><erreur>Erreur : "
.
utf8_encode($ie
->
getMessage() .
"</erreur></reponse>"
);
exit;
}
}
$metier
=
$_SESSION
[
'metier'
];
$params
=
utf8_encode(htmlspecialchars(strtolower(trim($_POST
[
'params'
]
))));
$items
=
explode(","
,
$params
);
if
(count($items
) !=
3
) {
print
"<reponse><erreur>[
$params
] : nombre de paramètres invalides</erreur></reponse>
\n
"
;
exit;
}
$marié
=
trim($items
[
0
]
);
if
($marié
!=
"oui"
and
$marié
!=
"non"
) {
print
"<reponse><erreur>[
$params
] : 1er paramètre invalide</erreur></reponse>
\n
"
;
exit;
}
if
(!
preg_match("/^
\s
*(
\d
+)
\s
*$/"
,
$items
[
1
],
$champs
)) {
print
"<reponse><erreur>[
$params
] : 2ième paramètre invalide</erreur></reponse>
\n
"
;
exit;
}
$enfants
=
$champs
[
1
];
if
(!
preg_match("/^
\s
*(
\d
+)
\s
*$/"
,
$items
[
2
],
$champs
)) {
print
"<reponse><erreur>[
$params
] : 3ième paramètre invalide</erreur></reponse>
\n
"
;
exit;
}
$salaire
=
$champs
[
1
];
$impôt
=
$metier
->
calculerImpot($marié
,
$enfants
,
$salaire
);
print
"<reponse><impot>
$impôt
</impot></reponse>
\n
"
;
exit;
Le format de la réponse du service web est modifiée aux lignes 35, 47, 53, 58, 64 et 71.