Author: violetagg Date: Sat Sep 13 05:24:57 2014 New Revision: 1624697 URL: http://svn.apache.org/r1624697 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56446 Merged revision 1595898 from tomcat/trunk: Clearer handling of exceptions when calling a method on a POJO based WebSocket endpoint. Based on a suggestion by Eugene Chung.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1595898 Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java?rev=1624697&r1=1624696&r2=1624697&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java Sat Sep 13 05:24:57 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; /** @@ -101,4 +102,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/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java?rev=1624697&r1=1624696&r2=1624697&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java Sat Sep 13 05:24:57 2014 @@ -66,13 +66,13 @@ public abstract class PojoMessageHandler } else { parameters[indexPayload] = message; } - Object result; + Object result = null; try { result = method.invoke(pojo, parameters); } catch (IllegalAccessException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } catch (InvocationTargetException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } processResult(result); } Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java?rev=1624697&r1=1624696&r2=1624697&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java Sat Sep 13 05:24:57 2014 @@ -75,13 +75,13 @@ public abstract class PojoMessageHandler } parameters[indexPayload] = payload; - Object result; + Object result = null; try { result = method.invoke(pojo, parameters); } catch (IllegalAccessException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } catch (InvocationTargetException e) { - throw new IllegalArgumentException(e); + handlePojoMethodException(e); } processResult(result); } Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1624697&r1=1624696&r2=1624697&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Sat Sep 13 05:24:57 2014 @@ -215,6 +215,11 @@ </subsection> <subsection 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> <fix> <bug>56746</bug>: Allow secure WebSocket client threads to use the current context class loader rather than explicitly setting it to the --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org