Errores de compilación y carga de clases en aplicaciones personalizadas

Problema

Los errores "Problemas de compilación no resueltos", "No se pueden resolver a un tipo" o "Errores de compilación" se ven en las páginas de AEM y en el archivo error.log.

Por ejemplo:

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

Estas son algunas de las posibles causas:

  1. Faltan paquetes de OSGi
  2. Paquetes de OSGi parados
  3. Archivos de clase jsp compilados dañados

Resolución

Para solucionar este problema, siga los pasos que se indican a continuación:

A. Comprobar si los paquetes están parados

  1. Vaya a http://aem-host:port/system/console/bundles e inicie sesión como administrador.

  2. Ordene por estado del paquete.

  3. Compruebe si hay paquetes en estado Detenido o Resuelto que no deberían estarlo.

  4. Inícielos si están parados.  Si no ve ningún paquete detenido o los que se supone que deben detenerse, continúe con el siguiente paso.  De lo contrario, compruebe y valide si el problema está resuelto.

B. Compruebe que las clases se exportan al OSGi Class Loader

  1. Vaya a http://aem-host:port/system/console/depfinder.

  2. En el campo de texto, introduzca el nombre de la clase java completa y cualificada del error. Por ejemplo, en el error anterior, es com.geometrixx.components.page.basepage.BasePage.

  3. Haga clic en Buscar.

  4. Si un paquete OSGi aparece como resultado, entonces la clase está siendo exportada.  Asegúrese de que el paquete está activo. Si no lo es, entonces inicie el paquete y haga la prueba.  De lo contrario, vaya al paso siguiente.

C. Borre la caché compilada de JSP

Dado que la clase java se exporta y está disponible para el jsp que lanzó el error, solo podemos sospechar que los archivos de clase jsp compilados están dañados.

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

  2. Haga clic en Recompilar todos los JSP.

  3. Compruebe si se ha resuelto el problema.  Si no es así, continúe con el siguiente paso.

  4. Inicie sesión en el sistema de archivos del servidor.

  5. Vaya al subdirectorio de la carpeta de instalación de AEM crx-quickstart/launchpad/felix

  6. Busque en esa carpeta archivos _jsp.java.  En Linux, puede ejecutar el siguiente comando desde la carpeta de instalación de AEM.

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

    Obtendría un resultado similar a este:

    ./crx-quickstart/launchpad/felix/bundle218/data/classes
  7. En el resultado puede ver que bundle218 es la carpeta para el paquete org.apache.apache.sling.scripting.jsp, en su caso la carpeta tiene un número diferente a 218.

  8. Elimine los subdirectorios en el directorio de datos/clases.  Por ejemplo:

    rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
  9. Abra su navegador en http://aem-host:port/system/console/bundles y reinicie los paquetes org.apache.sling.scripting.jsp y org.apache.sling.commons.fsclassloader

  10. Ahora pruebe de nuevo y valide para ver si el problema está resuelto.

Si el problema sigue sin resolverse después de todos los pasos anteriores, póngase en contacto con el servicio de atención al cliente de AEM.

Logotipo de Adobe

Inicia sesión en tu cuenta