Author: markt Date: Mon May 19 13:33:09 2014 New Revision: 1595898 URL: http://svn.apache.org/r1595898 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56446 Clearer handling of exceptions when calling a method on a POJO based WebSocket endpoint. Based on a suggestion by Eugene Chung.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java?rev=1595898&r1=1595897&r2=1595898&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java Mon May 19 13:33:09 2014 @@ -25,6 +25,7 @@ import javax.websocket.MessageHandler; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; +import org.apache.tomcat.util.ExceptionUtils; import org.apache.tomcat.websocket.WrappedMessageHandler; /** @@ -107,4 +108,15 @@ public abstract class PojoMessageHandler public final long getMaxMessageSize() { return maxMessageSize; } + + + protected final void handlePojoMethodException(Throwable t) { + t = ExceptionUtils.unwrapInvocationTargetException(t); + ExceptionUtils.handleThrowable(t); + if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } else { + throw new RuntimeException(t); + } + } } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java?rev=1595898&r1=1595897&r2=1595898&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java Mon May 19 13:33:09 2014 @@ -66,11 +66,11 @@ public abstract class PojoMessageHandler } else { parameters[indexPayload] = message; } - Object result; + Object result = null; try { result = method.invoke(pojo, parameters); } catch (IllegalAccessException | InvocationTargetException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } processResult(result); } Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java?rev=1595898&r1=1595897&r2=1595898&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java Mon May 19 13:33:09 2014 @@ -75,11 +75,11 @@ public abstract class PojoMessageHandler } parameters[indexPayload] = payload; - Object result; + Object result = null; try { result = method.invoke(pojo, parameters); } catch (IllegalAccessException | InvocationTargetException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } processResult(result); } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1595898&r1=1595897&r2=1595898&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Mon May 19 13:33:09 2014 @@ -63,6 +63,15 @@ </add> </changelog> </subsection> + <section name="WebSocket"> + <changelog> + <scode> + <bug>56446</bug>: Clearer handling of exceptions when calling a method + on a POJO based WebSocket endpoint. Based on a suggestion by Eugene + Chung. (markt) + </scode> + </changelog> + </section> </section> <section name="Tomcat 8.0.8 (markt)"> <subsection name="Catalina"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org