modules/core/util/src/main/java/org/rhq/core/util/exception/ThrowableUtil.java | 25 ++++++---- modules/core/util/src/test/java/org/rhq/core/util/exception/ThrowableUtilTest.java | 14 +++-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java | 22 +++++--- 3 files changed, 38 insertions(+), 23 deletions(-)
New commits: commit b8f67855445081683f56bd1dd27e0239f7114a9e Author: John Mazzitelli mazz@redhat.com Date: Thu May 24 17:05:44 2012 -0400
[BZ 824898] fix the logging so we can see the full, real, exception with the ID. this lets you match the gwt client exception with the full server side exception. for some reason, this class lost the ability to log messages to the server log file - i think it happened when we changed to gwt logging
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java index f68d407..7017cc5 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java @@ -29,10 +29,12 @@ import javax.servlet.http.HttpServletResponse; import com.google.gwt.user.server.rpc.RPCRequest; import com.google.gwt.user.server.rpc.RemoteServiceServlet;
+import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.rhq.core.domain.auth.Subject; import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.UserSessionManager; -import org.rhq.enterprise.gui.coregui.client.util.Log; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.util.HibernatePerformanceMonitor; import org.rhq.enterprise.server.util.LookupUtil; @@ -44,6 +46,7 @@ import org.rhq.enterprise.server.util.LookupUtil; public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet {
private static final long serialVersionUID = 1L; + private Log log = LogFactory.getLog(this.getClass());
private ThreadLocal<Subject> sessionSubject = new ThreadLocal<Subject>(); private ThreadLocal<String> rpcMethod = new ThreadLocal<String>(); @@ -52,9 +55,13 @@ public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet { return sessionSubject.get(); }
+ protected Log getLog() { + return log; + } + @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (Log.isTraceEnabled()) { + if (log.isTraceEnabled()) { printHeaders(req); }
@@ -66,11 +73,11 @@ public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet { Subject subject = subjectManager.getSubjectBySessionId(Integer.parseInt(sid)); sessionSubject.set(subject); } catch (Exception e) { - Log.trace("Failed to validate request: sessionId was '" + sid + "', requestURL=" + req.getRequestURL()); + log.trace("Failed to validate request: sessionId was '" + sid + "', requestURL=" + req.getRequestURL()); continueProcessing = false; } } else { - Log.debug("Failed to validate request: sessionId missing, requestURL=" + req.getRequestURL()); + log.debug("Failed to validate request: sessionId missing, requestURL=" + req.getRequestURL()); continueProcessing = false; }
@@ -120,8 +127,7 @@ public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet { id.append("] ");
// log the exception server-side - //logger.warning("Sending exception to client: " + id.toString(), t); - Log.warn("Sending exception to client: " + id.toString(), t); + log.warn("Sending exception to client: " + id.toString(), t);
// cannot assume gwt client has our exception classes, only send the messages in a generic runtime exception return new RuntimeException(id.toString() + ThrowableUtil.getAllMessages(t)); @@ -132,9 +138,9 @@ public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet { // TODO: figure out why SESSION_NAME header and other GWT-specific headers are missing occasionally // seems to only happen on polling for recent alerts when there is no user activity for a few minutes Enumeration<String> headerNames = req.getHeaderNames(); - Log.trace(req.getRequestURL().toString()); + log.trace(req.getRequestURL().toString()); while (headerNames.hasMoreElements()) { - Log.trace(" " + headerNames.nextElement()); + log.trace(" " + headerNames.nextElement()); } } }
commit 802ff8d372ca0431c96a7c735021790ec0c0d1c0 Author: John Mazzitelli mazz@redhat.com Date: Thu May 24 17:03:26 2012 -0400
[BZ 824898] change to the throwables util class: if we were told not to show the class name but the message was null, show the class name at least - otherwise, you'll get an even more useless string of "null"
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/exception/ThrowableUtil.java b/modules/core/util/src/main/java/org/rhq/core/util/exception/ThrowableUtil.java index 23bc1cf..043856d 100644 --- a/modules/core/util/src/main/java/org/rhq/core/util/exception/ThrowableUtil.java +++ b/modules/core/util/src/main/java/org/rhq/core/util/exception/ThrowableUtil.java @@ -183,10 +183,11 @@ public class ThrowableUtil {
String msg;
+ String tMessage = t.getMessage(); if (includeExceptionName) { - msg = t.getClass().getName() + ":" + t.getMessage(); + msg = t.getClass().getName() + ":" + tMessage; } else { - msg = t.getMessage(); + msg = (tMessage != null) ? tMessage : t.getClass().getName(); }
if (t instanceof SQLException) { @@ -198,10 +199,11 @@ public class ThrowableUtil { while ((t.getCause() != null) && (t != t.getCause())) { t = t.getCause();
+ tMessage = t.getMessage(); if (includeExceptionName) { - msg = t.getClass().getName() + ":" + t.getMessage(); + msg = t.getClass().getName() + ":" + tMessage; } else { - msg = t.getMessage(); + msg = (tMessage != null) ? tMessage : t.getClass().getName(); }
if (t instanceof SQLException) { @@ -278,20 +280,24 @@ public class ThrowableUtil { ArrayList<String> list = new ArrayList<String>();
if (t != null) { + + String tMessage = t.getMessage(); if (includeExceptionName) { - list.add(t.getClass().getName() + ":" + t.getMessage()); + list.add(t.getClass().getName() + ":" + tMessage); } else { - list.add(t.getMessage()); + list.add((tMessage != null) ? tMessage : t.getClass().getName()); + }
while ((t.getNextException() != null) && (t != t.getNextException())) { String msg;
t = t.getNextException(); + tMessage = t.getMessage(); if (includeExceptionName) { - msg = t.getClass().getName() + ":" + t.getMessage(); + msg = t.getClass().getName() + ":" + tMessage; } else { - msg = t.getMessage(); + msg = (tMessage != null) ? tMessage : t.getClass().getName(); }
list.add(msg + "(error-code=" + t.getErrorCode() + ",sql-state=" + t.getSQLState() + ")"); @@ -355,6 +361,7 @@ public class ThrowableUtil { while ((t.getCause() != null) && (t != t.getCause())) { t = t.getCause(); } - return t.getMessage(); + String rootMessage = t.getMessage(); + return (rootMessage != null) ? rootMessage : t.getClass().getName(); } } \ No newline at end of file diff --git a/modules/core/util/src/test/java/org/rhq/core/util/exception/ThrowableUtilTest.java b/modules/core/util/src/test/java/org/rhq/core/util/exception/ThrowableUtilTest.java index 9d19293..1f76539 100644 --- a/modules/core/util/src/test/java/org/rhq/core/util/exception/ThrowableUtilTest.java +++ b/modules/core/util/src/test/java/org/rhq/core/util/exception/ThrowableUtilTest.java @@ -23,6 +23,7 @@ package org.rhq.core.util.exception;
import java.sql.SQLException; + import org.testng.annotations.Test;
/** @@ -38,15 +39,16 @@ public class ThrowableUtilTest { public void testGetAllMessagesArray() { assert ThrowableUtil.getAllMessagesArray(null, false).length == 0; assert ThrowableUtil.getAllMessagesArray(new Throwable(), false).length == 1; - assert ThrowableUtil.getAllMessagesArray(new Throwable(), false)[0] == null; + assert ThrowableUtil.getAllMessagesArray(new Throwable(), false)[0].equals(Throwable.class.getName()); assert ThrowableUtil.getAllMessagesArray(new Throwable((String) null), false).length == 1; - assert ThrowableUtil.getAllMessagesArray(new Throwable((String) null), false)[0] == null; + assert ThrowableUtil.getAllMessagesArray(new Exception((String) null), false)[0].equals(Exception.class + .getName()); assert ThrowableUtil.getAllMessagesArray(new Throwable("boo"), false).length == 1; assert ThrowableUtil.getAllMessagesArray(new Throwable("boo"), false)[0].equals("boo");
assert ThrowableUtil.getAllMessages(null, false).equals(">> exception was null <<"); - assert ThrowableUtil.getAllMessages(new Throwable(), false).equals("null"); - assert ThrowableUtil.getAllMessages(new Throwable((String) null), false).equals("null"); + assert ThrowableUtil.getAllMessages(new Throwable(), false).equals(Throwable.class.getName()); + assert ThrowableUtil.getAllMessages(new Throwable((String) null), false).equals(Throwable.class.getName()); assert ThrowableUtil.getAllMessages(new Throwable("boo"), false).equals("boo");
Throwable t = new Throwable("one", new Exception("two", new Error("three"))); @@ -59,9 +61,9 @@ public class ThrowableUtilTest { t = new Throwable("one", new Exception(null, new Error("three"))); assert ThrowableUtil.getAllMessagesArray(t, false).length == 3; assert ThrowableUtil.getAllMessagesArray(t, false)[0].equals("one"); - assert ThrowableUtil.getAllMessagesArray(t, false)[1] == null; + assert ThrowableUtil.getAllMessagesArray(t, false)[1].equals(Exception.class.getName()); assert ThrowableUtil.getAllMessagesArray(t, false)[2].equals("three"); - assert ThrowableUtil.getAllMessages(t, false).equals("one -> null -> three"); + assert ThrowableUtil.getAllMessages(t, false).equals("one -> " + Exception.class.getName() + " -> three"); }
public void testSqlException() {
rhq-commits@lists.fedorahosted.org