I'm getting error java.lang.NoClassDefFoundError
when running some tests only some times.
Here's the set up: Tests are written in Scala with services in Scala and Java. Using ant and ivy as well.
Order.scala looks something like this:
object Order extends JdbcEnabled {
val orderServiceClientIpAddress = Network.localIpAddress
val PersonalOffersSaleId = "123"
lazy val checkoutClient = new CheckoutClientImpl(YamlConfigFactory.loadConfig(
this.getClass.getClassLoader.getResourceAsStream("core_config.yaml")
).getRequiredSubConfig("core").getRequiredSubConfig(Environment.HostEnv))
val storeList = new JLinkedList[Store]()
storeList.add(OrderHelper.getSelectedStore)
var skuList = OrderHelper.getAvailableSkus
val skusForInternationalOrders = skuList
def createOrder(){...}}
There are many tests running with TestNG. Sometimes all the tests pass without any problem, but sometimes they fail with this exception.
Here's a snippet of how a test calls Order api when it fails.
val orderNumber = Order.createOrder()
This is the entire stack trace when the test fails:
java.lang.NoClassDefFoundError: Could not initialize class com.api.Order$
at com.CreateOrder.setUpOnce(CreateOrder.scala:35)
Line 35 in that class, CreateOrder.scala is:
val orderNumber = Order.createOrder()
That is probably not your whole classpath, you must have the name of the missing class somewhere (probably after 'caused by..'). Maybe TestNG can be configured to show you complete stack traces.
Anyway, the initializer error means that 'object Order' threw an exception in its constructor, so look at what you are using there: maybe JDBC classes are missing? Or the configuration file you are retrieving via the class loader?
Generally, this kind of issue happens when there is an uncaught exception inside your singleton object. Try putting a try catch clause inside to get the origin of your error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With