EXAMEN
Semestre : 1 2
X
Session : Principale
X
Unité d’enseignement : Architecture N-tiers ………………………………………
Modules : Famework Spring - Architecture N-tiers .NET - Architecture Orientée Service « SOA »
Classe(s) : 4INFOB
Nombre de questions : 42 questions
Documents autorisés : OUI NON Nombre de pages : ..
X
Calculatrice autorisée : OUI NON Internet autorisée : OUI NON
X
X
Date : …02/07/2020……………… Heure ...........10h45....... Durée :....1h30.....
Intitulé UE
Intitulé module
ECTS module
Architecture N-tiers
Framework SPRING
Architecture N-tiers .NET
Architecture Orientée Service « SOA »
3
3
3
Partie I : Framework Spring [14 questions]
[Spring Boot - Spring Core - Spring Data JPA - Spring MVC REST - Log4J -AOP – JSF]
Toutes les questions sont à réponse unique.
1 : On se propose de mettre en place une application de gestion
d’une auto-école.
Ci-dessous, le diagramme de classes.
- L’association bidirectionnelle Candidat-Examen
indique qu’un candidat peut passer plusieurs
examens et qu’un examen peut être passé par un seul
candidat à une date donnée.
- L’association
Candidat-
SeanceDeFormation indique qu’un candidat peut
assister à une ou plusieurs séances de formation.
bidirectionnelle
- L’énumération doit être stockée en tant que
chaîne de caractères dans la base.
D'après le diagramme de classes, quel est le nombre de
tables générées ? (/1pt)
A. 3
B. 4
C. 5
D. 6
- Les identifiants sont auto-générés avec la stratégie
«IDENTITY».
1/17
2 : Compléter QI.2. (/1pt)
@Entity
public class Candidat implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idCd;
private String login;
private String pwd;
private int budgetFormations;
QI.2. ….
@OneToMany(mappedBy="candidat")
List <Examen> examens;
}
A. @OneToMany(mappedBy="candidat")
B. @ManyToOne(mappedBy="candidat")
C. @OneToMany
D. @ManyToOne
3 : Compléter QI.3. (/1pt)
@Entity
public class Examen implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENT
ITY)
private int idEx;
@Temporal(TemporalType.DATE)
private Date dateExamen;
@Enumerated(EnumType.STRING)
Type type;
@ManyToOne
QI.3. ….
Candidat candidat; }
A. private List <Candidat> candidats;
B. private Candidat candidat;
C. a et b sont possibles
D. Aucune réponse
4 : Les services sont les suivants. Tous les services sont exposés avec Spring REST MVC.
Compléter QI.4. (/1pt)
public interface ICandidatService {
public void ajouterCandidat(Candidat candidat);
public void affecterExamenACandidat(int cdId, int exId);
public void affecterSeanceDeFormationACandidat(int cdId, int idex);
public List<SeanceDeFormation> listerFormations(int cdId);
public Candidat getCandidatByLoginAndPassword(String login, String password) ;
public void reussirExamen(int idex);
public List<Examen> listerExamens(int cdId);
public void desaffecterSeanceDeFormationACandidat(int idcd, int idsf);}
@RestController
public class RestControlCandidat {
@Autowired
ICandidatService icandidatservice;
@Autowired
IExamService iexamenservice;
@Autowired
ISeanceDeFormation iseanceformation;
// http://localhost:8083/affecterExamenACandidat/1/1
@PutMapping(value = "/affecterExamenACandidat/{idcdt}/{idex}")
QI.4. ….
public void affecterExamenACandidat(@PathVariable("idcdt")int cdId,
@PathVariable("idex")int exId) {
icandidatservice.affecterExamenACandidat(cdId, exId);}}
2/17
A. @PostMapping
B. @PutMapping
C. @GetMapping
D. @DeleteMapping
5 : Service : Nous allons affecter une séance de formation, pour laquelle on a des places disponibles,
au candidat Ali selon le type de son examen et à une date antérieure à sa date d’examen. Après
affectation, nous allons mettre jour les places disponibles et le budget du candidat.
En premier lieu, nous avons besoin de chercher la formation correspondante. Compléter QI.5. (/1pt)
@Repository
public interface CandidatRepository extends CrudRepository<Candidat, Integer> {
@Query("Select sf from SeanceDeFormation sf where sf.type=:typeex and")
public SeanceDeFormation getSeanceDeFormation( @Param( "typeex") Type
QI.5
typeex,@Param ("d") Date d);
}
A. Select SeanceDeFormation sf where sf.type=:typeex and sf.dateSeance<:d and sf.nbPlaceLibre>0
B. Select sf from SeanceDeFormation sf where sf.type=:typeex or sf.dateSeance<:d or
sf.nbPlaceLibre>0
C. Select sf from SeanceDeFormation sf where sf.type=:typeex and sf.dateSeance<:d and
sf.nbPlaceLibre>0
D. Aucune réponse n’est correcte.
6 : Compléter QI.6. (/1pt)
@Repository
public interface CandidatRepository extends CrudRepository<Candidat, Integer> {
@Query("Select sf from SeanceDeFormation sf where sf.type=:typeex ")
public SeanceDeFormation getSeanceDeFormation( @Param ("typeex") Type
QI.6
typeex,@Param ("d") Date d);
QI.6
}
A. @PathVariable
B. @Param
C. @QueryParam
D. @ParamQuery
3/17
7 : Authentification (login.xhtml): Le formulaire accepte un login
et un mot de passe, affiche un message d’erreur en cas d’une
éventuelle erreur d’identification et oriente l’utilisateur vers son
espace.
Espace Utilisateur (welcome.xhtml) : Après authentification,
l’utilisateur peut visualiser ses formations. Il peut aussi refuser une
formation. L’accès à cette page est sécurisé en utilisant un filtre
d’authentification.
Étant donné ce Controller, compléter QI.7. (/1pt)
@Scope(value = "session")
@Component(value = "candidatController")
@ELBeanName(value = "candidatController")
@Join(path = "/", to = "/login.jsf")
@Controller
public class IControllerCandidatImpl {
@Autowired
ICandidatService icandidatservice;
private String login;
private String pwd;
private Candidat candidat;
private Boolean loggedIn;
public String dologin() {
String navigateTo = "null";
candidat=icandidatservice.getCandidatBy
LoginAndPassword(login, pwd);
if (candidat != null ) {
navigateTo = "/welcome.xhtml?faces-redirect=true";
loggedIn = true; } return navigateTo; } }
4/17
login.xhtml
<h:form id="form">
<b>Connexion</b>
<h:panelGrid columns="2">
<h:outputText value="Login" />
<h:inputText
value="#{candidatController.login}" />
QI.7
<h:outputText value="Mot de passe" />
<h:inputSecret
value="#{candidatController.pwd}" />
<h:commandButton id="btn" value="Connexion"
Publicité
action="#{candidatController .dologin}" />
<h:message for="btn"/>
</h:panelGrid>
</h:form>
QI.7
QI.7
A. candidatController
B. iControllerCandidatImpl
C. IControllerCandidatImpl
D. Réponses b et c
8 : Voici une partie du code de welcome.xhtml.
Compléter QI.8. (/1pt)
<h:panelGroup>
<h:form>
<h:outputText value="Bonjour #{candidatCo}"
/>
<b>Bienvenue à ton espace.</b>
<b>Voici tes formations planifiées. </b>
<br />
<h:dataTable value="#{candidatController.
listerFormations(1)}" var="sf">
<h:column>
<f:facet name="header">
<h:outputText value="Date" />
</f:facet>
<h:outputText value="#{sf.dateSeance }"/>
</h:column>
……….
</h:dataTable>
QI.8
<h:commandLink value="Déconnexion" action=
"#{candidatController.doLogout()}" />
</h:form>
</h:panelGroup>
A. Formation.dateSeance
B. sf.dateSeance
C. candidatController.dateSeance
D. Aucune réponse
9 : Nous avons ajouté un filtre d’authentification à notre application. Compléter QI.9. (/1pt)
public class LoginFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest= (HttpServletRequest)request;
HttpServletResponse hresponse= (HttpServletResponse)response;
IControllerCandidatImpl candidatcontroller=(IControllerCandidatImpl)
hrequest.getSession().getAttribute("candidatController");
if(candidatcontroller!=null && candidatcontroller.getLoggedIn())
{chain.doFilter(request, response);}
QI.9
else
{ hresponse.sendRedirect(hrequest.getContextPath()+"/");
}
}
}
A. chain.doFilter(request, response);
B. request.doFilter(request, response);
C. response.doFilter(request, response);
D. Aucune réponse n’est correcte.
10 : Nous avons ajouté à notre projet un aspect qui calcule et affiche dans les logs le temps d’exécution
de chaque méthode des services. Compléter QI.10 (/1pt).
@Component
@Aspect
public class PerformanceAspect {
private static final Logger logger =
LogManager.getLogger(PerformanceAspect.class);
QI.10
@Around("execution( tn.esprit.spring.services..*(..))")
public Object profile(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object out=pjp.proceed();
long elapsedTime = System.currentTimeMillis() - start;
logger.info("Method execution time: " + elapsedTime + "
milliseconds.");
return out;
}}
A. @Before("execution( tn.esprit.spring.services..*(..))")
5/17
B. @After("execution( tn.esprit.spring.services..*(..))")
C. @Around("execution( tn.esprit.spring.services..*(..))")
D. A et B
11 : Erreur1 : C'est quoi la cause de cette erreur ? Le
développeur a oublié de mettre (/1pt):
Caused by: org.hibernate.AnnotationException:
@OneToOne or @ManyToOne on
tn.esprit.spring.entities.Examen.candidat references an
unknown entity: tn.esprit.spring.entities.Candidat
A. @Id
B. @Entity
C. @OneToMany
D. @ManyToOne
12 : Erreur 2 : C’est quoi la cause la plus problable de cette
erreur ? (/1pt)
com.mysql.cj.jdbc.exceptions.CommunicationsException:
Communications link failure
The last packet sent successfully to the server was 0
milliseconds ago.
The driver has not received any packets from the server.
At com.mysql.cj.jdbc.exceptions.SQLError.
createCommunicationsException(SQLError.java:174)
~[mysql-connector-java-8.0.18.jar:8.0.18]
A. Le développeur a oublié de créer la base de données.
B. Le développeur a oublié d’annoter les entités par
l’annotation @Entity
C. Le développeur a mis un numéro de port erroné pour
l’accès au serveur de données
D. Aucune réponse n’est correcte
13 : Erreur 3 : C’est quoi la cause de cette erreur ? (/1pt)
Description:
Field icandidatservice in
tn.esprit.spring.controller.RestControlCandidat
required a bean of type
'tn.esprit.spring.services.ICandidatService'
that could not be found.
The injection point has the following
annotations:
@org.springframework.beans.factory.annotation.
Autowired(required=true)
Le développeur a oublié d’annoter la classe
A.
RestControlCandidat par l’annotation @RestController
Le développeur a oublié d’annoter
l’objet
B.
ICandidatService icandidatservice ; par
l’annotation @Autowired
C.
CandidatServiceImpl par l’annotation
@Service
a et b
D.
Le développeur a oublié d’annoter la classe
14 : Erreur 4 : C’est quoi la cause de cette erreur ? (/1pt)
javax.el.PropertyNotFoundException: Target Unreachable,
identifier [candidatControllerTest] resolved to null
at org.apache.el.parser.AstValue.getTarget
(AstValue.java:74) ~[tomcat-embed-el-9.0.27.jar:9.0.27]
at org.apache.el.parser.AstValue.getType
(AstValue.java:58) ~[tomcat-embed-el-9.0.27.jar:9.0.27]
at org.apache.el.ValueExpressionImpl.getType
(ValueExpressionImpl.java:174) ~[tomcat-embed-el-
9.0.27.jar:9.0.27]
A. Le développeur a oublié de vider le dossier Target
B. Le développeur a oublié de créer le dossier Target
C. Le développeur a mis un nom erroné de son
Controller
D. Aucune réponse n’est correcte.
6/17
Partie II : Architecture N-tiers .NET [14 questions]
On se propose d’implémenter une application web de covoiturage. La figure ci-dessous illustre une
version simplifiée du diagramme de classe de l’application.
Question 15 (/1pt)
Choisir
personnalisées EF Code-First.
la bonne définition des conventions
A. C’est un ensemble de règles par défaut pour
construire un modèle basé sur des classes du
domaine.
B. C’est un ensemble de règles qui peuvent être
appliquées à l'aide de Data Annotations et
Fluent API.
C. C’est un ensemble de règles qui remplacent
les comportements par défaut de EF Code-
First.
D. C’est un ensemble de règles personnalisées
qui ne peuvent pas être remplacées.
Question 16 (/1pt)
Selon les conventions par défaut de EntityFramework,
quelle(s) propriété(s) de la classe “Passager” sera
mappée(s) dans une colonne obligatoire (not null) ?
A. DateNaissance
B. Nom
C. Téléphone
D. A et C
Question 17 (/1pt)
Comment créer une convention personnalisée qui
permet de configurer les propriétés qui commencent
par Id comme étant des clés primaires ?
A. Properties().Where(p => p.Name ==
"Id*").Configure(p => p.IsKey());
B. Properties().Where(p => p.Name ==
"Id_").Configure(p => p.IsKey());
C. Properties().Where(p =>
p.Name.StartsWith("Id")).Configure(p =>
p.IsKey());
D. Properties().Where(p =>
p.Name.BeginsWith("Id")).Configure(p =>
p.IsKey());
Question 18 (/1pt)
Publicité
On souhaite créer une classe de configuration pour
configurer la relation entre les entités «Passager» et
«Trajet» en spécifiant «Participation» comme nom de
la table d’association. Choisir la bonne alternative.
A. HasMany(p=>p.Trajets).WithMany(t=>t.Pas
sagers).Map(a=>a.ToTable("Participation"));
7/17
B. HasMany(p=>p.Trajets).WithMany(t=>t.Pas
Question 22 (/1pt)
sagers).ToTable("Participation");
C. HasMany(p=>p.Trajets).WithRequired(t=>t.
Passagers).Map(a =>
a.ToTable("Participation"));
D. HasMany(p=>p.Trajets).WithOptional(t=>t.P
assagers).ToTable("Participation")
Question 19 (/1pt)
La propriété «DateNaissance» de la classe Passager
doit être une date valide, quelle est l'annotation
correcte à utiliser dans ce cas ?
A. [DataType(DataType.Date)]
B. [DataType(DataType.DateTime)]
C. [DateTime]
D. [Date]
Question 20 (/1pt)
Que se passera-t-il si on spécifie le paramètre
"name=Covoiturage" dans le constructeur de base
d'une classe de contexte ?
A. EF créera la base de données nommée
“Covoiturage” dans le serveur SQL local
sous l’instance (Localdb)\MSSQLLocalDB.
B. EF créera la base de données avec le même
nom que le nom de la classe contexte.
C. EF créera la base de données nommée
"Covoiturage" dans le serveur MySQL local.
D. EF utilisera la chaîne de connexion nommée
“Covoiturage” définie dans le fichier de
configuration pour créer la base de données.
Question 21 (/1pt)
Suite à l’exécution de la commande Add-Migration,
un fichier de migration est généré contenant deux
méthodes Up() et Down(). Quelle est l’utilité de la
méthode Up()?
A. Assurer la création de toutes les tables de la
base de données ainsi que les colonnes et les
ForeignKeys.
B. Assurer la synchronisation entre le modèle
objet et le modèle relationnel.
C. Annuler les anciennes migrations.
D. Ajouter les champs non mappés dans la base
de données.
Le patron de conception unité de travail (unit of work)
permet de :
A. Instancier le contexte seulement
B. Sauvegarder
les données dans
la base
uniquement
C. Sauvegarder les données et fournir une
instance du RepositoryBase
D. Supprimer les données non managées
Question 23 (/1pt)
Dans la couche service, une classe de service
spécifique offre un ensemble de méthodes. Choisir la
description la plus adéquate de ces méthodes.
A. Des méthodes de base pour une entité
particulière.
B. Des méthodes spécifiques pour une entité
particulière.
C. A et B.
D. Des méthodes spécifiques pour toutes les
entités.
Question 24 (/1pt)
Dans la classe “TrajetService”, on souhaite récupérer
les 3 Trajets les plus chers. Choisir la bonne
alternative.
A.
public IEnumerable<Trajet>
GetMostExpensiveTrajets(){
var req = from t in GetMany() orderby t.Prix
descending select t;
return req.Take(3);}
B.
public IEnumerable<Trajet>
GetMostExpensiveTrajets(){
return
GetMany().OrderBy(t=>t.Prix).Reverse().Take(3); }
C.
public IEnumerable<Trajet>
GetMostExpensiveTrajets(){
return
GetMany().OrderByDescending(t=>t.Prix).Take(3);}
8/17
D. Tout ce qui précède
Question 25 (/1pt)
L’URL suivante http://localhost:51644/ (avec 51644
un numéro de port aléatoire) lance :
A. L’action
Index
du
contrôleur
“HomeController”
B. Une page vide
C. L’action Index du premier contrôleur crée
D. Une exception
Question 26 (/1pt)
Dans la vue de création de Trajets, on a implémenté
une liste déroulante qui permet de récupérer les noms
des différents Conducteurs afin de les associer au
Trajet, à travers l’instruction suivante :
@Html.DropDownListFor (model =>
model.ConducteurFk,
new SelectList
(ViewBag.Conducteurs,"IdConducteur","Nom
"))
Quelle serait l’implémentation correcte qui devrait y
correspondre dans le controlleur, sachant que “st” est
une instance de la classe “ServiceTrajet” ?
A.
// GET: Trajet/Create
public ActionResult Create(){
ViewBag.ListeConducteurs =
st.GetMany();
return View();
}
B.
// POST: Trajet/Create
[HttpPost]
public ActionResult Create(){
ViewBag.Conducteurs =
st.GetMany();
return View();
}
C.
// GET: Trajet/Create
public ActionResult Create(){
ViewBag.Conducteurs =
st.GetMany();
return View();
}
D.
// GET: Trajet/Create
public ActionResult Create(){
return View(ViewBag.Conducteurs );
}
Question 27 (/1pt)
Dans le contrôleur “ConducteurController” on a
implémenté la méthode “Create” qui permet d’ajouter
un nouveau conducteur.
Quelle est l'implémentation correcte pour réaliser cette
action, sachant que “sc” est une instance de la classe
“ServiceConducteur”?
A.
// GET: Conducteur/Create
public ActionResult Create(Conducteur c){
if (ModelState.IsValid){
sc.Add(c);
sc.Commit();
return RedirectToAction("Index");
}
return View(c);
}
// POST: Conducteur/Create
[HttpPost]
public ActionResult Create() {
return View();}
B.
// GET: Conducteur/Create
public ActionResult Create(Conducteur c){
if (ModelState.IsValid){
sc.Add(c);
sc.Commit();
return RedirectToAction("Index");
}
return View();
}
// POST: Conducteur/Create
[HttpPost]
public ActionResult Create(Conducteur c){
return View(c);}
C.
// GET: Conducteur/Create
public ActionResult Create(){
return View();
}
// POST: Conducteur/Create
9/17
{
return View(Title = "Création Conducteur");
Publicité
}
public ActionResult Create(Conducteur c){
if (ModelState.IsValid){
sc.Add(c);
sc.Commit();
return RedirectToAction("Index");
}
return View(c);}
D.
// GET: Conducteur/Create
public ActionResult Create(){
return View();
}
// POST: Conducteur/Create
[HttpPost]
public ActionResult Create(Conducteur c){
if (ModelState.IsValid) {
sc.Add(c);
sc.Commit();
return RedirectToAction("Index");
}
return View(c);}
Question 28 (/1pt)
A partir du contrôleur “ConducteurController”, on se
propose de modifier le titre de la vue “Create” à
“Création Conducteur”. Choisir la bonne alternative.
A.
public ConducteurController()
{
ViewBag.Title = "Création Conducteur";
}
B.
public ConducteurController()
{
@{ ViewBag.Title = "Création Conducteur";}
}
C.
public ActionResult Create(int id)
{
ViewBag.Title = "Création Conducteur";
return View();
}
D.
public ActionResult Create(int id)
10/17
Partie III : Architecture Orientée Service « SOA » [14 questions]
29. Quelle caractéristique est erronée par rapport à un service web ? (/1pt)
A. Autonome
B. Intégrable
C. Composable
D. Configurable
30. Indiquer la déclaration correcte relative à SOA : (/1pt)
A. L'architecture orientée services (SOA) décrit une méthode standard pour demander des services à
partir de composants distribués et gérer les résultats.
B. SOA fournit la couche de traduction et de gestion dans une architecture qui supprime la barrière pour
un client qui obtient les services souhaités.
C. Avec SOA, les clients et les composants peuvent être écrits dans différents langages et peuvent utiliser
plusieurs protocoles de messagerie.
D. Tout ce qui précède
31. Soit l’objet Java suivant (XML) :
@XMLRootElement(name = “Resa”)
public class Reservation
@XMLAttribute(name = “ResaNumber”, required=false)
public int reservationNumber;
public String villeDepart;
@XMLElement(name = “villeArrivee”)
public String destination;
@XMLTransient
public String passportID;
Quel est le document XML qui lui correspond ? (/1pt)
A. <Resa>
<resaNumber>1234567</resaNumber>
<villeDepart>Tunis</villleDepart>
<destination>Paris</destination>
</Resa>
C. <Resa>
<resaNumber>1234567</resaNumber>
<villeDepart>Tunis</villleDepart>
<passportId>ABCDE</passportId>
<villeArrivee>Paris</destination>
</Resa>
B. <Resa>
<villeArrivee>Paris</villleArrivee>
<resaNumber>1234567</resaNumber>
<villeDepart>Tunis</villleDepart>
</Resa>
D. <Reservation resaNumber = “TUN999”>
<villeArrivee>Paris</destination>
<villeDepart>Tunis</villleDepart>
<resaNumber>1234567</resaNumber>
</Reservation>
11/17
32. Soit le document XML suivant :
Veuillez choisir la bonne réponse. (/1pt)
A. 'name' a trois éléments enfants
B. Ce n’est pas un XML bien formé
C. Ceci est un XML bien formé mais ce n'est peut-être pas un XML valide
D. L’élément 'employees' possède deux éléments enfants.
33. Soit l’élément XML suivant de type « montantType »: <montant devise="dinars">1000</prix>. On veut
étendre ce type pour lui ajouter un nouvel attribut « destinataire » de type string :
<montant devise="dinars" destinataire="Khaled">1000</prix>
Quelle est la déclaration XSD correcte ? (/1pt)
A. <xs:complexType name="DetailsType">
<xs:simpleContent>
<xs:extension base="montantType">
<xs:element name="destinataire"
type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
B. <xs:complexType name="DetailsType">
<xs:complexContent>
<xs:extension base=" montantType ">
<xs:element name=" destinataire"
type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
C. <xs:complexType name="DetailsType">
<xs:simpleContent>
<xs:extension base=" montantType ">
<xs:attribute name=" destinataire"
type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
D. <xs:complexType name="DetailsType">
<xs:complexContent>
<xs:extension base=" montantType ">
<xs:attribute name=" destinataire"
type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
34. Soit le document XML suivant :
<researchAssistant employeeNo=”134234”>
<FN>Dominik</FN>
<email>[email protected]</email>
</researchAssistant>
12/17
Veuillez choisir la grammaire XSD correcte ? (/1pt)
A. <xs:complexType name="researchAssistantType"
>
<xs:sequence>
<xs:element name="FN" type ="rs:FNType"/>
<xs:element name="employeeNo" type="xs:integer"/>
<xs:element name="email" type ="rs:emailType"/>
</xs:sequence>
B. <xs:complexType
name="researchAssistantType" >
<xs:sequence>
<xs:element name="FN" type ="xs:String"/>
<xs:element name="employeeNo"
type="xs:integer"/>
<xs:element name="email" type ="rs:emailType"/>
</xs:complexType>
</xs:sequence>
</xs:complexType>
C. <xs:complexType name="researchAssistantType"
>
<xs:sequence>
<xs:element name="FN" type ="xs:String"/>
<xs:element name="email" type ="rs:emailType"/>
</xs:sequence>
<xs:attribute name="employeeNo"
type="xs:integer"/>
</xs:complexType>
<xs:simpleType name="rs:emailType"/>
<xs:restriction base="xs:string">
<xs:pattern value= "[a-z]@[a-z] " />
</xs:restriction>
</xs:simpleType>
D. <xs:complexType
name="researchAssistantType" >
<xs:sequence>
<xs:element name="FN" type ="xs:String"/>
<xs:element name="email" type
="rs:emailType"/>
</xs:sequence>
<xs:attribute name="employeeNo"
type="xs:integer"/>
</xs:complexType>
<xs:simpleType name="rs:emailType"/>
<xs:restriction base="xs:string">
<xs:pattern value= "[A-Z]@[a-z] " />
</xs:restriction>
</xs:simpleType>
35. Une compagnie spécialisée dans l’électronique a déployé une application en ligne afin d’améliorer la qualité de
Publicité
ses services sous forme d’un service web basé sur XML et composé de plusieurs questions associées à chaque
produit.
@XMLRootEelement (6)
public class Question{
private int id;
private String texte;
private String reponse;
@XMLAttribute(name=”ques
tionID”, required= “false”) (7)
public String getId(){
1.
@XMLRootEelement (1)
public class Produit{
private int code;
private String nom;
private String categorie ;
private List<Question> questions;
@XMLTransient (2)
public int getCode(){
return code;}
@XMLElement() (3)
public String getNom(){
return nom;}
@XMLAttribute(name=”categorie”,
required = “true”) (4)
public String getCategorie(){
return categorie;}
@XMLElement(name=”questions”) (5)
public List<Question> getQuestions(){
2.
3.
4.
5.
6.
7.
8.
13/17
Un exemple XML obtenu est le suivant :
<Produit categorie = "Accessoires">
<nom>Fours</nom>
<questions>
<Question questionID = "123">>
<texte>Etes-vous satisfait par ce produit ? </texte>
<reponse>Oui</reponse>
</Question>
<Question>
<texte>Souhaitez-vous nous revisiter dans l’avenir ? </texte>
<reponse>Oui</reponse>
</Question>
</questions>
<categorie>Accesoires</categorie>
</collection>
</Produit>
Parmi les annotations suivantes identifiées par les numéros (1), (2), (3), (4), (5), (6), (7), lesquelles sont
obligatoire ? (/1pt)
A. (1), (2), (4), (6), (7)
B. (1), (2), (4), (5), (6)
C. (1), (2), (3), (4), (5), (6), (7)
D. (1), (2), (4), (5), (6), (7)
36. Une entreprise vise à déployer un service Web basé sur XML pour améliorer la gestion de ses employés.
@XMLRootEelement(1)
public class Employee{
private int cin;
private String nom;
private String service ;
private long numTel;
@XMLAttribute(name=”id”, required=true) (2)
public int getCin(){
return cin;}
@XMLElement(required=false) (3)
public String getNom(){
return nom;}
@XMLElement (4)
public String getService(){
return service;}
@XMLTransient (5)
public long getNumTel(){
return numTel;}
}
14/17
Veuillez choisir la bonne proposition (/1pt).
A. <employee cin=”07891123”>
<service>marketing</ service >
<numTel>2355687</ numTel >
</employee>
C. <employee id=”07891123”>
<nomEmp>siwar </ nomEmp>
<service>marketing</ service >
<numTel>2355687</ numTel >
</employee>
B. <employee id=”07891123”>
<service>marketing</ service >
</employee>
D. <employee id=”07891123”>
<nomEmp>siwar </ nomEmp>
<service>marketing</ service >
</employee>
37. Dans l’objectif d’améliorer la collaboration entre ses personnels, la société ValueIT souhaite ajouter à son portail
un agenda numérique exposé comme un service Rest. Le service Web fournit plusieurs fonctionnalités de
l’agenda conformément aux spécifications suivantes : (/1pt)
- Ajouter un événement
o http://server:port/agenda/calendar/event
- Lister les événements d’une journée
o http://server:port/ agenda/calendar/event/{jour}/{mois}/{annee}
- Modifier la description d’un événement
o http://server:port/ agenda/calendar/event?id=?
Quelle proposition est correcte ? (/1pt)
A. « event » est défini au niveau de la classe d’activation et permet de configurer l’application contenant le
service web
B. « calendar » est défini au niveau de la ressource et permet d’accéder à différentes méthodes exposées par
le service web
C. Les attributs du jour, du mois et de l’année saisies pour lister les évènements d’une journée sont récupérés
de l’URL à l’aide de plusieurs annotations @PathParam
D. L’attribut « id » pour modifier la description d’un évènement est récupéré de l’URL à l’aide de
l’annotation @PathParam
38. Un développeur se met au développement d’une nouvelle application et doit décider du style d’architecture de
services web (SOAP ou REST) qui serait le choix approprié. Quelle proposition est correcte ? (/1pt)
A. Les services REST sont utiles pour des terminaux ayant une faible bande passante (PDAs, téléphone
mobile...)
B. Les services REST peuvent traiter des exigences non fonctionnelles complexes (comme les transactions,
sécurité)
C. Les services REST exposent des contrats formalisés (comme les messages, les opérations, protocoles et
adresses du service web)
D. Les services REST gèrent les traitements asynchrones
39. Qu'est ce qui est faux dans une définition WSDL? (/1pt)
A. Par défaut, si on ne mentionne pas de TargetNameSpace, le nom du package sera affiché
B. On ne peut pas avoir plusieurs Portypes dans un même contrat WSDL
C. On peut avoir plusieurs ports dans un même contrat WSDL
D. HTTP et SMPT sont les seules protocoles de transports acceptés
15/17
40. Un problème technique a endommagé le serveur qui contenait des contrats de service. La définition en WSDL
pour un service postal a été récupérée, sauf pour l'élément portType, qui n'a été que partiellement récupéré.
<definitions name="Postal"
targetNamespace="http://www.examples.org/wsdl/postal"
xmlns:tns="http:// www.examples.org /wsdl/postal"
xmlns:post="http:// www.examples.org /postal"
xmlns="http://www.schemas.xmlsoap.org/wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<types>
<xsd:schema targetNamespace="http://www.example.org/wsdl/postal">
<xsd:import namespace="http://www.example.org/wsdl/postal" schemaLocation="postal.xsd" />
</xsd:schema>
</types>
<message name="PostalLookup">
<part name="request" element="post:postalLookup"/>
</message>
<message name="PostalLookupResponse">
<part name="response" element="post:postalLookupResponse"/>
</message>
(???)
<binding name="PostalLookupBinding" type="tns: PostalLookupInterface">
…
</binding>
</definitions>
Les symboles (???) indiquent l’emplacement des données qui manquent. Choisir la bonne proposition qui complète
cette description : (/1pt)
A. <portType name="PostalLookupInterface">
<operation name=" PostalLookupOperation ">
<input message=" tns: PostalLookupMessage" name="PostalLookup"/>
<output message="tns: PostalLookupResponseMessage" name="PostalLookup"/>
</operation>
</portType>
B. <portType name="PostalLookupInterface">
<operation name=" PostalLookup">
<input message=" tns : PostalLookup" name="PostalLookup"/>
<output message="tns: PostalLookupResponse" name="PostalLookupResponce"/>
</operation>
</portType>
C. <portType name="PostalLookupPortType">
<operation name=" PostalLookup ">
<input message=" tns: PostalLookupMessage" name="PostalLookup"/>
<output message="tns: PostalLookupResponseMessage" name="PostalLookup"/>
</operation>
</portType>
D. <portType name="PostalLookupInterface">
<operation name=" PostalLookupOperation">
<input message=" tns : PostalLookup" name="PostalLookupOperationInput"/>
<output
message="tns:
PostalLookupResponse"
name="PostalLookupOperationResponseOutput"/>
16/17
</operation>
</portType>
41. Soit le message SOAP suivant :
Quelle est la méthode correspondante à ce message SOAP ? (/1p...