Sha256: aaee52d9a5fd76ad51a80d3a037edd5855d77c45445f824fe3e0bd2c3f922010
Contents?: true
Size: 1.58 KB
Versions: 2
Compression:
Stored size: 1.58 KB
Contents
module Mondrian module OLAP NATIVE_ERROR_REGEXP = /^(org\.olap4j\.|mondrian\.|java\.lang\.reflect\.UndeclaredThrowableException\: Mondrian Error\:)/ class Error < StandardError # root_cause will be nil if there is no cause for wrapped native error # root_cause_message will have either root_cause message or wrapped native error message attr_reader :native_error, :root_cause_message, :root_cause def initialize(native_error) @native_error = native_error get_root_cause super(native_error.message) add_root_cause_to_backtrace end def self.wrap_native_exception yield rescue NativeException => e if e.message =~ NATIVE_ERROR_REGEXP raise Mondrian::OLAP::Error.new(e) else raise end end private def get_root_cause @root_cause = nil e = @native_error while e.respond_to?(:cause) && (cause = e.cause) @root_cause = e = cause end message = e.message if message =~ /\AMondrian Error:(.*)\Z/m message = $1 end @root_cause_message = message end def add_root_cause_to_backtrace bt = @native_error.backtrace if @root_cause root_cause_bt = Array(@root_cause.backtrace) root_cause_bt[0,5].reverse.each do |bt_line| bt.unshift "root cause: #{bt_line}" end bt.unshift "root cause: #{@root_cause.java_class.name}: #{@root_cause.message.chomp}" end set_backtrace bt end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
mondrian-olap-0.5.0 | lib/mondrian/olap/error.rb |
mondrian-olap-0.4.0-java | lib/mondrian/olap/error.rb |