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 <ja...@pellcorp.com> 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 <ja...@pellcorp.com> 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 < >> ch...@die-schneider.net> 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 >>> >>> >> >