I created a new jira and will commit my changes if you don't have a better
way to support my requirement.

https://issues.apache.org/jira/browse/CXF-6136


On Fri, Dec 5, 2014 at 3:23 AM, Jason Pell <[email protected]> wrote:

> This actually allows me a great deal of control over the web service impl.
>
> This will cause a soap fault to be returned in a reply message:
>             throw new SomeFault("Invalid user");
>
> This will cause the message to be rolled back:
>             throw new RuntimeException("Error user");
>
>
>
> On Fri, Dec 5, 2014 at 3:22 AM, Jason Pell <[email protected]> wrote:
>
>> Hi Christian,
>>
>> I have a proposed change to JMSDestination to ignore checked exceptions
>> inside Faults.
>>
>> Be interested in your thoughts
>>
>> diff --git
>> a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
>> b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
>> index dcfc329..0348076 100644
>> ---
>> a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
>> +++
>> b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
>> @@ -55,6 +55,8 @@ public class JMSConfiguration implements
>> InitializingBean {
>>      private PlatformTransactionManager transactionManager;
>>      private boolean wrapInSingleConnectionFactory = true;
>>      private TaskExecutor taskExecutor;
>> +    private boolean rollbackCheckedExceptions = true;
>> +
>>      private boolean useJms11 = DEFAULT_USEJMS11;
>>      private boolean reconnectOnException = true;
>>      private boolean createSecurityContext = true;
>> @@ -117,6 +119,14 @@ public class JMSConfiguration implements
>> InitializingBean {
>>          }
>>      }
>>
>> +    public boolean isRollbackCheckedExceptions() {
>> +        return rollbackCheckedExceptions;
>> +    }
>> +
>> +    public void setRollbackCheckedExceptions(boolean
>> rollbackCheckedExceptions) {
>> +        this.rollbackCheckedExceptions = rollbackCheckedExceptions;
>> +    }
>> +
>>      public boolean isCreateSecurityContext() {
>>          return createSecurityContext;
>>      }
>> diff --git
>> a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
>> b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
>> index 1a81687..e9e07c7 100644
>> ---
>> a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
>> +++
>> b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
>> @@ -261,7 +261,7 @@ public class JMSDestination extends
>> AbstractMultiplexDestination
>>                          Exception ex =
>> inMessage.getContent(Exception.class);
>>                          if (ex.getCause() instanceof RuntimeException) {
>>                              throw (RuntimeException)ex.getCause();
>> -                        } else {
>> +                        } else if
>> (jmsConfig.isRollbackCheckedExceptions()) {
>>                              throw new RuntimeException(ex);
>>                          }
>>                      }
>>
>>
>> On Fri, Dec 5, 2014 at 2:52 AM, Jason Pell <[email protected]> wrote:
>>
>>> Yep it does work with the JMSTransactionManager set.  So I guess its
>>> just a documentation issue then.
>>>
>>> If I want some exceptions to be handled as soap faults - in a reply
>>> message, and some exceptions to cause rollback.
>>>
>>> Is that possible in cxf once i have enabled the JMSTransactionManager?
>>>
>>> I note the JMSDestination wraps non runtime exceptions in runtime
>>> exceptions., but ideally if I throw a business fault (a checked exception),
>>> then I would do the normal fault processing and send a response message
>>> with the fault.
>>>
>>> Any runtime exceptions would cause a roll back.
>>>
>>> Is there some cxf interceptor magic I might be able to do?
>>>
>>>
>>>
>>>
>>>
>>> On Fri, Dec 5, 2014 at 2:09 AM, Christian Schneider <
>>> [email protected]> wrote:
>>>
>>>> Yes. For CXF 2.x you need a spring PlatformTransactionManager. This can
>>>> then be a specific manager for JMS or a real JTA Transaction manager.
>>>> Does it then work?
>>>>
>>>> Christian
>>>>
>>>>
>>>> On 04.12.2014 15:34, Jason Pell wrote:
>>>>
>>>>> I have set this to true in the JMSCOnfiguration
>>>>>
>>>>> I am using CXF 2.7.x.  I cannot upgrade to 3.x, so I need to get this
>>>>> working using the JMS Configuration style.
>>>>>
>>>>> What I am trying to get working is JMS managed transactions.  So If I
>>>>> throw
>>>>> an runtime exception from my JAX-WS Implementation, I would expect the
>>>>> message to be rolled back.
>>>>>
>>>>> However this does not work as expected.  The JMSDestination expects a
>>>>> PlatformTransactionManager to be configured in order for the rollback
>>>>> process of the JMS Listener in spring to be executed.
>>>>>
>>>>> I managed to get further by using
>>>>>
>>>>> jmsConfig.setTransactionManager(new
>>>>> JmsTransactionManager(connectionFactory));
>>>>>
>>>>> Is this a bug in the cxf jms support or am I misunderstanding?
>>>>>
>>>>>
>>>>
>>>> --
>>>> Christian Schneider
>>>> http://www.liquid-reality.de
>>>>
>>>> Open Source Architect
>>>> http://www.talend.com
>>>>
>>>>
>>>
>>
>

Reply via email to