Discussion:
[Ikvm-developers] ByteCodeHelper.MapException issue?
Yves Langisch
2016-02-03 13:45:02 UTC
Permalink
Hi,

I have a converted Java class which does some threading stuff. My Callable implementations are in C#, the executing and control logic is in the converted class.

I catch exceptions in the Callable implementations as follows:

...
catch(java.lang.Exception e) {
log.fatal(String.format("Failure running background task. %s", e.getMessage()), e);
throw e;
}


It looks like that not all C# exceptions are properly handled in the converted Java class. The snippet above is converted to C# as follows:

...
catch (System.Exception ex)
{
int num = 0;
java.lang.Exception exception2 = ByteCodeHelper.MapException<java.lang.Exception>(ex, (ByteCodeHelper.MapFlags) num);
if (exception2 == null)
{
throw;
}
else
{
exception1 = exception2;
goto label_9;
}
}

label_9:
java.lang.Exception exception3 = exception1;
SessionBackgroundAction.log.fatal((object) java.lang.String.format("Failure running background task. %s", (object) Throwable.instancehelper_getMessage((System.Exception) exception3)), (System.Exception) exception3);
throw Throwable.__\u003Cunmap\u003E((System.Exception) exception3);
...

When throwing a C# exception in my Callable implementations I expect to see the fatal log statement which I do not. Depending on the exception, ByteCodeHelper.MapException returns null for all non-Java exceptions.

java.lang.Exception exception1 = ByteCodeHelper.MapException<java.lang.Exception>(new Win32Exception(), (ByteCodeHelper.MapFlags)0);
—> NULL (NOK)
java.lang.Exception exception2 = ByteCodeHelper.MapException<java.lang.Exception>(new java.lang.RuntimeException(), (ByteCodeHelper.MapFlags)0);
—> NOT NULL (OK)
java.lang.Exception exception3 = ByteCodeHelper.MapException<java.lang.Exception>(new System.Exception(), (ByteCodeHelper.MapFlags)0);
—> NULL (NOK)

I expect to see the log statement in all cases. Am i overlooking anything?

Best,
Yves
Jeroen Frijters
2016-02-03 14:41:25 UTC
Permalink
Hi Yves,

Unless your C# exception extends java.lang.Exception, it won't be caught. If you want to catch everything you need to catch java.lang.Throwable.

Regards,
Jeroen
-----Original Message-----
Sent: Wednesday, February 3, 2016 14:45
Subject: [Ikvm-developers] ByteCodeHelper.MapException issue?
Hi,
I have a converted Java class which does some threading stuff. My
Callable implementations are in C#, the executing and control logic is
in the converted class.
...
catch(java.lang.Exception e) {
log.fatal(String.format("Failure running background task. %s", e.getMessage()), e);
throw e;
}

It looks like that not all C# exceptions are properly handled in the
...
catch (System.Exception ex)
{
int num = 0;
java.lang.Exception exception2 =
ByteCodeHelper.MapException<java.lang.Exception>(ex,
(ByteCodeHelper.MapFlags) num);
if (exception2 == null)
{
throw;
}
else
{
exception1 = exception2;
goto label_9;
}
}

java.lang.Exception exception3 = exception1;
SessionBackgroundAction.log.fatal((object)
java.lang.String.format("Failure running background task. %s", (object)
Throwable.instancehelper_getMessage((System.Exception) exception3)),
(System.Exception) exception3);
throw Throwable.__\u003Cunmap\u003E((System.Exception)
exception3);
...
When throwing a C# exception in my Callable implementations I expect to
see the fatal log statement which I do not. Depending on the exception,
ByteCodeHelper.MapException returns null for all non-Java exceptions.
java.lang.Exception exception1 =
ByteCodeHelper.MapException<java.lang.Exception>(new Win32Exception(),
(ByteCodeHelper.MapFlags)0);
—> NULL (NOK)
java.lang.Exception exception2 =
ByteCodeHelper.MapException<java.lang.Exception>(new
java.lang.RuntimeException(), (ByteCodeHelper.MapFlags)0);
—> NOT NULL (OK)
java.lang.Exception exception3 =
ByteCodeHelper.MapException<java.lang.Exception>(new System.Exception(),
(ByteCodeHelper.MapFlags)0);
—> NULL (NOK)
I expect to see the log statement in all cases. Am i overlooking anything?
Best,
Yves
------------------------------------------------------------------------
------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Ikvm-developers mailing list
https://lists.sourceforge.net/lists/listinfo/ikvm-developers
Loading...