Erreurs de compilation et de chargement de classe dans une application personnalisée

Problème

Les erreurs « Problèmes de compilation non résolus », « Impossible de résoudre un type » ou « Erreurs de compilation » sont visibles lors de l'affichage des pages AEM et dans le fichier error.log.

Par exemple :

31.01.2017 06:50:16.950 *ERROR* [192.150.9.201 [1485805816944] GET /content/geometrixx/en.html HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught SlingException
java.lang.Error: Unresolved compilation problems: 
    com.geometrixx.components.page.basepage.BasePage cannot be resolved to a type
    com.geometrixx.components.page.basepage.BasePage cannot be resolved to a type
    at org.apache.jsp.apps.geometrixx.components.page.base_002dpage.base_002dpage_jsp._jspService(base_002dpage_jsp.java:194)
    at org.apache.sling.scripting.jsp.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
12.02.2018 12:30:52.565 *ERROR* [10.43.32.15 [1518456652560] GET /mnt/overlay/cq/gui/content/coral/common/form/tagfield/picker.html HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught SlingException
org.apache.sling.scripting.java.impl.ServletWrapper$CompilerException: Compilation errors in /libs/cq/gui/components/coral/common/form/tagfield/datasources/children/children.java:
Line 72, column 3158 : The method transform(Object) of type new Transformer(){} must override a superclass method
    at org.apache.sling.scripting.java.impl.ServletWrapper$CompilerException.create(ServletWrapper.java:290)
12.02.2018 12:31:23.006 *ERROR* [10.43.32.15 [1518456683001] GET /mnt/overlay/granite/ui/content/coral/foundation/form/pathfield/picker.html HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Uncaught SlingException
org.apache.sling.scripting.java.impl.ServletWrapper$CompilerException: Compilation errors in /libs/granite/ui/components/coral/foundation/form/pathfield/datasources/children/children.java:
Line 114, column 4844 : The method evaluate(Object) of type new Predicate(){} must override a superclass method
Line 132, column 5667 : The method compare(Resource, Resource) of type new Comparator<Resource>(){} must override a superclass method
Line 164, column 6736 : The method transform(Object) of type new Transformer(){} must override a superclass method
Line 191, column 7631 : The method evaluate(Object) of type children.FolderPredicate must override a superclass method
Line 208, column 8089 : The method evaluate(Object) of type children.HierarchyPredicate must override a superclass method
Line 225, column 8553 : The method evaluate(Object) of type children.NoSystemPredicate must override a superclass method
Line 242, column 9064 : The method evaluate(Object) of type children.HierarchyNotFilePredicate must override a superclass method
Line 282, column 10387 : The method transform(Object) of type new Transformer(){} must override a superclass method
    at org.apache.sling.scripting.java.impl.ServletWrapper$CompilerException.create(ServletWrapper.java:290)

Cause

Voici quelques causes possibles :

  1. Lots OSGi manquants.
  2. Lots OSGi arrêtés.
  3. Fichiers de classe JSP corrompus compilés

Résolution

Pour résoudre ce problème, suivez les étapes ci-dessous :

A. Vérifiez si les lots sont arrêtés.

  1. Accédez à http://aem-host:port/system/console/bundles et connectez-vous en tant qu'administrateur.

  2. Triez par lot Statut.

  3. Vérifiez s'il y a des lots dans l'état Arrêté ou Résolu qui ne devraient pas l'être.

  4. Démarrez-les s'ils sont arrêtés.  Si vous ne voyez aucun lot arrêté ou ceux qui sont censés être arrêtés, passez à l'étape suivante.  Sinon, testez et validez si le problème est résolu.

B. Vérifiez que les classes sont exportées vers le chargeur de classes OSGi.

  1. Accédez à http://aem-host:port/system/console/depfinder.

  2. Dans le champ de texte, entrez le nom complet de la classe java de l'erreur. Par exemple, dans l'erreur ci-dessus, il s'agit de « com.geometrixx.components.page.basepage.BasePage ».

  3. Cliquez sur Rechercher.

  4. Si un lot OSGi apparaît comme résultat, la classe est alors exportée.  Assurez-vous que le lot est actif. Dans le cas contraire, démarrez le lot et testez-le.  Sinon, passez à l'étape suivante.

C. Videz le cache JSP compilé

Puisque la classe java est exportée et est disponible pour le JSP qui a causé l'erreur, alors nous pouvons seulement suspecter que les fichiers de classe JSP compilés sont corrompus.

  1. Accéder à http://aem-host:port/system/console/slingjsp.

  2. Cliquez sur Recompiler toutes les pages JSP.

  3. Vérifiez si le problème est résolu.  Sinon, passez à l'étape suivante.

  4. Connectez-vous au système de fichiers du serveur.

  5. Accédez au sous-répertoire du dossier d'installation d'AEM crx-quickstart/launchpad/felix.

  6. Dans ce dossier, recherchez les fichiers _jsp.java.  Sous Linux, vous pouvez exécuter la commande ci-dessous à partir du dossier d'installation d'AEM.

    find ./crx-quickstart/launchpad/felix -type d -name classes

    Vous obtenez un résultat semblable à celui-ci :

    ./crx-quickstart/launchpad/felix/bundle218/data/classes
  7. Dans le résultat, vous pouvez voir que bundle218 est le dossier du org.apache.sling.scripting.jsp, dans votre cas, le dossier a un nombre différent de 218.

  8. Supprimez les sous-répertoires sous le répertoire data / classes.  Par exemple:

    rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
  9. Ouvrez votre navigateur à http://aem-host:port/system/console/bundles et redémarrez les lots org.apache.sling.scripting.jsp et org.apache.sling.commons.fsclassloader.

  10. Maintenant, testez à nouveau et validez pour voir si le problème est résolu.

Si le problème n'est toujours pas résolu après toutes les étapes ci-dessus, contactez le service client AEM.

 Adobe

Recevez de l’aide plus rapidement et plus facilement

Nouvel utilisateur ?