JavaMoney / jsr354-ri

JSR 354 - Moneta: Reference Implementation
Other
334 stars 100 forks source link

ClassNotFoundException: org.javamoney.moneta.spi.loader.LoaderService$Listener #411

Closed Dudeplayz closed 5 months ago

Dudeplayz commented 5 months ago

After upgrading from 1.4.2 to 1.4.4, I get the following exception when loading an exchange rate provider:

Exception

2024-04-08 10:15:47 [vert.x-eventloop-thread-0] ERROR VertxIsolatedDeployer - Failed in deploying verticle java.util.ServiceConfigurationError: javax.money.spi.MonetaryConversionsSingletonSpi: Provider org.javamoney.moneta.convert.DefaultMonetaryConversionsSingletonSpi could not be instantiated at java.util.ServiceLoader.fail(ServiceLoader.java:586) ~[?:?] at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813) ~[?:?] at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729) ~[?:?] at java.util.ServiceLoader$3.next(ServiceLoader.java:1403) ~[?:?] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:99) ~[moneta-core-1.4.2.jar:1.4.2] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:66) ~[moneta-core-1.4.2.jar:1.4.2] at javax.money.spi.Bootstrap.getService(Bootstrap.java:121) ~[money-api-1.1.jar:1.1] at javax.money.convert.MonetaryConversions.getMonetaryConversionsSpi(MonetaryConversions.java:65) ~[money-api-1.1.jar:1.1] at javax.money.convert.MonetaryConversions.getExchangeRateProvider(MonetaryConversions.java:176) ~[money-api-1.1.jar:1.1] at javax.money.convert.MonetaryConversions.getExchangeRateProvider(MonetaryConversions.java:204) ~[money-api-1.1.jar:1.1] at x.y.z.item.search.utils.MoneyUtils.(MoneyUtils.kt:19) ~[classes/:?] at x.y.z.business.InitVerticle.start(InitVerticle.kt:16) ~[classes/:?] at io.vertx.kotlin.coroutines.CoroutineVerticle$start$1.invokeSuspend(CoroutineVerticle.kt:53) ~[vertx-lang-kotlin-coroutines-4.5.3.jar:4.5.3] at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.9.22.jar:1.9.22-release-704] at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:367) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:25) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:110) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.BuildersKt.launch(Unknown Source) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source) ~[kotlinx-coroutines-core-jvm-1.7.3.jar:?] at io.vertx.kotlin.coroutines.CoroutineVerticle.start(CoroutineVerticle.kt:51) ~[vertx-lang-kotlin-coroutines-4.5.3.jar:4.5.3] at io.vertx.core.impl.DeploymentManager.lambda$doDeploy$5(DeploymentManager.java:210) ~[vertx-core-4.5.3.jar:4.5.3] at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:276) ~[vertx-core-4.5.3.jar:4.5.3] at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:258) ~[vertx-core-4.5.3.jar:4.5.3] at io.vertx.core.impl.ContextInternal.lambda$runOnContext$0(ContextInternal.java:56) ~[vertx-core-4.5.3.jar:4.5.3] at io.netty.util.concurrent.AbstractEventExecutor.runTask$$$capture(AbstractEventExecutor.java:173) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:166) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) [netty-transport-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.106.Final.jar:4.1.106.Final] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.106.Final.jar:4.1.106.Final] at java.lang.Thread.run(Thread.java:833) [?:?] Caused by: java.lang.NoClassDefFoundError: org/javamoney/moneta/spi/loader/LoaderService$Listener at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?] at java.lang.ClassLoader.defineClass(ClassLoader.java:1012) ~[?:?] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?] at java.lang.ClassLoader.defineClass(ClassLoader.java:1012) ~[?:?] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.Class.forName0(Native Method) ~[?:?] at java.lang.Class.forName(Class.java:467) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1217) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273) ~[?:?] at java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309) ~[?:?] at java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393) ~[?:?] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:99) ~[moneta-core-1.4.2.jar:1.4.2] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:66) ~[moneta-core-1.4.2.jar:1.4.2] at javax.money.spi.Bootstrap.getServices(Bootstrap.java:110) ~[money-api-1.1.jar:1.1] at org.javamoney.moneta.convert.DefaultMonetaryConversionsSingletonSpi.reload(DefaultMonetaryConversionsSingletonSpi.java:64) ~[moneta-convert-1.4.4.jar:1.4.4] at org.javamoney.moneta.convert.DefaultMonetaryConversionsSingletonSpi.(DefaultMonetaryConversionsSingletonSpi.java:56) ~[moneta-convert-1.4.4.jar:1.4.4] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789) ~[?:?] ... 36 more Caused by: java.lang.ClassNotFoundException: org.javamoney.moneta.spi.loader.LoaderService$Listener at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?] at java.lang.ClassLoader.defineClass(ClassLoader.java:1012) ~[?:?] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?] at java.lang.ClassLoader.defineClass(ClassLoader.java:1012) ~[?:?] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) ~[?:?] at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) ~[?:?] at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?] at java.lang.Class.forName0(Native Method) ~[?:?] at java.lang.Class.forName(Class.java:467) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1217) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228) ~[?:?] at java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273) ~[?:?] at java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309) ~[?:?] at java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393) ~[?:?] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:99) ~[moneta-core-1.4.2.jar:1.4.2] at org.javamoney.moneta.spi.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:66) ~[moneta-core-1.4.2.jar:1.4.2] at javax.money.spi.Bootstrap.getServices(Bootstrap.java:110) ~[money-api-1.1.jar:1.1] at org.javamoney.moneta.convert.DefaultMonetaryConversionsSingletonSpi.reload(DefaultMonetaryConversionsSingletonSpi.java:64) ~[moneta-convert-1.4.4.jar:1.4.4] at org.javamoney.moneta.convert.DefaultMonetaryConversionsSingletonSpi.(DefaultMonetaryConversionsSingletonSpi.java:56) ~[moneta-convert-1.4.4.jar:1.4.4] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789) ~[?:?] ... 36 more

This is the code (kotlin) that causes the exception, running in a vert.x context:

MonetaryConversions.getExchangeRateProvider(ExchangeRateType.ECB, ExchangeRateType.IMF).getCurrencyConversion("EUR")
Dudeplayz commented 5 months ago

Was caused by a transitive dependency of jackson-datatype-money on moneta-core v1.4.2 which caused the issue.