Skip to content

Catch NoClassDefFoundError too #57

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Nov 24, 2019
Merged

Catch NoClassDefFoundError too #57

merged 3 commits into from
Nov 24, 2019

Conversation

ptahchiev
Copy link
Contributor

Related to #56 we need to catch also NoClassDefFoundError too for when classes were present at compile time but missing at runtime.

Related to atteo#56 we need to catch also NoClassDefFoundError too for when classes were present at compile time but missing at runtime.
Copy link
Member

@sentinelt sentinelt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, would you be able to provide a unit test for that case?

@ptahchiev
Copy link
Contributor Author

Hi @sentinelt I have a problem running the tests of classindex - i think it might be something about my java version:

INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.atteo.classindex.RunOSGiContainerIntegrationTest
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
ERROR: Bundle org.ops4j.pax.exam [1] Error starting link:classpath:META-INF/links/org.ops4j.pax.exam.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam [1](R 1.0): missing requirement [org.ops4j.pax.exam [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.lang)(version>=1.5.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)] Unresolved requirements: [[org.ops4j.pax.exam [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.lang)(version>=1.5.0)(!(version>=2.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam [1](R 1.0): missing requirement [org.ops4j.pax.exam [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.lang)(version>=1.5.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)] Unresolved requirements: [[org.ops4j.pax.exam [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.lang)(version>=1.5.0)(!(version>=2.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.exam.inject [2] Error starting link:classpath:META-INF/links/org.ops4j.pax.exam.inject.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.inject [2](R 2.0): missing requirement [org.ops4j.pax.exam.inject [2](R 2.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j)(version>=1.4.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.pax.logging.pax-logging-api [5](R 5.0): missing requirement [org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers)] Unresolved requirements: [[org.ops4j.pax.exam.inject [2](R 2.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j)(version>=1.4.0)(!(version>=2.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.inject [2](R 2.0): missing requirement [org.ops4j.pax.exam.inject [2](R 2.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j)(version>=1.4.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.pax.logging.pax-logging-api [5](R 5.0): missing requirement [org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers)] Unresolved requirements: [[org.ops4j.pax.exam.inject [2](R 2.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j)(version>=1.4.0)(!(version>=2.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.exam.extender.service [3] Error starting link:classpath:META-INF/links/org.ops4j.pax.extender.service.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.extender.service [3](R 3.0): missing requirement [org.ops4j.pax.exam.extender.service [3](R 3.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7)) Unresolved requirements: [[org.ops4j.pax.exam.extender.service [3](R 3.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.extender.service [3](R 3.0): missing requirement [org.ops4j.pax.exam.extender.service [3](R 3.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7)) Unresolved requirements: [[org.ops4j.pax.exam.extender.service [3](R 3.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.logging.pax-logging-api [5] Error starting link:classpath:META-INF/links/org.ops4j.pax.logging.api.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.logging.pax-logging-api [5](R 5.0): missing requirement [org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers) Unresolved requirements: [[org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers)])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.logging.pax-logging-api [5](R 5.0): missing requirement [org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers) Unresolved requirements: [[org.ops4j.pax.logging.pax-logging-api [5](R 5.0)] osgi.wiring.package; (osgi.wiring.package=javax.xml.parsers)]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.base [6] Error starting link:classpath:META-INF/links/org.ops4j.base.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl) Unresolved requirements: [[org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl) Unresolved requirements: [[org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.swissbox.core [7] Error starting link:classpath:META-INF/links/org.ops4j.pax.swissbox.core.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.core [7](R 7.0): missing requirement [org.ops4j.pax.swissbox.core [7](R 7.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.core [7](R 7.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.core [7](R 7.0): missing requirement [org.ops4j.pax.swissbox.core [7](R 7.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.core [7](R 7.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.swissbox.extender [8] Error starting link:classpath:META-INF/links/org.ops4j.pax.swissbox.extender.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.extender [8](R 8.0): missing requirement [org.ops4j.pax.swissbox.extender [8](R 8.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.extender [8](R 8.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.extender [8](R 8.0): missing requirement [org.ops4j.pax.swissbox.extender [8](R 8.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.extender [8](R 8.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.swissbox.framework [9] Error starting link:classpath:META-INF/links/org.ops4j.pax.swissbox.framework.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.framework [9](R 9.0): missing requirement [org.ops4j.pax.swissbox.framework [9](R 9.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.spi)(version>=1.5.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)] Unresolved requirements: [[org.ops4j.pax.swissbox.framework [9](R 9.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.spi)(version>=1.5.0)(!(version>=2.0.0)))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.framework [9](R 9.0): missing requirement [org.ops4j.pax.swissbox.framework [9](R 9.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.spi)(version>=1.5.0)(!(version>=2.0.0))) [caused by: Unable to resolve org.ops4j.base [6](R 6.0): missing requirement [org.ops4j.base [6](R 6.0)] osgi.wiring.package; (osgi.wiring.package=javax.net.ssl)] Unresolved requirements: [[org.ops4j.pax.swissbox.framework [9](R 9.0)] osgi.wiring.package; (&(osgi.wiring.package=org.ops4j.spi)(version>=1.5.0)(!(version>=2.0.0)))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.swissbox.lifecycle [10] Error starting link:classpath:META-INF/links/org.ops4j.pax.swissbox.lifecycle.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.lifecycle [10](R 10.0): missing requirement [org.ops4j.pax.swissbox.lifecycle [10](R 10.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.lifecycle [10](R 10.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.lifecycle [10](R 10.0): missing requirement [org.ops4j.pax.swissbox.lifecycle [10](R 10.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.lifecycle [10](R 10.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.swissbox.tracker [11] Error starting link:classpath:META-INF/links/org.ops4j.pax.swissbox.tracker.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.tracker [11](R 11.0): missing requirement [org.ops4j.pax.swissbox.tracker [11](R 11.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.tracker [11](R 11.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.swissbox.tracker [11](R 11.0): missing requirement [org.ops4j.pax.swissbox.tracker [11](R 11.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6)) Unresolved requirements: [[org.ops4j.pax.swissbox.tracker [11](R 11.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.6))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
ERROR: Bundle org.ops4j.pax.exam.invoker.junit [16] Error starting link:classpath:META-INF/links/org.ops4j.pax.exam.invoker.junit.link (org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.invoker.junit [16](R 16.0): missing requirement [org.ops4j.pax.exam.invoker.junit [16](R 16.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7)) Unresolved requirements: [[org.ops4j.pax.exam.invoker.junit [16](R 16.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7))])
org.osgi.framework.BundleException: Unable to resolve org.ops4j.pax.exam.invoker.junit [16](R 16.0): missing requirement [org.ops4j.pax.exam.invoker.junit [16](R 16.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7)) Unresolved requirements: [[org.ops4j.pax.exam.invoker.junit [16](R 16.0)] osgi.ee; (&(osgi.ee=JavaSE)(version=1.7))]
	at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)
	at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)
	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
	at java.base/java.lang.Thread.run(Thread.java:834)
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 11.564 s <<< FAILURE! - in org.atteo.classindex.RunOSGiContainerIntegrationTest

Similar to the previous commit (related to atteo#56) we need to also catch both ClassNotFoundException and NoClassDefFoundError
to avoid problems when we have compile-time dependencies which are not present at runtime.

Related to atteo#56
This test-case demonstrates that when compile-time-only dependencies are present
we will get exceptions unless we catch both ClassNotFoundException and NoCassDefFoundError.

See atteo#56
@ptahchiev
Copy link
Contributor Author

Hi @sentinelt
I committed one more change and added a test-case. Please review.

@ptahchiev ptahchiev requested a review from sentinelt November 15, 2019 23:30
@sentinelt sentinelt merged commit a272fff into atteo:master Nov 24, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants