Ignition 8.3 system.util.sendRequest() causes an exception

I am trying to do a basic message event between two gateways and I am getting an exception from the system.util.sendRequest() function

payload = {
	"program": program,
	"machine_id": machine_id
}
response = system.util.sendRequest(
	project = "ProjectName",
	messageHandler = "RequestProgram",
	remoteServer = "GatewayName",
	payload = payload,
	timeoutSec = 120
)
return response

The handler that I am trying to send to literally just has “return True”

I am also trying to send the request from the gateway itself as shown below and it doesn’t work

payload = {
	"program": program,
	"machine_id": machine_id
}
response = system.util.sendRequest(
	project = system.util.getProjectName(),
	messageHandler = "RequestProgram",
	remoteServer = system.tag.readBlocking("[System]Gateway/SystemName")[0].value,
	payload = payload,
	timeoutSec = 120
)
return response

The shortened error I am getting is down below:

Traceback (most recent call last):
  File "<input>", line 5, in <module>
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)

	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)

	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:827)

	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)

java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.ClassCastException: class java.util.Collections$UnmodifiableMap cannot be cast to class org.python.core.PyDictionary (java.util.Collections$UnmodifiableMap is in module java.base of loader 'bootstrap'; org.python.core.PyDictionary is in unnamed module of loader 'app')

This worked before we upgraded to 8.3 but doesn’t now. Any ideas why?

This just got reported in another thread this morning, it's being looked into.

1 Like

If you freshly launch the designer, does this problem still occur?
If so, is there an error at the beginning of your designer's logging output with a message Failed to retrieve script message encoding, defaulting to JSON? If so, can you post the full related stacktrace here?

1 Like

I tried it again this morning. I dont see “Failed to retrieve script message encoding, defaulting to JSON” anywhere. Stack and my console log shown below:

Java Traceback: Traceback (most recent call last):   File "<input>", line 5, in <module> 	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)  	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)  	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:827)  	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)  java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.ClassCastException: class java.util.Collections$UnmodifiableMap cannot be cast to class org.python.core.PyDictionary (java.util.Collections$UnmodifiableMap is in module java.base of loader 'bootstrap'; org.python.core.PyDictionary is in unnamed module of loader 'app')   	at org.python.core.Py.JavaError(Py.java:545)  	at org.python.core.Py.JavaError(Py.java:536)  	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192)  	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:563)  	at org.python.core.PyObject.__call__(PyObject.java:400)  	at org.python.pycode._pyx9.f$0(<input>:12)  	at org.python.pycode._pyx9.call_function(<input>)  	at org.python.core.PyTableCode.call(PyTableCode.java:173)  	at org.python.core.PyCode.call(PyCode.java:18)  	at org.python.core.Py.runCode(Py.java:1703)  	at org.python.core.Py.exec(Py.java:1747)  	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)  	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)  	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:628)  	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:616)  	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: java.util.concurrent.ExecutionException: java.lang.ClassCastException: class java.util.Collections$UnmodifiableMap cannot be cast to class org.python.core.PyDictionary (java.util.Collections$UnmodifiableMap is in module java.base of loader 'bootstrap'; org.python.core.PyDictionary is in unnamed module of loader 'app')  	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)  	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)  	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:827)  	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:190)  	... 18 more  Caused by: java.lang.ClassCastException: class java.util.Collections$UnmodifiableMap cannot be cast to class org.python.core.PyDictionary (java.util.Collections$UnmodifiableMap is in module java.base of loader 'bootstrap'; org.python.core.PyDictionary is in unnamed module of loader 'app')  	at com.inductiveautomation.ignition.gateway.script.rpc.ScriptMessagingRpcImpl.extractPayload(ScriptMessagingRpcImpl.java:93)  	at com.inductiveautomation.ignition.gateway.script.rpc.ScriptMessagingRpcImpl.dispatchRequest(ScriptMessagingRpcImpl.java:69)  	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(:0)  	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(:0)  	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(:0)  	at java.lang.reflect.Method.invoke(:0)  	at com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:271)  	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:199)  	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:219)  	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:198)  	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:361)  	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:120)  	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:133)  	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)  	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)  	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)  	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)  	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614)  	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:116)  	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)  	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)  	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586)  	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547)  	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)  	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)  	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464)  	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)  	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)  	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)  	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)  	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)  	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)  	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)  	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)  	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)  	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)  	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)  	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)  	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)  	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)  	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)  	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)  	at org.eclipse.jetty.server.Server.handle(Server.java:182)  	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)  	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:418)  	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)  	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)  	at org.eclipse.jetty.io.ssl.SslConnection$SslEndPoint.onFillable(SslConnection.java:575)  	at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:390)  	at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:150)  	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)  	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)  	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)  	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)  	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)  	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)  	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)  	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)  	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)  	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)  	at java.lang.Thread.run(:0)  Traceback (most recent call last):   File "<input>", line 5, in <module> 	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)  	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)  	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendRequest(SystemUtilities.java:827)  	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)  java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.ClassCastException: class java.util.Collections$UnmodifiableMap cannot be cast to class org.python.core.PyDictionary (java.util.Collections$UnmodifiableMap is in module java.base of loader 'bootstrap'; org.python.core.PyDictionary is in unnamed module of loader 'app')

This is what I ran directly.

payload = {
	"program": "program",
	"machine_id": "machine_id"
}
response = system.util.sendRequest(
	project = "ProjectName",
	messageHandler = "RequestProgram",
	remoteServer = "GatewayName",
	payload = payload,
	timeoutSec = 120
)
print response

Echoing my response from this other thread for visibility - and thank you @atsm26 also for your report.

1 Like

Thanks for the response and working on it! Appreciate it

1 Like