From: Jan B. (JIRA) <ji...@co...> - 2008-03-07 04:05:46
|
[ http://jira.codehaus.org/browse/JETTY-482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_126406 ] Jan Bartel commented on JETTY-482: ---------------------------------- I've also checked in Craig Day's upgrade for gwt-1.4.x and the update to fix the exception into jetty-6.1 branch. Tested and working. Scheduled for release 6.1.9. cheers Jan > Follow on to issue, JETTY-399, Craig Day version of OpenRemoteServiceServlet and AsyncRemoteServiceServlet may need an update > ----------------------------------------------------------------------------------------------------------------------------- > > Key: JETTY-482 > URL: http://jira.codehaus.org/browse/JETTY-482 > Project: Jetty > Issue Type: Bug > Components: Continuations > Affects Versions: 6.1.6 > Environment: Windows XP > Reporter: Zac George > Assignee: Jan Bartel > Fix For: 6.2.0pre0 > > Attachments: AsyncRemoteServiceServlet.java, OpenRemoteServiceServlet.java > > > From the original JETTY-399 issue raised by Craig Day ... > ------------------ > The OpenRemoteServiceServlet provided doesn't work with GWT 1.4. They seem to have changed RemoteServiceServlet significantly in this release, and although RemoteServiceServlet has been "opened up" more I couldn't get around not creating a 1.4 compatible version of OpenRemoteServiceServlet. Let me know if you want me to submit the code,.. largely trivial > Craig > ------------------ > GWT 1.4.60 in the deployed mode (i.e. war with a trivial Chat Room app deployed to Jetty webapps. IDE: Eclipse with WTP adapter for Jetty) > The GWT chat room app works as expected in the hosted mode since the Continuation instance being used is of type WaitingContinuation. When the app is deployed to the Jetty webapps directory and loaded in the browser, the Continuation instance created is of type RetryContinuation. > On calling "suspend" on the Continuation instance, the Throwable instance thrown is of type org.mortbay.jetty.RetryRequest. However, by the time the Throwable instance reaches the AsyncRemoteServiceServlet.doUnexpectedFailure method, its been replaced (by the GWT RPC class) by a SerializationException. > The detailedMessage in the exception reads > "Type 'org.mortbay.jetty.RetryRequest' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer. For security purposes, this type will not be serialized." > The protected method, "throwIfRetyRequest" in AsyncRemoteServiceServlet (Craig Day implementation) then fails to rethrow the original RetryRequest exception. As a result, the servlet container doesn't get the RetryRequest exception and the call to suspend fails. > Suggest modifying the implementation of the "throwIfRetyRequest" method to the following (unless there's a better way): > public class AsyncRemoteServiceServlet extends OpenRemoteServiceServlet > { > ..... > private static final String JETTY_GWT_SERIALIZATION_EXCEPTION_MESSAGE = "Type 'org.mortbay.jetty.RetryRequest' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable'"; > .... > protected void throwIfRetyRequest(Throwable caught) > { > if (caught instanceof UnexpectedException) > { > caught = caught.getCause(); > } > String detailMessage = caught.getMessage(); > if (caught instanceof SerializationException > && detailMessage.startsWith(JETTY_GWT_SERIALIZATION_EXCEPTION_MESSAGE)) > { > try > { > Class excep = Class.forName(JETTY_RETRY_REQUEST_EXCEPTION); > caught = (Throwable) excep.newInstance(); > } > catch (ClassNotFoundException ex) > { > ex.printStackTrace(); > } > catch (InstantiationException ex) > { > ex.printStackTrace(); > } > catch (IllegalAccessException ex) > { > ex.printStackTrace(); > } > throw (RuntimeException) caught; > } > if (caught instanceof RuntimeException > && JETTY_RETRY_REQUEST_EXCEPTION.equals(caught.getClass() > .getName())) > { > throw (RuntimeException) caught; > } > } > .... > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |