Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.NoClassDefFoundError: Could not initialize class

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()
like image 610
Joseph Blue Avatar asked Oct 20 '12 12:10

Joseph Blue


2 Answers

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?

like image 113
Iulian Dragos Avatar answered Sep 17 '22 17:09

Iulian Dragos


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.

like image 20
Ismail H Avatar answered Sep 20 '22 17:09

Ismail H