Arborescence des pages

Voici une liste des exceptions fréquemment rencontrés lors de l'installation de l'application eCandidat.

Elles sont souvent dû à une erreur de configuration.

VersionException: The database is too old (x.x.x), please run 'ant upgrade'

Vous venez d'installer la nouvelle version de eCandidat mais vous n'avez pas exécuté la target ant upgrade.

Une fois celle-ci exécutée, vérifiez que la table B_VERS_MANA si la valeur est à jour.

ObjectNotFoundException: No LDAP entry found for entity [*********]

Lors de l'exécution de la target init-data, il est possible d'avoir cette exception si la propriété init.firstAdministratorId soit mal initialisé.

Il faut s'assurer que la valeur saisie corresponde bien à l'id au sens LDAP. En effet, l'init-data va interroger LDAP pour récupérer la fiche sur l'id passé et ainsi initialiser le premier compte administrateur dans l'application.

ObjectNotFoundException avec un code postal inexistant

L'exception envoyée par l'application contient la ligne suivante :

caused by: org.esupportail.commons.exceptions.ObjectNotFoundException: Ce code postal ( 97610 ) n'existe pas dans la base de données APOGEE

Cette exception est générée par l'application lorsque le webservice Apogée remonte une WebException du style technical.data.nullretrieve.commune.

En vérifiant dans le référentiel Apogée, si le code postal n'existe pas, il suffit de mettre à jour. Sinon cela signifie que le webservice s'est planté pendant un cours instant en générant une erreur à l'appel de la méthode.

DownloadException: data is null

Il s'agit là d'un "replay" de l'url de download d'un dossier. En effet, lorsque le candidat télécharge son dossier, l'application va jouer une URL du type https://_url_de_l'appli_?downloadId=****\* (https://_url_de_l%27appli_/?downloadId=*****) afin de pouvoir activer le filtre de téléchargement dans le web.xml et ainsi envoyer le flux de données au candidat pour télécharger le dossier.
L'id passé en paramètre ne peut être joué 2 fois car en réalité, on se base sur des données chargées en session pour créer le fichier à télécharger.

Il s'avère que pour rejouer volontairement ce genre d'URL, il faut réussir à la capturer par exemple avec un plugin comme TamperData (sur Firefox). Une supposition sur ce sujet serait donc que des personnes malveillantes veulent tester s'il est possible, en changeant ou en rejouant la valeur de l'id, d'obtenir d'autres données que celles initialement obtenues.
A Rennes 1, nous avons 2 cas de comportement plus ou moins malveillants :
- soit l'URL est rejouée une fois, supposition que leur test est un échec auquel cas ils abandonnent ;
- soit l'URL est rejouée plusieurs fois. Dans ce cas, on a constaté que l'id peut changer ou non mais le plus important est que l'adresse IP de l'entité malveillante est identique. Les "attaques" sont, dans des cas déjà constatés, répétées toutes les 2 minutes. La supposition est qu'étant donnée que le comportement provoque une erreur, les personnes malveillantes tentent de surcharger le serveur en saturant les fichiers de logs.

Fort heureusement, dans le second cas, nous n'avons jamais planté le serveur car l'application ne conserve qu'un certain nombre de fichiers de logs, on évite donc la surcharge sur ce point.
La solution que nous avons parfois envisagée lorsque les attaques étaient en cours, était de blacklister l'adresse IP pendant une journée ou deux.
Je l'ai par ailleurs constaté à mon retour de vacances, nous avons eu une attaque de ce genre la semaine dernière et elle a duré 6 heures, entre 19h et 1h, cela sans conséquence.

MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key geographieMetier.urlService.ssl

Dans le fichier configUrlServices.properties, il manque, entre autres, la clé geographieMetier.urlService.ssl.

Il faut donc ajouter les lignes suivantes :

administratifMetier.urlService.ssl=false
etudiantMetier.urlService.ssl=false
pedagogiqueMetier.urlService.ssl=false
geographieMetier.urlService.ssl=false

Elles sont nécessaires pour les librairies des webservices Apogée et lorsqu'on saisit false, cela veut dire qu'on n'utilise pas SSL.

De plus, si cela n'est pas fait, je vous conseille aussi d'ajouter les lignes suivantes :

WS_SSL_MODE=false
WS_CERTIF_STORE_PATH=
WS_KEY_STORE_PATH=
WS_KEY_PASS=
WS_KEY_TYPE=

ConfigException: la balise boucle n'a pas de fin

Si cette erreur intervient dans la classe DynamicMailContentImpl, cela signifie que vous avez modifié de la mauvaise manière un mail dynamique sur la page prévue à cet effet.

Dans le cas précis de la balise boucle, il faut rajouter la fin de celle-ci avec ce code

${end_boucle}

Il faut faire très attention aux modifications apportées dans ce module car certaines parties des mails ne doivent pas changer car ce sont des expressions qui sont analysées et traitées par l'application pour donner le rendu final.

MySQLIntegrityConstraintViolationException: Duplicate entry

Si l'erreur porte sur les clés lib_nom_pat_usr ou cod_dep_nai, ce sont des clés générées par Hibernate lors de l'init-data.

Elles correspondent à la clé d'unicité sur les champs lib_nom_pat_usr - lib_pr1_usr - lib_pr2_usr - cod_dep_nai - dat_nai_ind - ville_nai_ind d'un individu dans le mapping. Cette clé évite qu'un candidat crée deux fois un dossier dans l'application.

Le problème vient qu'un Individu au sens de l'application est divisé en base de données sur les deux tables OPI_USER et INDIVIDU.

Il faut donc  :

  • dans la table OPI_USER, supprimer l'index lib_nom_pat_usr
  • dans la table INDIVIDU, supprimer l'index cod_dep_nai
  • Aucune étiquette