From d371ac4a4e3f7f29f5a17f16c4134062c280115e Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 28 Sep 2012 20:47:34 +0300 Subject: Avoid adding RpcInvocationHandler toString as invocations (#9802) Change-Id: If6f378c0942132110adc748bd2c1cf87779924b6 --- .../com/vaadin/server/AbstractClientConnector.java | 5 ++ .../ui/RpcInvocationHandlerToString.html | 51 +++++++++++++++ .../ui/RpcInvocationHandlerToString.java | 74 ++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.html create mode 100644 uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.java diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java index eb59cbe5fc..1f0d3049b5 100644 --- a/server/src/com/vaadin/server/AbstractClientConnector.java +++ b/server/src/com/vaadin/server/AbstractClientConnector.java @@ -290,6 +290,11 @@ public abstract class AbstractClientConnector implements ClientConnector { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if (method.getDeclaringClass() == Object.class) { + // Don't add Object methods such as toString and hashCode as + // invocations + return method.invoke(this, args); + } addMethodInvocationToQueue(rpcInterfaceName, method, args); return null; } diff --git a/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.html b/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.html new file mode 100644 index 0000000000..c9d5aa303d --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.html @@ -0,0 +1,51 @@ + + + + + + +New Test + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
New Test
open/run/com.vaadin.tests.components.ui.RpcInvocationHandlerToString?restartApplication
clickvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]
assertElementNotPresentvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]
clickvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]
assertElementNotPresentvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]
clickvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]
assertElementNotPresentvaadin=runcomvaadintestscomponentsuiRpcInvocationHandlerToString::Root/VNotification[0]/HTML[0]
+ + diff --git a/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.java b/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.java new file mode 100644 index 0000000000..38f971f840 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/ui/RpcInvocationHandlerToString.java @@ -0,0 +1,74 @@ +/* + * Copyright 2011 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.ui; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.ui.PageClientRpc; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.tests.util.Log; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; + +public class RpcInvocationHandlerToString extends AbstractTestUI { + + private Log log = new Log(5); + PageClientRpc dummyProxy = getRpcProxy(PageClientRpc.class); + + @Override + protected void setup(VaadinRequest request) { + addComponent(log); + Button b = new Button("Exec toString() for an invocation proxy", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + log.log("An invoation proxy: " + dummyProxy.toString()); + } + }); + addComponent(b); + b = new Button("Exec hashCode() for an invocation proxy", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + log.log("Invocation proxy.hashCode(): " + + dummyProxy.hashCode()); + } + }); + addComponent(b); + b = new Button("Exec equals(false) for an invocation proxy", + new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + log.log("Invocation proxy.equals(false): " + + dummyProxy.equals(false)); + } + }); + addComponent(b); + } + + @Override + protected String getTestDescription() { + return "Clicking on the buttons invokes Object methods on a dummy proxy instance. They should only cause log rows to appear and no client rpc to be sent"; + } + + @Override + protected Integer getTicketNumber() { + return 9802; + } + +} -- cgit v1.2.3