From: Artur Signell Date: Fri, 28 Sep 2012 17:47:34 +0000 (+0300) Subject: Avoid adding RpcInvocationHandler toString as invocations (#9802) X-Git-Tag: 7.0.0.beta3~12^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fchanges%2F17%2F17%2F2;p=vaadin-framework.git Avoid adding RpcInvocationHandler toString as invocations (#9802) Change-Id: If6f378c0942132110adc748bd2c1cf87779924b6 --- 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; + } + +}