ps0604
ps0604

Reputation: 1071

Catching messages thrown by classes in a lower level

There are four levels in my application: (1) My application, (2) pivot4j, (3) olap4j, and (4) Mondrian

If I run this code in Scala:

try {
     renderer.render(model, new HtmlRenderCallback(sw)) 
}
catch {
  case ex: Exception => println(ex.getMessage)
}

The application prints the error thrown by pivot4j:

org.olap4j.OlapException: mondrian gave exception while parsing query

If I don't catch the error, the stack trace is (in bold the relevant messages):

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[PivotException: org.olap4j.OlapException: mondrian gave exception while parsing query]] at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293) at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:36) Caused by: org.pivot4j.PivotException: org.olap4j.OlapException: mondrian gave exception while parsing query at org.pivot4j.impl.PivotModelImpl.getCellSet(PivotModelImpl.java:598) at org.pivot4j.ui.table.TableRenderer.render(TableRenderer.java:425) at olap.process.RunOlap.doRunMdx(RunOlap.scala:91) at olap.process.RunOlap$$anonfun$runMdx$1.apply(RunOlap.scala:53) at olap.process.RunOlap$$anonfun$runMdx$1.apply(RunOlap.scala:51) at login.Authentication$LoggedAction$$anonfun$invokeBlock$1.apply(LoggedAction.scala:47) at login.Authentication$LoggedAction$$anonfun$invokeBlock$1.apply(LoggedAction.scala:42) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:36) Caused by: org.olap4j.OlapException: mondrian gave exception while parsing query at mondrian.olap4j.MondrianOlap4jConnection$Helper.createException(MondrianOlap4jConnection.java:858) at mondrian.olap4j.MondrianOlap4jStatement.parseQuery(MondrianOlap4jStatement.java:375) at mondrian.olap4j.MondrianOlap4jStatement.executeOlapQuery(MondrianOlap4jStatement.java:346) at org.pivot4j.impl.PivotModelImpl.executeMdx(PivotModelImpl.java:646) at org.pivot4j.impl.PivotModelImpl.getCellSet(PivotModelImpl.java:596) at org.pivot4j.ui.table.TableRenderer.render(TableRenderer.java:425) at olap.process.RunOlap.doRunMdx(RunOlap.scala:91) at olap.process.RunOlap$$anonfun$runMdx$1.apply(RunOlap.scala:53) at olap.process.RunOlap$$anonfun$runMdx$1.apply(RunOlap.scala:51) at login.Authentication$LoggedAction$$anonfun$invokeBlock$1.apply(LoggedAction.scala:47)

Caused by: mondrian.olap.MondrianException: Mondrian Error: MDX object '[Measures].[Unit Cost]' not found in cube 'Sales'

Mondrian is the one that is originating the error, and I need to get the message that is throwing:

 MDX object '[Measures].[Unit Cost]' not found in cube 'Sales'

I tried:

try {
     renderer.render(model, new HtmlRenderCallback(sw)) 
}
catch {
  case ex: MondrianException => println(ex.getMessage)
}

But is not catching the error.

Upvotes: 0

Views: 127

Answers (1)

ps0604
ps0604

Reputation: 1071

Use Apache Commons ExceptionUtils to get the root exception.

Upvotes: 0

Related Questions