Exception in dispatch()

Server Information
Servoy version 8.4.0 -releaseNumber 3402
Repository version 50 

JVM Information
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
java.version=1.8.0_181
java.vm.info=mixed mode
java.vm.vendor=Oracle Corporation 

Operating System Information
os.name=Windows Server 2016
os.version=10.0
os.arch=amd64

We are seeing some of these in the logs. We are running NG-Clients and a batch processor on Tomcat.
Any idea of what I should be looking for in my code to get rid of them?

org.sablo.eventthread.EventDispatcher		 	 
java.lang.StackOverflowError: null
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at com.servoy.j2db.server.ngclient.WebFormComponent.toString(WebFormComponent.java:115) ~[servoy_ngclient_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at com.servoy.j2db.server.ngclient.WebFormComponent.toString(WebFormComponent.java:115) ~[servoy_ngclient_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at com.servoy.j2db.server.ngclient.component.RuntimeWebComponent.toString(RuntimeWebComponent.java:737) ~[servoy_ngclient_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at com.servoy.j2db.scripting.JSEvent.toString(JSEvent.java:49) ~[j2db.jar:8.4.0.3402]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[?:1.8.0_181]
at org.sablo.specification.property.ChangeAwareList.toString(ChangeAwareList.java:761) ~[sablo_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractMap.toString(AbstractMap.java:559) ~[?:1.8.0_181]
at org.sablo.specification.property.ChangeAwareMap.toString(ChangeAwareMap.java:701) ~[sablo_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[?:1.8.0_181]
at org.sablo.specification.property.ChangeAwareList.toString(ChangeAwareList.java:761) ~[sablo_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractMap.toString(AbstractMap.java:559) ~[?:1.8.0_181]
at org.sablo.specification.property.ChangeAwareMap.toString(ChangeAwareMap.java:701) ~[sablo_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractCollection.toString(AbstractCollection.java:462) ~[?:1.8.0_181]
at org.sablo.specification.property.ChangeAwareList.toString(ChangeAwareList.java:761) ~[sablo_8.4.0.3402.jar:?]
at java.lang.String.valueOf(String.java:2994) ~[?:1.8.0_181]
at java.lang.StringBuilder.append(StringBuilder.java:131) ~[?:1.8.0_181]
at java.util.AbstractMap.toString(AbstractMap.java:559) ~[?:1.8.0_181]
---------

Hard to say. But it seems like somewhere in some ng component or service you have a structure such as this one (in the .spec):

(...)
"model": {
    (...)
},
 
"types": {
    "myCustomType": {
        (...),
        someListOfJSEvents: "JSEvent[]",
        someOtherKeyThatHoldsAListOfSameTypeOfCustomObject: "myCustomType[]"
    }
}
(...)

and at runtime you have something like this

myListInstance1 = [ …, /myCustomType/ { someListOfJSEvents: [ /JSEvent/, … ], someOtherKeyThatHoldsAListOfSameTypeOfCustomObject: myListInstance1 }, … ]

So a list of (custom) objects that have at least a list of events and another list of (probably same type of) custom objects. And you somehow end up having the same instances (list holds object and object holds list) - probably assigning objects and lists somewhere in solution or server-side-scripting. Then the toString() method is called on one of those (but who calls that you cannot see from the stack).

Thanks, I will check if this message appears when my customer components are displayed…