Vaya a http://aem-host:port/system/console/bundles e inicie sesión como administrador.
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:
- Faltan paquetes de OSGi
- Paquetes de OSGi parados
- 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
-
-
Ordene por estado del paquete.
-
Compruebe si hay paquetes en estado Detenido o Resuelto que no deberían estarlo.
-
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
-
Vaya a http://aem-host:port/system/console/depfinder.
-
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.
-
Haga clic en Buscar.
-
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.
-
Vaya a http://aem-host:port/system/console/slingjsp.
-
Haga clic en Recompilar todos los JSP.
-
Compruebe si se ha resuelto el problema. Si no es así, continúe con el siguiente paso.
-
Inicie sesión en el sistema de archivos del servidor.
-
Vaya al subdirectorio de la carpeta de instalación de AEM crx-quickstart/launchpad/felix
-
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
-
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.
-
Elimine los subdirectorios en el directorio de datos/clases. Por ejemplo:
rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
-
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
-
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.
Inicia sesión en tu cuenta