[ 
https://issues.apache.org/jira/browse/TUSCANY-3698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12916459#action_12916459
 ] 

Padraig Myers commented on TUSCANY-3698:
----------------------------------------

The problem here isn't so much that we are using ServiceRuntimeException, it is 
that we are initializing it with o.getMessage(), thus removing the stack trace.

If the exception is already an instanceof RuntimeException, then we should be 
able to put it directly into the ObjectMessage object, thus eliminating the 
need for the "if (o instanceof RuntimeException) { "

As I understand it you are suggesting 
     message.setObject(new ServiceRuntimeException(o.getMessage())); , 
should be 
    message.setObject(new RuntimeException(o.getMessage())); 
this however will still remove the stack, replacing it with 
    message.setObject(new RuntimeException(o));
will leave the stack, but we just end up wrapping it in a RuntimeException for 
no real reason, if its already an instanceof RuntimeException the client should 
be able to handle it.

> JMS Binding erases the stack trace of RuntimeException's
> --------------------------------------------------------
>
>                 Key: TUSCANY-3698
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3698
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA JMS Binding Extension
>    Affects Versions: Java-SCA-1.5, Java-SCA-1.5.1, Java-SCA-1.6, 
> Java-SCA-2.0-M1,  Java-SCA-2.0-M2, Java-SCA-2.0-M3, Java-SCA-2.0-M4, 
> Java-SCA-2.0-M5
>         Environment: Tuscany Java SCA 1.6
> Windows XP SP3
> JDK 1.6
>            Reporter: Padraig Myers
>             Fix For: Java-SCA-1.6, Java-SCA-2.0-M5
>
>         Attachments: Patch_TUSCANY-3698
>
>
> In the file 
> org.apache.tuscany.sca.binding.jms.provider.AbstractMessageProcessor there is 
> a method createFaultMessage(), this method creates a JMS fault message from 
> an exception that is passed into the method.
> However if the messages is a RuntimeException a new exception is created, 
> thereby losing the stack trace from the original exception.
> The offending piece of code is 
>             ObjectMessage message = session.createObjectMessage();
>             String causeMsg;
>             if (o instanceof RuntimeException) {
>                 message.setObject(new 
> ServiceRuntimeException(o.getMessage()));
>             } else {
>                 // for a checked exception return the checked exception
>                 message.setObject(o);
>             }
>             message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, 
> true);
>             return message;
> there is no reason that RuntimeException's should be treated any differently 
> and therefore the code above can be replaced with
>             ObjectMessage message = session.createObjectMessage();
>             message.setObject(o);
>             message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, 
> true);
>             return message;
> This means that the component that gets this JMS message will be able to log 
> the true source of the exception and not lose all the stack trace information.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to