8076339: Better handling of remote object invocation
Reviewed-by: asmotrak, igerasim, skoivu
This commit is contained in:
parent
a9da78ecd7
commit
f9c408224b
@ -145,6 +145,14 @@ public class RemoteObjectInvocationHandler
|
|||||||
public Object invoke(Object proxy, Method method, Object[] args)
|
public Object invoke(Object proxy, Method method, Object[] args)
|
||||||
throws Throwable
|
throws Throwable
|
||||||
{
|
{
|
||||||
|
if (! Proxy.isProxyClass(proxy.getClass())) {
|
||||||
|
throw new IllegalArgumentException("not a proxy");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Proxy.getInvocationHandler(proxy) != this) {
|
||||||
|
throw new IllegalArgumentException("handler mismatch");
|
||||||
|
}
|
||||||
|
|
||||||
if (method.getDeclaringClass() == Object.class) {
|
if (method.getDeclaringClass() == Object.class) {
|
||||||
return invokeObjectMethod(proxy, method, args);
|
return invokeObjectMethod(proxy, method, args);
|
||||||
} else if ("finalize".equals(method.getName()) && method.getParameterCount() == 0) {
|
} else if ("finalize".equals(method.getName()) && method.getParameterCount() == 0) {
|
||||||
@ -168,11 +176,13 @@ public class RemoteObjectInvocationHandler
|
|||||||
|
|
||||||
} else if (name.equals("equals")) {
|
} else if (name.equals("equals")) {
|
||||||
Object obj = args[0];
|
Object obj = args[0];
|
||||||
|
InvocationHandler hdlr;
|
||||||
return
|
return
|
||||||
proxy == obj ||
|
proxy == obj ||
|
||||||
(obj != null &&
|
(obj != null &&
|
||||||
Proxy.isProxyClass(obj.getClass()) &&
|
Proxy.isProxyClass(obj.getClass()) &&
|
||||||
equals(Proxy.getInvocationHandler(obj)));
|
(hdlr = Proxy.getInvocationHandler(obj)) instanceof RemoteObjectInvocationHandler &&
|
||||||
|
this.equals(hdlr));
|
||||||
|
|
||||||
} else if (name.equals("toString")) {
|
} else if (name.equals("toString")) {
|
||||||
return proxyToString(proxy);
|
return proxyToString(proxy);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user