From 8669b3293c3e8527ecd1a7dc7ad84daa18a56e8f Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 12 Feb 2009 17:33:57 +0000 Subject: [PATCH] fixed JmsException/JmsUtils to fully avoid NPEs in case of cause messages being null --- .../java/org/springframework/jms/JmsException.java | 10 +++++++--- .../jms/listener/DefaultMessageListenerContainer.java | 2 +- .../java/org/springframework/jms/support/JmsUtils.java | 9 ++++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/JmsException.java b/org.springframework.jms/src/main/java/org/springframework/jms/JmsException.java index 5bebcebfdf..3c379cc7ab 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/JmsException.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/JmsException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -84,8 +84,12 @@ public abstract class JmsException extends NestedRuntimeException { Throwable cause = getCause(); if (cause instanceof JMSException) { Exception linkedEx = ((JMSException) cause).getLinkedException(); - if (linkedEx != null && cause.getMessage().indexOf(linkedEx.getMessage()) == -1) { - message = message + "; nested exception is " + linkedEx; + if (linkedEx != null) { + String linkedMessage = linkedEx.getMessage(); + String causeMessage = cause.getMessage(); + if (linkedMessage != null && (causeMessage == null || !causeMessage.contains(linkedMessage))) { + message = message + "; nested exception is " + linkedEx; + } } } return message; diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index eeb3412e15..234a33ea3b 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -712,7 +712,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe /** * Handle the given exception that arose during setup of a listener. * Called for every such exception in every concurrent listener. - *

The default implementation logs the exception at error level + *

The default implementation logs the exception at info level * if not recovered yet, and at debug level if already recovered. * Can be overridden in subclasses. * @param ex the exception to handle diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/support/JmsUtils.java b/org.springframework.jms/src/main/java/org/springframework/jms/support/JmsUtils.java index 09cfd184de..8f97bdf9be 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/support/JmsUtils.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/support/JmsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -256,8 +256,11 @@ public abstract class JmsUtils { if (message == null) { message = linkedEx.toString(); } - else if (!message.contains(linkedEx.getMessage())) { - message = message + "; nested exception is " + linkedEx; + else { + String linkedMessage = linkedEx.getMessage(); + if (linkedMessage != null && !message.contains(linkedMessage)) { + message = message + "; nested exception is " + linkedEx; + } } } return message;