Problem

Die Fehler "Ungelöste Kompilierungsprobleme", "nicht auf einen Typ lösbar" oder "Kompilierungsfehler" werden beim Betrachten von AEM-Seiten und in der error.log angezeigt.

Beispiel:

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)

Ursache

Hier sind einige mögliche Ursachen:

  1. Fehlende OSGi-Pakete
  2. Gestoppte OSGi-Pakete
  3. Beschädigte kompilierte jsp-Klassendateien

Lösung

Gehen Sie wie folgt vor, um das Problem zu beheben:

A. Prüfen, ob Pakete gestoppt wurden

  1. Gehen Sie zu http://aem-host:port/system/console/bundles und loggen Sie sich als Administrator ein.

  2. Sortieren nach Paket Status.

  3. Sehen Sie, ob es irgendwelche Pakete in Stopped oder Resolved Zustand gibt, der nicht sein sollte.

  4. Starten Sie sie, wenn sie gestoppt wurden.  Wenn Sie keine gestoppten Pakete sehen oder die, die gestoppt werden sollen, fahren Sie mit dem nächsten Schritt fort.  Andernfalls testen und validieren Sie, ob das Problem gelöst ist.

B. Prüfen Sie, ob die Klassen in den OSGi Class Loader exportiert werden.

  1. Gehe zu http://aem-host:port/system/console/depfinder.

  2. Geben Sie im Textfeld den voll qualifizierten Java-Klassennamen aus dem Fehler ein. Im obigen Beispiel ist es "com.geometrixx.components.page.basepage.BasePage"

  3. Klicken Sie auf Finden.

  4. Wenn als Ergebnis ein OSGi-Paket erscheint, wird die Klasse exportiert.  Stellen Sie sicher, dass das Paket aktiv ist. Ist dies nicht der Fall, starten Sie das Paket und testen Sie es.  Andernfalls fahren Sie mit dem nächsten Schritt fort.

C. Löschen des kompilierten JSP-Cache

Da die Java-Klasse exportiert wird und für den JSP verfügbar ist, der den Fehler ausgelöst hat, können wir nur vermuten, dass die kompilierten JSP-Klassendateien beschädigt sind.

  1. Gehe zu http://aem-host:port/system/console/slingjsp.

  2. Klicken Sie auf Alle JSPs neu kompilieren.

  3. Testen Sie, ob das Problem behoben ist.  Wenn nicht, dann fahren Sie mit dem nächsten Schritt fort.

  4. Melden Sie sich im Dateisystem des Servers an.

  5. Wechseln Sie in das Unterverzeichnis des AEM-Installationsverzeichnisses crx-quickstart/launchpad/felix

  6. Suchen Sie unter diesem Ordner nach _jsp.java-Dateien.  Unter Linux können Sie den folgenden Befehl aus dem AEM-Installationsordner ausführen.

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

    Sie würden ein ähnliches Ergebnis erhalten:

    ./crx-quickstart/launchpad/felix/bundle218/data/classes
  7. Im Ergebnis sehen Sie, dass bundle218 der Ordner für das org.apache.sling.scripting.jsp bundle ist, in Ihrem Fall hat der Ordner eine andere Nummer als 218.

  8. Löschen Sie die Unterordner im Ordner „data/Classes“.  Beispiel:

    rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
  9. Öffnen Sie Ihren Browser unter http://aem-host:port/system/console/bundles und starten Sie die Bundles org.apache.sling.scripting.jsp und org.apache.sling.commons.fsclassloader neu.

  10. Testen Sie jetzt erneut und überprüfen Sie, ob das Problem gelöst ist.

Wenn das Problem nach allen oben genannten Schritten noch immer nicht gelöst wurde, wenden Sie sich an den AEM.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie