Author: rgodfrey
Date: Mon Apr 27 15:01:28 2015
New Revision: 1676290

URL: http://svn.apache.org/r1676290
Log:
QPID-6512 : More consistent handling of (JMS) exception chaining [work done by 
Lorenz Quack]

Added:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java
   (with props)
Removed:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/JMSAMQException.java
Modified:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
    qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQTopic.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_8.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_8.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedListMessage.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSTextMessage.java
    
qpid/java/trunk/jca/src/main/java/org/apache/qpid/ra/QpidRASessionFactoryImpl.java
    
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java 
(original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnection.java 
Mon Apr 27 15:01:28 2015
@@ -22,7 +22,6 @@ package org.apache.qpid.client;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
-import java.net.ConnectException;
 import java.net.SocketAddress;
 import java.net.UnknownHostException;
 import java.nio.channels.UnresolvedAddressException;
@@ -68,6 +67,7 @@ import org.apache.qpid.client.failover.F
 import org.apache.qpid.client.protocol.AMQProtocolHandler;
 import org.apache.qpid.client.security.CallbackHandlerRegistry;
 import org.apache.qpid.client.state.AMQStateManager;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.QpidProperties;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.exchange.ExchangeDefaults;
@@ -857,7 +857,7 @@ public class AMQConnection extends Close
                 }
                 catch (AMQException e)
                 {
-                    throw new JMSAMQException(e);
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException("Connection.start failed"), e);
                 }
             }
 
@@ -877,7 +877,7 @@ public class AMQConnection extends Close
                 }
                 catch (AMQException e)
                 {
-                    throw new JMSAMQException(e);
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException("Connection.stop failed."), e);
                 }
             }
 
@@ -943,10 +943,7 @@ public class AMQConnection extends Close
                 catch (JMSException e)
                 {
                     _logger.error("Error closing connection", e);
-                    JMSException jmse = new JMSException("Error closing 
connection: " + e);
-                    jmse.setLinkedException(e);
-                    jmse.initCause(e);
-                    throw jmse;
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error closing connection: " + e), e);
                 }
                 finally
                 {
@@ -1264,7 +1261,11 @@ public class AMQConnection extends Close
 
             if (code != null)
             {
-                je = new JMSException("Exception thrown against " + toString() 
+ ": " + cause, Integer.toString(code.getCode()));
+                je = JMSExceptionHelper.chainJMSException(new 
JMSException("Exception thrown against "
+                                                                           + 
toString()
+                                                                           + 
": "
+                                                                           + 
cause, Integer.toString(code.getCode())),
+                                                          cause);
             }
             else
             {
@@ -1280,15 +1281,11 @@ public class AMQConnection extends Close
                         cause = last;
                     }
                 }
-                je = new JMSException("Exception thrown against " + toString() 
+ ": " + cause);
+                je = JMSExceptionHelper.chainJMSException(new 
JMSException("Exception thrown against "
+                                                                           + 
toString()
+                                                                           + 
": "
+                                                                           + 
cause), cause);
             }
-
-            if (cause instanceof Exception)
-            {
-                je.setLinkedException((Exception) cause);
-            }
-
-            je.initCause(cause);
         }
 
         boolean closer = false;

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
 Mon Apr 27 15:01:28 2015
@@ -40,6 +40,7 @@ import org.apache.qpid.AMQException;
 import org.apache.qpid.client.failover.FailoverException;
 import org.apache.qpid.client.failover.FailoverProtectedOperation;
 import org.apache.qpid.client.transport.ClientConnectionDelegate;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.ServerPropertyNames;
 import org.apache.qpid.framing.ProtocolVersion;
 import org.apache.qpid.jms.BrokerDetails;
@@ -122,7 +123,7 @@ public class AMQConnectionDelegate_0_10
         catch (Exception e)
         {
             _logger.error("exception creating session:", e);
-            throw new JMSAMQException("cannot create session", e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("cannot create session"), e);
         }
         return session;
     }
@@ -164,7 +165,7 @@ public class AMQConnectionDelegate_0_10
         }
         catch (Exception e)
         {
-            throw new JMSAMQException("cannot create session", e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("cannot create session"), e);
         }
         return session;
     }
@@ -193,7 +194,7 @@ public class AMQConnectionDelegate_0_10
         }
         catch (Exception e)
         {
-            throw new JMSAMQException("cannot create session", e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("cannot create session"), e);
         }
         return session;
     }
@@ -381,11 +382,8 @@ public class AMQConnectionDelegate_0_10
                     {
                         code = close.getReplyCode().toString();
                     }
-
-                    JMSException ex = new JMSException(exc.getMessage(), code);
-                    ex.setLinkedException(exc);
-                    ex.initCause(exc);
-                    listener.onException(ex);
+                    
listener.onException(JMSExceptionHelper.chainJMSException(new 
JMSException(exc.getMessage(), code),
+                                                                              
exc));
                 }
             });
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_8_0.java
 Mon Apr 27 15:01:28 2015
@@ -44,6 +44,7 @@ import org.apache.qpid.client.failover.F
 import org.apache.qpid.client.protocol.AMQProtocolSession;
 import org.apache.qpid.client.state.AMQState;
 import org.apache.qpid.client.state.StateWaiter;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.ServerPropertyNames;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.framing.ChannelOpenBody;
@@ -277,10 +278,8 @@ public class AMQConnectionDelegate_8_0 i
                         }
                         catch (AMQException e)
                         {
-                            JMSException jmse = new JMSException("Error 
creating session: " + e);
-                            jmse.setLinkedException(e);
-                            jmse.initCause(e);
-                            throw jmse;
+                            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error creating session: " + e),
+                                                                       e);
                         }
                         finally
                         {
@@ -298,7 +297,7 @@ public class AMQConnectionDelegate_8_0 i
                             }
                             catch (AMQException e)
                             {
-                                throw new JMSAMQException(e);
+                                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Session.start failed"), e);
                             }
                         }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQConnectionFactory.java
 Mon Apr 27 15:01:28 2015
@@ -20,6 +20,7 @@
  */
 package org.apache.qpid.client;
 
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.jms.ConnectionURL;
 import org.apache.qpid.url.AMQBindingURL;
 import org.apache.qpid.url.URLSyntaxException;
@@ -125,10 +126,8 @@ public class AMQConnectionFactory implem
         }
         catch (Exception e)
         {
-            JMSException jmse = new JMSException("Error creating connection: " 
+ e.getMessage());
-            jmse.setLinkedException(e);
-            jmse.initCause(e);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new JMSException("Error 
creating connection: " + e.getMessage()),
+                                                       e);
         }
     }
 
@@ -159,10 +158,8 @@ public class AMQConnectionFactory implem
             }
             catch (Exception e)
             {
-                JMSException jmse = new JMSException("Error creating 
connection: " + e.getMessage());
-                jmse.setLinkedException(e);
-                jmse.initCause(e);
-                throw jmse;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error creating connection: "
+                                                                            + 
e.getMessage()), e);
             }
         }
         else
@@ -302,10 +299,8 @@ public class AMQConnectionFactory implem
         }
         catch (Exception e)
         {
-            JMSException jmse = new JMSException("Error creating connection: " 
+ e.getMessage());
-            jmse.setLinkedException(e);
-            jmse.initCause(e);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new JMSException("Error 
creating connection: " + e.getMessage()),
+                                                       e);
         }
     }
 
@@ -339,10 +334,8 @@ public class AMQConnectionFactory implem
             }
             catch (Exception e)
             {
-                JMSException jmse = new JMSException("Error creating XA 
Connection: " + e.getMessage());
-                jmse.setLinkedException(e);
-                jmse.initCause(e);
-                throw jmse;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error creating XA Connection: "
+                                                                            + 
e.getMessage()), e);
             }
         }
         else

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQQueueBrowser.java
 Mon Apr 27 15:01:28 2015
@@ -25,6 +25,7 @@ import javax.jms.InvalidSelectorExceptio
 import org.apache.qpid.AMQException;
 import org.apache.qpid.AMQInternalException;
 import org.apache.qpid.client.filter.JMSSelectorFilter;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.protocol.AMQConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -93,9 +94,9 @@ public class AMQQueueBrowser implements
             }
             else
             {
-                final JMSException jmsException = new 
JMSException(e.getMessage(), String.valueOf(e.getErrorCode().getCode()));
-                jmsException.setLinkedException(e);
-                throw jmsException;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException(e.getMessage(),
+                                                                            
String.valueOf(e.getErrorCode().getCode())),
+                                                           e);
             }
         }
     }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java 
(original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession.java 
Mon Apr 27 15:01:28 2015
@@ -70,6 +70,7 @@ import org.apache.qpid.client.message.Me
 import org.apache.qpid.client.message.UnprocessedMessage;
 import org.apache.qpid.client.messaging.address.Node;
 import org.apache.qpid.client.util.FlowControllingBlockingQueue;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.exchange.ExchangeDefaults;
@@ -475,12 +476,8 @@ public abstract class AMQSession<C exten
             AMQException ex = getLastException();
             if (ex != null)
             {
-                IllegalStateException ssnClosed = new IllegalStateException(
-                        "Session has been closed", 
ex.getErrorCode().toString());
-
-                ssnClosed.setLinkedException(ex);
-                ssnClosed.initCause(ex);
-                throw ssnClosed;
+                throw JMSExceptionHelper.chainJMSException(new 
IllegalStateException("Session has been closed",
+                                                                               
      ex.getErrorCode().toString()), ex);
             }
             else
             {
@@ -771,10 +768,7 @@ public abstract class AMQSession<C exten
             }
             catch (AMQException e)
             {
-                JMSException jmse = new JMSException("Error closing session: " 
+ e);
-                jmse.setLinkedException(e);
-                jmse.initCause(e);
-                throw jmse;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error closing session: " + e), e);
             }
             // This is ignored because the channel is already marked as closed 
so the fail-over process will
             // not re-open it.
@@ -886,7 +880,8 @@ public abstract class AMQSession<C exten
         }
         catch (FailoverException e)
         {
-            throw new JMSAMQException("Fail-over interrupted commit. Status of 
the commit is uncertain.", e);
+            throw JMSExceptionHelper.chainJMSException(new JMSException(
+                    "Fail-over interrupted commit. Status of the commit is 
uncertain."), e);
         }
         catch(TransportException e)
         {
@@ -1287,10 +1282,7 @@ public abstract class AMQSession<C exten
         catch (URISyntaxException urlse)
         {
             _logger.error("", urlse);
-            JMSException jmse = new JMSException(urlse.getReason());
-            jmse.setLinkedException(urlse);
-            jmse.initCause(urlse);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException(urlse.getReason()), urlse);
         }
 
     }
@@ -1518,7 +1510,8 @@ public abstract class AMQSession<C exten
         }
         catch(Exception e)
         {
-            throw new JMSAMQException("Cannot create temporary queue: " + 
e.getMessage(), e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Cannot create temporary queue: "
+                                                                        + 
e.getMessage()), e);
         }
     }
 
@@ -1580,10 +1573,7 @@ public abstract class AMQSession<C exten
         catch (URISyntaxException urlse)
         {
             _logger.error("", urlse);
-            JMSException jmse = new JMSException(urlse.getReason());
-            jmse.setLinkedException(urlse);
-            jmse.initCause(urlse);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException(urlse.getReason()), urlse);
         }
     }
 
@@ -1829,7 +1819,8 @@ public abstract class AMQSession<C exten
         }
         catch (FailoverException e)
         {
-            throw new JMSAMQException("Recovery was interrupted by fail-over. 
Recovery status is not known.", e);
+            throw JMSExceptionHelper.chainJMSException(new JMSException(
+                    "Recovery was interrupted by fail-over. Recovery status is 
not known."), e);
         }
         catch(TransportException e)
         {
@@ -1915,7 +1906,8 @@ public abstract class AMQSession<C exten
             }
             catch (FailoverException e)
             {
-                throw new JMSAMQException("Fail-over interrupted rollback. 
Status of the rollback is uncertain.", e);
+                throw JMSExceptionHelper.chainJMSException(new JMSException(
+                        "Fail-over interrupted rollback. Status of the 
rollback is uncertain."), e);
             }
             catch (TransportException e)
             {
@@ -2082,17 +2074,15 @@ public abstract class AMQSession<C exten
                         }
                         catch (AMQInvalidArgumentException ise)
                         {
-                            JMSException jmse = new 
InvalidSelectorException(ise.getMessage());
-                            jmse.setLinkedException(ise);
-                            jmse.initCause(ise);
-                            throw jmse;
+                            throw JMSExceptionHelper.chainJMSException(new 
InvalidSelectorException(ise.getMessage()),
+                                                                       ise);
                         }
                         catch (AMQInvalidRoutingKeyException e)
                         {
-                            JMSException jmse = new 
InvalidDestinationException("Invalid routing key:" + 
amqd.getRoutingKey().toString());
-                            jmse.setLinkedException(e);
-                            jmse.initCause(e);
-                            throw jmse;
+                            throw JMSExceptionHelper.chainJMSException(new 
InvalidDestinationException(
+                                    "Invalid routing key:"
+                                    + amqd.getRoutingKey().toString()
+                            ), e);
                         }
                         catch (AMQException e)
                         {
@@ -3619,10 +3609,7 @@ public abstract class AMQSession<C exten
     JMSException toJMSException(String message, TransportException e)
     {
         int code = getErrorCode(e);
-        JMSException jmse = new JMSException(message, Integer.toString(code));
-        jmse.setLinkedException(e);
-        jmse.initCause(e);
-        return jmse;
+        return JMSExceptionHelper.chainJMSException(new JMSException(message, 
Integer.toString(code)), e);
     }
 
     private int getErrorCode(TransportException e)
@@ -3646,15 +3633,14 @@ public abstract class AMQSession<C exten
         AMQConstant errorCode = e.getErrorCode();
         if (errorCode == AMQConstant.ACCESS_REFUSED)
         {
-            ex = new JMSSecurityException(message, 
String.valueOf(errorCode.getCode()));
+            ex = JMSExceptionHelper.chainJMSException(new 
JMSSecurityException(message,
+                                                                               
String.valueOf(errorCode.getCode())), e);
         }
         else
         {
-            ex = new JMSException(message, errorCode == null ? null : 
String.valueOf(errorCode.getCode()));
+            String errorCode1 = errorCode == null ? null : 
String.valueOf(errorCode.getCode());
+            ex = JMSExceptionHelper.chainJMSException(new 
JMSException(message, errorCode1), e);
         }
-        ex.initCause(e);
-
-        ex.setLinkedException(e);
         return ex;
     }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java 
(original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQSession_0_8.java 
Mon Apr 27 15:01:28 2015
@@ -27,7 +27,6 @@ import static org.apache.qpid.configurat
 import static 
org.apache.qpid.configuration.ClientProperties.QPID_FLOW_CONTROL_WAIT_NOTIFY_PERIOD;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -60,6 +59,7 @@ import org.apache.qpid.client.protocol.A
 import org.apache.qpid.client.state.AMQState;
 import org.apache.qpid.client.state.AMQStateManager;
 import org.apache.qpid.client.state.listener.SpecificMethodFrameListener;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.framing.*;
@@ -150,7 +150,8 @@ public class AMQSession_0_8 extends AMQS
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException(e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Session.reduceCreditAfterAcknowledge failed"),
+                                                       e);
         }
         while (true)
         {
@@ -173,7 +174,7 @@ public class AMQSession_0_8 extends AMQS
         }
         catch (AMQException a)
         {
-            throw new JMSAMQException("Failed to sync after acknowledge", a);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Failed to sync after acknowledge"), a);
         }
     }
 
@@ -442,7 +443,8 @@ public class AMQSession_0_8 extends AMQS
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException("Queue bound query failed: " + 
e.getMessage(), e);
+            throw JMSExceptionHelper.chainJMSException(new JMSException("Queue 
bound query failed: " + e.getMessage()),
+                                                       e);
         }
     }
 
@@ -746,11 +748,7 @@ public class AMQSession_0_8 extends AMQS
        }
        catch (AMQException e)
        {
-           JMSException ex = new JMSException("Error creating producer");
-           ex.initCause(e);
-           ex.setLinkedException(e);
-
-           throw ex;
+           throw JMSExceptionHelper.chainJMSException(new JMSException("Error 
creating producer"), e);
        }
     }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQTopic.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQTopic.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQTopic.java 
(original)
+++ qpid/java/trunk/client/src/main/java/org/apache/qpid/client/AMQTopic.java 
Mon Apr 27 15:01:28 2015
@@ -26,6 +26,7 @@ import javax.jms.InvalidDestinationExcep
 import javax.jms.JMSException;
 import javax.jms.Topic;
 
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.exchange.ExchangeDefaults;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.messaging.Address;
@@ -138,10 +139,7 @@ public class AMQTopic extends AMQDestina
                 }
                 catch(Exception e)
                 {
-                    JMSException ex = new JMSException("Error creating durable 
topic");
-                    ex.initCause(e);
-                    ex.setLinkedException(e);
-                    throw ex;
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error creating durable topic"), e);
                 }
             }
             else

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java
 Mon Apr 27 15:01:28 2015
@@ -48,6 +48,7 @@ import org.apache.qpid.client.message.AM
 import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpid.client.message.CloseConsumerMessage;
 import org.apache.qpid.client.message.MessageFactoryRegistry;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.framing.FieldTable;
@@ -171,9 +172,8 @@ public abstract class BasicMessageConsum
         }
         catch (final AMQInternalException ie)
         {
-            InvalidSelectorException ise = new 
InvalidSelectorException("cannot create consumer because of selector issue");
-            ise.setLinkedException(ie);
-            throw ise;
+            throw JMSExceptionHelper.chainJMSException(new 
InvalidSelectorException(
+                    "cannot create consumer because of selector issue"), ie);
         }
 
         // Force queue browsers not to use acknowledge modes.
@@ -552,14 +552,8 @@ public abstract class BasicMessageConsum
         // errors are passed via the queue too since there is no way of 
interrupting the poll() via the API.
         if (o instanceof Throwable)
         {
-            JMSException e = new JMSException("Message consumer forcibly 
closed due to error: " + o);
-            e.initCause((Throwable) o);
-            if (o instanceof Exception)
-            {
-                e.setLinkedException((Exception) o);
-            }
-
-            throw e;
+            throw JMSExceptionHelper.chainJMSException(new JMSException(
+                    "Message consumer forcibly closed due to error: " + o), 
(Throwable) o);
         }
         else if (o instanceof CloseConsumerMessage)
         {
@@ -624,11 +618,12 @@ public abstract class BasicMessageConsum
                 }
                 catch (AMQException e)
                 {
-                    throw new JMSAMQException("Error closing consumer: " + e, 
e);
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException("Error closing consumer: " + e.getMessage()), e);
                 }
                 catch (FailoverException e)
                 {
-                    throw new JMSAMQException("FailoverException interrupted 
basic cancel.", e);
+                    throw JMSExceptionHelper.chainJMSException(new 
JMSException(
+                            "FailoverException interrupted basic cancel."), e);
                 }
                 catch (TransportException e)
                 {

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_10.java
 Mon Apr 27 15:01:28 2015
@@ -34,6 +34,7 @@ import org.apache.qpid.client.message.AM
 import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpid.client.message.MessageFactoryRegistry;
 import org.apache.qpid.client.message.UnprocessedMessage_0_10;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.ServerPropertyNames;
 import org.apache.qpid.framing.FieldTable;
 import org.apache.qpid.jms.Session;
@@ -580,7 +581,7 @@ public class BasicMessageConsumer_0_10 e
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException(e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("BasicMessageConsumer.receive failed"), e);
         }
     }
 
@@ -614,7 +615,8 @@ public class BasicMessageConsumer_0_10 e
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException(e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("BasicMessageConsumer.receiveNoWait failed."),
+                                                       e);
         }
 
     }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_8.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_8.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_8.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer_0_8.java
 Mon Apr 27 15:01:28 2015
@@ -33,6 +33,7 @@ import org.apache.qpid.client.message.AM
 import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpid.client.message.MessageFactoryRegistry;
 import org.apache.qpid.client.message.UnprocessedMessage_0_8;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.common.AMQPFilterTypes;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.framing.AMQFrame;
@@ -193,7 +194,7 @@ public class BasicMessageConsumer_0_8 ex
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException(e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("BasicMessageConsumer.receive failed."), e);
         }
     }
 
@@ -226,7 +227,8 @@ public class BasicMessageConsumer_0_8 ex
         }
         catch (AMQException e)
         {
-            throw new JMSAMQException(e);
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("BasicMessageConsumer.receiveNoWait failed"),
+                                                       e);
         }
     }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java
 Mon Apr 27 15:01:28 2015
@@ -39,6 +39,7 @@ import org.slf4j.Logger;
 import org.apache.qpid.AMQException;
 import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpid.client.message.MessageConverter;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.transport.TransportException;
 import org.apache.qpid.util.UUIDGen;
 import org.apache.qpid.util.UUIDs;
@@ -308,10 +309,8 @@ public abstract class BasicMessageProduc
             }
             catch (AMQException e)
             {
-                JMSException ex = new JMSException("Exception while closing 
producer:" + e.getMessage());
-                ex.setLinkedException(e);
-                ex.initCause(e);
-                throw ex;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Exception while closing producer:"
+                                                                            + 
e.getMessage()), e);
             }
         }
     }
@@ -481,11 +480,8 @@ public abstract class BasicMessageProduc
             }
             catch(Exception e)
             {
-                JMSException ex = new InvalidDestinationException("Error 
validating destination");
-                ex.initCause(e);
-                ex.setLinkedException(e);
-
-                throw ex;
+                throw JMSExceptionHelper.chainJMSException(new 
InvalidDestinationException(
+                        "Error validating destination"), e);
             }
             amqDestination.setExchangeExistsChecked(true);
         }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_10.java
 Mon Apr 27 15:01:28 2015
@@ -39,6 +39,7 @@ import org.apache.qpid.client.message.AM
 import org.apache.qpid.client.message.AbstractJMSMessage;
 import org.apache.qpid.client.message.QpidMessageProperties;
 import org.apache.qpid.client.messaging.address.Link.Reliability;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.transport.DeliveryProperties;
 import org.apache.qpid.transport.Header;
 import org.apache.qpid.transport.MessageAcceptMode;
@@ -257,10 +258,8 @@ public class BasicMessageProducer_0_10 e
         }
         catch (Exception e)
         {
-            JMSException jmse = new JMSException("Exception when sending 
message:" + e.getMessage());
-            jmse.setLinkedException(e);
-            jmse.initCause(e);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Exception when sending message:"
+                                                                        + 
e.getMessage()), e);
         }
     }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_8.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_8.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_8.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/BasicMessageProducer_0_8.java
 Mon Apr 27 15:01:28 2015
@@ -38,6 +38,7 @@ import org.apache.qpid.client.message.Ab
 import org.apache.qpid.client.message.QpidMessageProperties;
 import org.apache.qpid.client.protocol.AMQProtocolHandler;
 import org.apache.qpid.client.protocol.BlockingMethodFrameListener;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.configuration.ClientProperties;
 import org.apache.qpid.framing.AMQFrame;
 import org.apache.qpid.framing.AMQMethodBody;
@@ -242,10 +243,8 @@ public class BasicMessageProducer_0_8 ex
         }
         catch (InterruptedException e)
         {
-            JMSException jmse = new JMSException("Interrupted while waiting 
for flow control to be removed");
-            jmse.setLinkedException(e);
-            jmse.initCause(e);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new JMSException(
+                    "Interrupted while waiting for flow control to be 
removed"), e);
         }
 
         AMQConnectionDelegate_8_0 connectionDelegate80 = 
(AMQConnectionDelegate_8_0) (getConnection().getDelegate());
@@ -274,11 +273,12 @@ public class BasicMessageProducer_0_8 ex
             }
             catch (AMQException e)
             {
-                throw new JMSAMQException(e);
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException(e.getMessage()), e);
             }
             catch (FailoverException e)
             {
-                throw new JMSAMQException("Fail-over interrupted send. Status 
of the send is uncertain.", e);
+                throw JMSExceptionHelper.chainJMSException(new JMSException(
+                        "Fail-over interrupted send. Status of the send is 
uncertain."), e);
 
             }
         }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
 Mon Apr 27 15:01:28 2015
@@ -46,6 +46,7 @@ import org.apache.qpid.AMQPInvalidClassE
 import org.apache.qpid.client.AMQDestination;
 import org.apache.qpid.client.AMQDestination.DestSyntax;
 import org.apache.qpid.client.CustomJMSXProperty;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.jms.Message;
 import org.apache.qpid.transport.DeliveryProperties;
@@ -322,17 +323,13 @@ public class AMQMessageDelegate_0_10 ext
            }
            catch(AMQException ex)
            {
-               JMSException e = new JMSException("Error occured while figuring 
out the node type");
-               e.initCause(ex);
-               e.setLinkedException(ex);
-               throw e;
+               throw JMSExceptionHelper.chainJMSException(new JMSException(
+                       "Error occured while figuring out the node type"), ex);
            }
            catch (TransportException e)
            {
-               JMSException jmse = new JMSException("Exception occured while 
figuring out the node type:" + e.getMessage());
-               jmse.initCause(e);
-               jmse.setLinkedException(e);
-               throw jmse;
+               throw JMSExceptionHelper.chainJMSException(new JMSException(
+                       "Exception occured while figuring out the node type:" + 
e.getMessage()), e);
            }
         }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedListMessage.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedListMessage.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedListMessage.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AMQPEncodedListMessage.java
 Mon Apr 27 15:01:28 2015
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.AMQException;
 
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.transport.codec.BBDecoder;
 import org.apache.qpid.transport.codec.BBEncoder;
 
@@ -97,11 +98,7 @@ public class AMQPEncodedListMessage exte
         }
         catch (Exception e)
         {
-            MessageFormatException ex = new MessageFormatException("Error 
adding to ListMessage");
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
-
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException("Error adding to ListMessage"), e);
         }
     }
 
@@ -115,11 +112,8 @@ public class AMQPEncodedListMessage exte
         }
         catch (Exception e)
         {
-            MessageFormatException ex = new MessageFormatException("Error 
adding to ListMessage at "
-                    + index);
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException("Error adding to ListMessage at "
+                                                                               
   + index), e);
         }
     }
 
@@ -131,10 +125,7 @@ public class AMQPEncodedListMessage exte
         }
         catch (Exception e)
         {
-            JMSException ex = new JMSException("Error when looking up object");
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new JMSException("Error 
when looking up object"), e);
         }
     }
 
@@ -146,11 +137,8 @@ public class AMQPEncodedListMessage exte
         }
         catch (IndexOutOfBoundsException e)
         {
-            MessageFormatException ex = new MessageFormatException(
-                    "Error getting ListMessage element at " + index);
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException(
+                    "Error getting ListMessage element at " + index), e);
         }
     }
 
@@ -173,11 +161,8 @@ public class AMQPEncodedListMessage exte
         }
         catch (IndexOutOfBoundsException e)
         {
-            MessageFormatException ex = new MessageFormatException(
-                    "Error removing ListMessage element at " + index);
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException(
+                    "Error removing ListMessage element at " + index), e);
         }
     }
 
@@ -197,11 +182,8 @@ public class AMQPEncodedListMessage exte
         }
         catch (Exception e)
         {
-            MessageFormatException ex = new MessageFormatException(
-                    "Error setting ListMessage element at " + index);
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException(
+                    "Error setting ListMessage element at " + index), e);
         }
     }
 
@@ -239,10 +221,7 @@ public class AMQPEncodedListMessage exte
         }
         catch (NumberFormatException e)
         {
-            JMSException ex = new JMSException("Invalid index string");
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Invalid index string"), e);
         }
         if (isValidIndex(index))
             return index;
@@ -262,10 +241,8 @@ public class AMQPEncodedListMessage exte
         }
         catch (NumberFormatException e)
         {
-            JMSException ex = new JMSException("The property name should be a 
valid index");
-            ex.initCause(e);
-            ex.setLinkedException(e);
-            throw ex;
+            throw JMSExceptionHelper.chainJMSException(new JMSException("The 
property name should be a valid index"),
+                                                       e);
         }
 
         if (isValidIndex(index))

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java
 Mon Apr 27 15:01:28 2015
@@ -22,6 +22,7 @@
 package org.apache.qpid.client.message;
 
 import org.apache.qpid.AMQException;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.transport.util.Functions;
 
 import javax.jms.JMSException;
@@ -98,10 +99,7 @@ public abstract class AbstractBytesTyped
         }
         catch (Exception e)
         {
-            JMSException jmse = new JMSException(e.toString());
-            jmse.setLinkedException(e);
-            jmse.initCause(e);
-            throw jmse;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException(e.toString()), e);
         }
 
     }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSHeaderAdapter.java
 Mon Apr 27 15:01:28 2015
@@ -30,6 +30,7 @@ import javax.jms.JMSException;
 import javax.jms.MessageFormatException;
 
 import org.apache.qpid.AMQPInvalidClassException;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.framing.FieldTable;
 
 
@@ -343,10 +344,8 @@ public final class JMSHeaderAdapter
         }
         catch (AMQPInvalidClassException aice)
         {
-            MessageFormatException mfe = new 
MessageFormatException(AMQPInvalidClassException.INVALID_OBJECT_MSG + (object 
== null ? "null" : object.getClass()));
-            mfe.setLinkedException(aice);
-            mfe.initCause(aice);
-            throw mfe;
+            String msg = AMQPInvalidClassException.INVALID_OBJECT_MSG + 
(object == null ? "null" : object.getClass());
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException(msg), aice);
         }
     }
 

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSObjectMessage.java
 Mon Apr 27 15:01:28 2015
@@ -22,6 +22,7 @@ package org.apache.qpid.client.message;
 
 import org.apache.qpid.AMQException;
 import org.apache.qpid.client.util.ClassLoadingAwareObjectInputStream;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 import org.apache.qpid.util.ByteBufferInputStream;
 
 import javax.jms.JMSException;
@@ -100,10 +101,8 @@ public class JMSObjectMessage extends Ab
     {
         if(_exception != null)
         {
-            final MessageFormatException messageFormatException =
-                    new MessageFormatException("Unable to deserialize 
message");
-            messageFormatException.setLinkedException(_exception);
-            throw messageFormatException;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException("Unable to deserialize message"),
+                                                       _exception);
         }
         if(_readData == null)
         {
@@ -122,10 +121,11 @@ public class JMSObjectMessage extends Ab
             }
             catch (IOException e)
             {
-                final JMSException jmsException = new JMSException("Unable to 
encode object of type: " +
-                        _readData.getClass().getName() + ", value " + 
_readData);
-                jmsException.setLinkedException(e);
-                throw jmsException;
+                throw JMSExceptionHelper.chainJMSException(new 
JMSException("Unable to encode object of type: "
+                                                                            +
+                                                                            
_readData.getClass().getName()
+                                                                            + 
", value "
+                                                                            + 
_readData), e);
             }
         }
     }
@@ -145,10 +145,11 @@ public class JMSObjectMessage extends Ab
         }
         catch (IOException e)
         {
-            final JMSException jmsException = new JMSException("Unable to 
encode object of type: " +
-                    serializable.getClass().getName() + ", value " + 
serializable);
-            jmsException.setLinkedException(e);
-            throw jmsException;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Unable to encode object of type: "
+                                                                        +
+                                                                        
serializable.getClass().getName()
+                                                                        + ", 
value "
+                                                                        + 
serializable), e);
         }
 
     }
@@ -157,9 +158,8 @@ public class JMSObjectMessage extends Ab
     {
         if(_exception != null)
         {
-            final MessageFormatException messageFormatException = new 
MessageFormatException("Unable to deserialize message");
-            messageFormatException.setLinkedException(_exception);
-            throw messageFormatException;
+            throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException("Unable to deserialize message"),
+                                                       _exception);
         }
         else if(_readData != null || _data == null)
         {
@@ -183,9 +183,7 @@ public class JMSObjectMessage extends Ab
                 exception = e;
             }
 
-            JMSException jmsException = new JMSException("Could not 
deserialize object");
-            jmsException.setLinkedException(exception);
-            throw jmsException;
+            throw JMSExceptionHelper.chainJMSException(new JMSException("Could 
not deserialize object"), exception);
         }
 
     }

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSTextMessage.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSTextMessage.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSTextMessage.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/message/JMSTextMessage.java
 Mon Apr 27 15:01:28 2015
@@ -22,6 +22,7 @@ package org.apache.qpid.client.message;
 
 import org.apache.qpid.AMQException;
 import org.apache.qpid.client.CustomJMSXProperty;
+import org.apache.qpid.client.util.JMSExceptionHelper;
 
 import javax.jms.JMSException;
 import javax.jms.MessageFormatException;
@@ -100,9 +101,8 @@ public class JMSTextMessage extends Abst
         {
             if(_exception != null)
             {
-                final MessageFormatException messageFormatException = new 
MessageFormatException("Cannot decode original message");
-                messageFormatException.setLinkedException(_exception);
-                throw messageFormatException;
+                throw JMSExceptionHelper.chainJMSException(new 
MessageFormatException("Cannot decode original message"),
+                                                           _exception);
             }
             else if(_decodedValue == null)
             {
@@ -115,9 +115,8 @@ public class JMSTextMessage extends Abst
         }
         catch (CharacterCodingException e)
         {
-            final JMSException jmsException = new JMSException("Cannot encode 
string in UFT-8: " + _decodedValue);
-            jmsException.setLinkedException(e);
-            throw jmsException;
+            throw JMSExceptionHelper.chainJMSException(new 
JMSException("Cannot encode string in UFT-8: "
+                                                                        + 
_decodedValue), e);
         }
     }
 

Added: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java?rev=1676290&view=auto
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java
 (added)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java
 Mon Apr 27 15:01:28 2015
@@ -0,0 +1,52 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.client.util;
+
+import java.lang.reflect.InvocationTargetException;
+
+import javax.jms.JMSException;
+
+/**
+ * Helper class to create correctly chained JMSExceptions
+ *
+ * Created by Lorenz Quack on 27/04/2015.
+ */
+public class JMSExceptionHelper
+{
+
+    /**
+     * Creates a JMSException, wrapping another exception class.
+     *
+     * @param jmsException The JMS Exception.
+     * @param cause  The underlying exception that caused this one.
+     */
+    static public JMSException chainJMSException(JMSException jmsException, 
Throwable cause)
+    {
+        jmsException.initCause(cause);
+        if (cause instanceof Exception)
+        {
+            jmsException.setLinkedException((Exception) cause);
+        }
+        return jmsException;
+    }
+
+
+}

Propchange: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/client/util/JMSExceptionHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
qpid/java/trunk/jca/src/main/java/org/apache/qpid/ra/QpidRASessionFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/jca/src/main/java/org/apache/qpid/ra/QpidRASessionFactoryImpl.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/jca/src/main/java/org/apache/qpid/ra/QpidRASessionFactoryImpl.java
 (original)
+++ 
qpid/java/trunk/jca/src/main/java/org/apache/qpid/ra/QpidRASessionFactoryImpl.java
 Mon Apr 27 15:01:28 2015
@@ -796,6 +796,7 @@ public class QpidRASessionFactoryImpl im
 
          JMSException je = new JMSException("Could not create a session: " + 
e.getMessage());
          je.setLinkedException(e);
+         je.initCause(e);
          throw je;
       }
    }
@@ -893,6 +894,7 @@ public class QpidRASessionFactoryImpl im
 
          JMSException je = new JMSException("Could not create a session: " + 
e.getMessage());
          je.setLinkedException(e);
+         je.initCause(e);
          throw je;
       }
    }

Modified: 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java?rev=1676290&r1=1676289&r2=1676290&view=diff
==============================================================================
--- 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java
 (original)
+++ 
qpid/java/trunk/systests/src/test/java/org/apache/qpid/test/unit/ack/AcknowledgeOnMessageTest.java
 Mon Apr 27 15:01:28 2015
@@ -22,9 +22,9 @@ package org.apache.qpid.test.unit.ack;
 
 import org.apache.qpid.client.AMQDestination;
 import org.apache.qpid.client.AMQSession;
-import org.apache.qpid.client.JMSAMQException;
 import org.apache.qpid.client.failover.FailoverException;
 
+import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.Session;
@@ -150,7 +150,7 @@ public class AcknowledgeOnMessageTest ex
         {
             _consumer.close();
         }
-        catch (JMSAMQException amqe)
+        catch (JMSException amqe)
         {
             if (amqe.getLinkedException() instanceof FailoverException)
             {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to