Errori di compilazione e classloading in applicazioni personalizzate

Problema

Gli errori "Unresolved compilation problems" (Problemi di compilazione non risolti), "cannot be resolved to a type" (Non può essere risolto), o "Compilation errors" (Errori di compilazione) sono visibili quando si visualizzano le pagine AEM e nel file error.log.

Esempio:

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)

Causa

Alcune possibili cause sono:

  1. Bundle OSGi mancanti
  2. Bundle OSGi bloccati
  3. File classe jsp compilati e corrotti

Risoluzione

Per risolvere questo problema, seguite i passaggi seguenti:

A. Controllare se i bundle sono stati bloccati

  1. Vai a http://aem-host:port/system/console/bundles e accedi come amministratore

  2. Ordina per bundle Stato.

  3. Vedere se ci sono dei bundle con stato Stopped o Resolved che non dovrebbe esserci.

  4. Avviarli se sono bloccati.  Se non vedete dei bundle bloccati o quelli che dovrebbero essere bloccati, allora andate al passaggio successivo.  In caso contrario, verificate e convalidate se il problema è risolto.

B. Verificate che le classi siano esportate in OSGi Class Loader

  1. Vai su http://aem-host:port/system/console/depfinder.

  2. Nel campo di testo, inserire il nome completo della classe java dall'errore. Per esempio, nell'errore di cui sopra, è "com.geometrixx.components.page.basepage.basepage.BasePage"

  3. Fate clic su Trova.

  4. Se un bundle OSGi appare come risultato, allora la classe viene esportata.  Accertatevi che il bundle sia impostato su Active. Se non lo è, avviate il bundle ed effettuate un test.  In caso contrario proseguite con il passaggio successivo.

C. Cancellate la cache JSP compilata

Poiché la classe java viene esportata ed è disponibile per il jsp che ha lanciato l'errore, allora possiamo solo sospettare che i file compilati della classe jsp siano corrotti

  1. Vai a http://aem-host:port/system/console/slingjsp.

  2. Fate clic su Ricompila tutti i JSP

  3. Effettuate un test per vedere se il problema è stato risolto.  In caso contrario, andate al passaggio successivo.

  4. Accedete al file system del server.

  5. Vai alla sottodirectory della cartella di installazione di AEM crx-quickstart/launchpad/felix

  6. Cerca in quella cartella i file _jsp.java.  Su Linux, è possibile eseguire il comando sottostante dalla cartella di installazione di AEM

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

    Si otterrebbe un risultato simile a questo:

    ./crx-quickstart/launchpad/felix/bundle218/data/classes
  7. Nel risultato puoi vedere che bundle218 è la cartella per il bundle org.apache.sling.scripting.jsp, nel tuo caso la cartella ha un numero diverso da 218.

  8. Cancellare le sottocartelle nella directory dati/classi.  Esempio:

    rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
  9. Aprite il browser su http://aem-host:port/system/console/bundles e riavviate i bundle org.apache.apache.sling.scripting.jsp e org.apache.sling.commons.fsclassloader

  10. Ora effettuate un nuovo test e convalidate per vedere se il problema è stato risolto.

Se il problema non è ancora risolto dopo tutti i passaggi di cui sopra, contattate il Servizio Clienti AEM.

Logo Adobe

Accedi al tuo account