NoClassDefFoundError on Externalizer class in AEM 6.2 | Community
Skip to main content
Level 2
December 7, 2016
Solved

NoClassDefFoundError on Externalizer class in AEM 6.2

  • December 7, 2016
  • 6 replies
  • 2882 views

Hey guys.

I have a new issue today for which I really need your help.

We have a website developed using AEM 6.1 API and deployed in 6.1. Our website has some Java backend. One piece of our java code used the Externalizer class from AEM (com.day.cq.commons). Nothing rocket science so far.

Then we had to deploy everything on AEM 6.2. Now on 6.2 that piece of code is not working anymore. AEM returns this exception out of the blue:

… Caused by: java.lang.NoClassDefFoundError: com/day/cq/commons/Externalizer …
(cannot post full stacktrace as we have confidential stuff)

So the question is, why may that happen ?

My first thought was that maybe something may have changed to the class loader on 6.2. So I dunno if I am on a totally wrong path, but I have compared the Dynamic Class Loader on both AEM versions. Again, maybe I looking in the wrong place, but I definitely think that error has something to do with class loading policies. So, what I saw is that on 6.1 the Dynamic Class Loader is implemented in org.apache.sling.commons.classloader-1.3.2.jar and in 6.2 is implemented in org.apache.sling.commons.fsclassloader-1.0.2.jar.
So looking at the jar versions it looks like in the higher AEM version we have the lower Dynamic Class Loader jar version. When in my mind things should be the other way around. Should that be right? Any ideas?

Tks in advance for you help !

Cheers.

Update 1: I come back with an update because it seams I made a mistake about the two jar versions. My eyes played tricks to me. I was looking on two different jar files (.classloader vs .fsclassloader), two different things. So jar version seams to not be the cause. But still the initial problem stays and I don't know why is happening. So please just ignore second part of my article.

 

Update 2: We are using Java 1.8 everywhere. We have also installed all the hot fixes packages.

 

Update 3: I have also compared our application bundle in each AEM Web Console. Interesting is that on 6.2 our bundle does not import anymore the com.day.cq.commons package, where the Externalizer class resides.

On AEM 6.1 (http://localhost:4502/system/console/bundles/471) :
Imported Packages    
    com.adobe.cq.sightly,version=2.3.0 from com.adobe.cq.sightly.cq-wcm-sightly-extension (435)
    com.adobe.granite.workflow,version=1.0.0 from com.adobe.granite.workflow.api (194)
    com.adobe.granite.workflow.exec,version=1.0.0 from com.adobe.granite.workflow.api (194)
    com.adobe.granite.workflow.metadata,version=1.0.0 from com.adobe.granite.workflow.api (194)
    com.day.cq.commons,version=5.7.0 from com.day.cq.cq-commons (292)
    com.day.cq.dam.api,version=1.7.0 from com.day.cq.dam.cq-dam-api (332)
    com.day.cq.mailer,version=5.9.0 from com.day.cq.cq-mailer (296)
    com.day.cq.wcm.api,version=1.9.0 from com.day.cq.wcm.cq-wcm-api (419)
    ….

On AEM 6.2 (http://localhost:4503/system/console/bundles/444) :
Imported Packages    
    com.adobe.cq.sightly,version=2.5.0 from com.adobe.cq.sightly.cq-wcm-sightly-extension (272)
    com.adobe.granite.license,version=1.1.1 from com.adobe.granite.license (63)
    com.adobe.granite.workflow,version=1.0.0 from com.adobe.granite.workflow.api (214)
    com.adobe.granite.workflow.exec,version=1.1.0 from com.adobe.granite.workflow.api (214)
    com.adobe.granite.workflow.metadata,version=1.0.0 from com.adobe.granite.workflow.api (214)

    ????????????????
    com.day.cq.dam.api,version=1.16.0 from com.day.cq.dam.cq-dam-api (377)
    com.day.cq.i18n,version=5.4.0 from com.day.cq.cq-i18n (182)
    com.day.cq.mailer,version=5.9.0 from com.day.cq.cq-mailer (355)
    com.day.cq.wcm.api,version=1.17.0 from com.day.cq.wcm.cq-wcm-api (258)

Our maven script is configured with <Import-Package>*;resolution:=optional</Import-Package>, but I don't think this is the problem.
 

Update 4: Our piece of code get a reference to Externalizer like this (I dunno if this makes any difference):

    Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Feike_Visser1

Can you rebuild the package/bundle with 6.2 uber.jar?

6 replies

smacdonald2008
Level 10
December 7, 2016

I am checking with internal Adobe ppl to see if this is a known issue. 

Nandujee
Level 3
March 14, 2017

smacdonald2008 wrote...

I am checking with internal Adobe ppl to see if this is a known issue. 

 

Any finding on this.I got a similar issue after migrating from AEM6.1 to AEM 6.2.

Please share your finding.

Thanks

Nanda

Nandujee
Level 3
March 14, 2017

Hello there,

Could you share me your thought?

I am facing similar issue after AEM 6.2 migration.

I have migrated from AEM 6.1 to 6.2

Your help would be much appreciated

Thanks

Nanda

Feike_Visser1
Adobe Employee
Feike_Visser1Adobe EmployeeAccepted solution
Adobe Employee
March 14, 2017

Can you rebuild the package/bundle with 6.2 uber.jar?

Nandujee
Level 3
March 14, 2017

Yes Feike, It is working now.

Thank you ..

Feike_Visser1
Adobe Employee
Adobe Employee
March 14, 2017

Great!