[jboss-remoting-commits] JBoss Remoting SVN: r4666 - remoting3/trunk/core/src/main/java/org/jboss/remoting/core.
jboss-remoting-commits at lists.jboss.org
jboss-remoting-commits at lists.jboss.org
Thu Nov 13 00:13:58 EST 2008
Author: david.lloyd at jboss.com
Date: 2008-11-13 00:13:58 -0500 (Thu, 13 Nov 2008)
New Revision: 4666
Modified:
remoting3/trunk/core/src/main/java/org/jboss/remoting/core/ClientImpl.java
Log:
toString(), type safety improvements
Modified: remoting3/trunk/core/src/main/java/org/jboss/remoting/core/ClientImpl.java
===================================================================
--- remoting3/trunk/core/src/main/java/org/jboss/remoting/core/ClientImpl.java 2008-11-13 05:13:27 UTC (rev 4665)
+++ remoting3/trunk/core/src/main/java/org/jboss/remoting/core/ClientImpl.java 2008-11-13 05:13:58 UTC (rev 4666)
@@ -26,6 +26,7 @@
import java.util.concurrent.Executor;
import org.jboss.remoting.Client;
import org.jboss.remoting.IndeterminateOutcomeException;
+import org.jboss.remoting.RemoteRequestException;
import org.jboss.remoting.core.util.QueueExecutor;
import org.jboss.remoting.spi.Handle;
import org.jboss.remoting.spi.RemoteRequestContext;
@@ -57,7 +58,7 @@
if (! isOpen()) {
throw new IOException("Client is not open");
}
- final I actualRequest = requestClass.cast(request);
+ final I actualRequest = castRequest(request);
final QueueExecutor executor = new QueueExecutor();
final FutureReplyImpl<O> futureReply = new FutureReplyImpl<O>(executor, replyClass);
final ReplyHandler replyHandler = futureReply.getReplyHandler();
@@ -85,15 +86,30 @@
if (! isOpen()) {
throw new IOException("Client is not open");
}
+ final I actualRequest = castRequest(request);
final FutureReplyImpl<O> futureReply = new FutureReplyImpl<O>(executor, replyClass);
final ReplyHandler replyHandler = futureReply.getReplyHandler();
- final RemoteRequestContext requestContext = handle.getResource().receiveRequest(request, replyHandler);
+ final RemoteRequestContext requestContext = handle.getResource().receiveRequest(actualRequest, replyHandler);
futureReply.setRemoteRequestContext(requestContext);
return futureReply;
}
+ /**
+ * Since type is erased, it's possible that the wrong type was passed.
+ * @param request
+ * @return
+ * @throws RemoteRequestException
+ */
+ private I castRequest(final Object request) throws RemoteRequestException {
+ try {
+ return requestClass.cast(request);
+ } catch (ClassCastException e) {
+ throw new RemoteRequestException("Invalid request type sent (got <" + request.getClass().getName() + ">, expected <? extends " + requestClass.getName() + ">");
+ }
+ }
+
public String toString() {
- return "client instance <" + Integer.toString(hashCode()) + ">";
+ return "client instance <" + Integer.toHexString(hashCode()) + ">";
}
Handle<RequestHandler> getRequestHandlerHandle() {
More information about the jboss-remoting-commits
mailing list