Erros de compilação e carregamento de classe no aplicativo personalizado

Problema

Os erros "Problemas de compilação não resolvidos", "não pode ser resolvido para um tipo" ou "Erros de compilação" são vistos ao visualizar páginas do AEM e no error.log.

Por exemplo:

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

Aqui estão algumas causas possíveis:

  1. Pacotes do OSGi ausentes
  2. Pacotes interrompidos do OSGi
  3. Arquivos de classe jsp compilados corrompidos

Resolução

Para solucionar esse problema, siga as etapas abaixo:

A. Verifique se os pacotes estão parados

  1. Acesse http: http://aem-host:port/system/console/bundles e efetue login como administrador.

  2. Ordenar por pacote Status.

  3. Veja se há algum pacote em estado Parado ou Resolvido que não deveria ser.

  4. Comece-os se eles estiverem parados.  Se você não vir nenhum pacote interrompido ou os que devem ser interrompidos, continue na próxima etapa.  Caso contrário, teste e valide se o problema foi resolvido.

B. Verifique se as classes são exportadas para o carregador de classes OSGi

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

  2. No campo de texto, insira o nome completo da classe java a partir do erro. Por exemplo, no erro acima, é "com.geometrixx.components.page.basepage.BasePage"

  3. Clique em Localizar.

  4. Se um pacote OSGi aparecer como resultado, a classe será exportada.  O pacote deve estar ativo. Se não for, inicie o pacote e teste.  Caso contrário, vá para a etapa seguinte.

C. Limpar o cache JSP compilado

Como a classe java é exportada e está disponível para o jsp que emitiu o erro, então podemos apenas suspeitar que os arquivos de classe jsp compilados estão corrompidos.

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

  2. Clique em Recompile todos os JSPs.

  3. Teste para ver se o problema foi resolvido.  Caso contrário, continue para o próximo passo.

  4. Faça o login no sistema de arquivos do servidor.

  5. Vá para o subdiretório da pasta de instalação do AEM crx-quickstart/launchpad/felix

  6. Pesquise sob essa pasta por arquivos _jsp.java.  No Linux, você pode executar o comando abaixo da pasta de instalação do AEM.

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

    Você obteria um resultado semelhante a este:

    ./crx-quickstart/launchpad/felix/bundle218/data/classes
  7. No resultado, você pode ver que bundle218 é a pasta para o pacote org.apache.sling.scripting.jsp, no seu caso, a pasta tem um número diferente do 218.

  8. Exclua os subdiretórios no diretório data/classes.  Por exemplo:

    rm -rf ./crx-quickstart/launchpad/felix/bundle218/data/classes/*
  9. Abra seu navegador em http://aem-host:port/system/console/bundles and restart the bundles org.apache.sling.scripting.jsp and org.apache.sling.commons.fsclassloader

  10. Agora teste novamente e valide para ver se o problema foi resolvido.

Se o problema ainda não for resolvido após todas as etapas acima, entre em contato com o Atendimento ao Cliente do AEM.

Logotipo da Adobe

Fazer logon em sua conta