[Bug-11643] Message Handlers Error

Unexpected behaviour:
Receiving an exception ‘error code=GENERAL_PROTOCOL_EXCEPTION [100]’ when requesting a message handler

Expected Behaviour:
Receive payload back.

Steps Taken:
Setup both gateways on the gateway network.
Outgoing connection from V8 to V7.9.9 (Outgoing conenction V7.9.9 - V8 faulted* may be the fault)
Called message handler using system.util.sendRequest

Info:
Calling gateway : 8.0.0-beta0 (b2018111302)
Called gateway : 7.9.9 (b2018081621)

ERROR CODE BELOW:

Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11) 
[OpenJDK 64-Bit Server VM (Azul Systems, Inc.)] on java11.0.1

>>> 
Java Traceback:

	at org.python.core.Py.JavaError(Py.java:546)
	at org.python.core.Py.JavaError(Py.java:537)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:436)
	at org.python.core.PyObject.__call__(PyObject.java:394)
	at org.python.pycode._pyx8.f$0(<buffer>:2)
	at org.python.pycode._pyx8.call_function(<buffer>)
	at org.python.core.PyTableCode.call(PyTableCode.java:167)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1386)
	at org.python.core.Py.exec(Py.java:1430)
	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:276)
	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:131)
	at org.python.util.InteractiveInterpreter.runsource(InteractiveInterpreter.java:116)
	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$InterpreterWorker.doInBackground(JythonConsole.java:476)
	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$InterpreterWorker.doInBackground(JythonConsole.java:464)
	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Exception occurred on remote machine, error code=GENERAL_PROTOCOL_EXCEPTION [100]
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:338)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:308)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:265)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:888)
	at com.inductiveautomation.factorypmi.application.script.builtin.ClientSystemUtilities$SendRequestManager.invokeRequest(ClientSystemUtilities.java:622)
	at com.inductiveautomation.factorypmi.application.script.builtin.ClientSystemUtilities.sendRequestInternal(ClientSystemUtilities.java:576)
	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequestInternal(SystemUtilities.java:778)
	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:701)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
	... 19 more
Caused by: com.inductiveautomation.metro.api.ex.RemoteException
com.inductiveautomation.ignition.common.GenericTransferrableException: Exception occurred on remote machine, error code=GENERAL_PROTOCOL_EXCEPTION [100]
	at com.inductiveautomation.metro.impl.protocol.handler.AckErrorHandler.handleMessage(AckErrorHandler.java:76)
	at com.inductiveautomation.metro.impl.protocol.websocket.WebSocketConnection$RunSend.run(WebSocketConnection.java:2286)
	... 3 more
Traceback (most recent call last):
  File "<buffer>", line 1, in <module>
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:338)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:308)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.sendMessage(GatewayInterface.java:265)
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:888)
	at com.inductiveautomation.factorypmi.application.script.builtin.ClientSystemUtilities$SendRequestManager.invokeRequest(ClientSystemUtilities.java:622)
	at com.inductiveautomation.factorypmi.application.script.builtin.ClientSystemUtilities.sendRequestInternal(ClientSystemUtilities.java:576)
	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequestInternal(SystemUtilities.java:778)
	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:701)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Exception occurred on remote machine, error code=GENERAL_PROTOCOL_EXCEPTION [100]
>>>

com.inductiveautomation.ignition.common.GenericTransferrableException: Exception occurred on remote machine, error code=GENERAL_PROTOCOL_EXCEPTION [100]

There should be an exception logged on the other remote machine - can you also get the code from there, and post it? If you put it inside triple-backticks, it will format cleanly:

```
error
```

While I am seeing errors occur with Gateway Messaging, the specific error you are reporting I cannot reproduce. I have put in a bug for the error that I am seeing as it blocks all messages from working between versions.

As you mentioned that the connection from 7.9 to 8.0 was faulted, that is where I would start trying to resolve the issue. This connection does need to be established before this functionality will work when we do resolve the messaging issue. I just want to confirm that you approved the 7.9 system in the 8.0 gateway but going to the Configure -> Gateway Network -> Incoming Connections screen. If so, the logs from both servers as Paul requested will be needed to understand what might be going on.

Now seeing this issue when trying to use message handlers between a 8.0.13_RC (b2020051415) gateway and a 7.9.13 ( b2019120915) gateway. Gateway Network connections show running on both gateways.

Appears to be accompanied by the following error on the 7.9 gateway…

WSConnection	26May2020 13:42:04	<- incoming local='ampi ignition prod 1-master' remote='nh ignition prod 1' method=onDataReceived: Exception thrown in application, error ack will be sent to remote
java.lang.NoSuchMethodException: com.inductiveautomation.ignition.gateway.gan.GanNodeDetailsService.getPlatformVersion()

at java.lang.Class.getMethod(Unknown Source)

at com.inductiveautomation.metro.impl.services.ServiceManagerImpl.invokeService(ServiceManagerImpl.java:395)

at com.inductiveautomation.metro.impl.services.ServiceManagerImpl$ServiceInvocationIntent.receive(ServiceManagerImpl.java:847)

at com.inductiveautomation.metro.impl.CentralManagerImpl.handleLocal(CentralManagerImpl.java:453)

at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:419)

at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:42)

at com.inductiveautomation.metro.impl.protocol.AbstractHttpConnection.forward(AbstractHttpConnection.java:1187)

at com.inductiveautomation.metro.impl.protocol.AbstractHttpConnection.onDataReceived(AbstractHttpConnection.java:1078)

at com.inductiveautomation.metro.impl.protocol.AbstractDataChannelServlet.doPost(AbstractDataChannelServlet.java:180)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:85)

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1160)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1092)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)

at org.eclipse.jetty.server.Server.handle(Server.java:518)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)

at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:186)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)

at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)

at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:246)

at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:156)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)

at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)

Hello,

We experienced same issue when using system.util.sendRequest from Gateway running Ignition 7.9.14 to Gateway running Ignition 8.0.10.

Error on Gateway with version 7.9.14:

com.inductiveautomation.metro.api.ex.RemoteException: com.inductiveautomation.metro.api.ex.RemoteException: Exception occurred on remote machine, error code=GENERAL_PROTOCOL_EXCEPTION [100]

Log on Gateway with version 8.0.10:

java.io.StreamCorruptedException: invalid type code: FF

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject(Unknown Source)

at java.base/java.util.concurrent.ConcurrentHashMap.readObject(Unknown Source)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)

at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)

at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject(Unknown Source)

at java.base/java.io.ObjectInputStream.readObject(Unknown Source)

at com.inductiveautomation.metro.impl.codecs.JavaSerializationCodec.decode(JavaSerializationCodec.java:41)

at com.inductiveautomation.metro.impl.CentralManagerImpl.handleLocal(CentralManagerImpl.java:432)

at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:424)

at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:43)

at com.inductiveautomation.metro.impl.protocol.websocket.WebSocketConnection.forward(WebSocketConnection.java:1407)

at com.inductiveautomation.metro.impl.protocol.websocket.WebSocketConnection.onDataReceived(WebSocketConnection.java:1298)

at com.inductiveautomation.metro.impl.protocol.websocket.servlet.DataChannelServlet.doPost(DataChannelServlet.java:225)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:86)

at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1391)

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760)

at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:547)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)

at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607)

at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)

at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)

at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577)

at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)

at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212)

at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)

at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)

at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)

at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)

at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)

at org.eclipse.jetty.server.Server.handle(Server.java:500)

at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)

at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)

at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:543)

at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:398)

at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)

at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)

at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)

Can you please check it out and suggest what to do ?