QPIDJMS-168 Ensure we throw a more meaningful exception if the remote doesn't provide one when pending sends are awaiting a response.
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/e97a6f94 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/e97a6f94 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/e97a6f94 Branch: refs/heads/master Commit: e97a6f94b81b82b0afc4f5786cbda5c55c43150d Parents: a02c533 Author: Timothy Bish <[email protected]> Authored: Tue Apr 5 12:50:19 2016 -0400 Committer: Timothy Bish <[email protected]> Committed: Tue Apr 5 12:50:19 2016 -0400 ---------------------------------------------------------------------- .../jms/provider/amqp/AmqpFixedProducer.java | 6 ++++-- .../qpid/jms/provider/amqp/AmqpSupport.java | 21 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e97a6f94/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java index 3dbb85a..ef526c9 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java @@ -309,12 +309,14 @@ public class AmqpFixedProducer extends AmqpProducer { public void remotelyClosed(AmqpProvider provider) { super.remotelyClosed(provider); - Exception ex = AmqpSupport.convertToException(getEndpoint(), getEndpoint().getRemoteCondition()); - if (ex == null) { + Exception ex = null; + if (!sent.isEmpty()) { // TODO: create/use a more specific/appropriate exception type? ex = new JMSException("Producer closed remotely before message transfer result was notified"); } + ex = AmqpSupport.convertToException(getEndpoint(), getEndpoint().getRemoteCondition(), ex); + for (Delivery delivery : sent) { try { AsyncResult request = (AsyncResult) delivery.getContext(); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/e97a6f94/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpSupport.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpSupport.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpSupport.java index f218fa2..4d9c728 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpSupport.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpSupport.java @@ -100,7 +100,24 @@ public class AmqpSupport { * @return a new Exception instance that best matches the ErrorCondition value. */ public static Exception convertToException(Endpoint endpoint, ErrorCondition errorCondition) { - Exception remoteError = null; + return convertToException(endpoint, errorCondition, null); + } + + /** + * Given an ErrorCondition instance create a new Exception that best matches + * the error type. + * + * @param endpoint + * The target of the error. + * @param errorCondition + * The ErrorCondition returned from the remote peer. + * @param defaultException + * The default exception to throw if no error information is provided from the remote. + * + * @return a new Exception instance that best matches the ErrorCondition value. + */ + public static Exception convertToException(Endpoint endpoint, ErrorCondition errorCondition, Exception defaultException) { + Exception remoteError = defaultException; if (errorCondition != null && errorCondition.getCondition() != null) { Symbol error = errorCondition.getCondition(); @@ -130,7 +147,7 @@ public class AmqpSupport { } else { remoteError = new JMSException(message); } - } else { + } else if (remoteError == null) { remoteError = new JMSException("Unknown error from remote peer"); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
