Skip to content

Enhance JLCircleMarker and JLImageOverlay with new methods for GeoJSO… #10

Enhance JLCircleMarker and JLImageOverlay with new methods for GeoJSO…

Enhance JLCircleMarker and JLImageOverlay with new methods for GeoJSO… #10

GitHub Actions / Test Results (Java 21) succeeded Sep 17, 2025 in 0s

95 passed, 17 failed and 0 skipped

Tests failed

Report Passed Failed Skipped Time
jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.builder.JLCircleBuilderTest.xml 1✅ 57ms
jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.builder.JLOptionsBuilderTest.xml 2✅ 58ms
jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.JLGeoJsonOptionsTest.xml 4✅ 167ms
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.engine.JLJavaFXEngineTest.xml 4✅ 120ms
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.integration.JLMapViewIntegrationTest.xml 9✅ 23s
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest.xml 11✅ 1❌ 34ms
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLControlLayerTest.xml 25✅ 54ms
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml 16❌ 1s
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLUiLayerTest.xml 17✅ 84ms
jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLVectorLayerTest.xml 22✅ 72ms

✅ jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.builder.JLCircleBuilderTest.xml

1 tests were completed in 57ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.model.builder.JLCircleBuilderTest 1✅ 57ms

✅ io.github.makbn.jlmap.model.builder.JLCircleBuilderTest

✅ builder_withOptions_buildCircle

✅ jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.builder.JLOptionsBuilderTest.xml

2 tests were completed in 58ms with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.model.builder.JLOptionsBuilderTest 2✅ 58ms

✅ io.github.makbn.jlmap.model.builder.JLOptionsBuilderTest

✅ toString_shouldGenerateLeafletStyleString
✅ optionBuilder_default_shouldGenerateTheMap

✅ jlmap-api/target/surefire-reports/TEST-io.github.makbn.jlmap.model.JLGeoJsonOptionsTest.xml

4 tests were completed in 167ms with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.model.JLGeoJsonOptionsTest 4✅ 167ms

✅ io.github.makbn.jlmap.model.JLGeoJsonOptionsTest

✅ shouldCreateOptionsWithFilter
✅ shouldBuildOptionsWithStyleAndFilter
✅ shouldCreateOptionsWithStyleFunction
✅ shouldCreateDefaultOptions

✅ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.engine.JLJavaFXEngineTest.xml

4 tests were completed in 120ms with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.engine.JLJavaFXEngineTest 4✅ 120ms

✅ io.github.makbn.jlmap.fx.test.engine.JLJavaFXEngineTest

✅ jlJavaFXEngine_shouldExtendJLWebEngine
✅ jlJavaFXEngine_shouldHaveCorrectConstructorParameter
✅ constructor_withNullWebEngine_shouldAcceptNullEngine
✅ jlJavaFXEngine_shouldImplementRequiredMethods

✅ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.integration.JLMapViewIntegrationTest.xml

9 tests were completed in 23s with 9 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.integration.JLMapViewIntegrationTest 9✅ 23s

✅ io.github.makbn.jlmap.fx.test.integration.JLMapViewIntegrationTest

✅ jlMapView_addGeoJsonFromContent_shouldAddGeoJsonAsLayer
✅ jlMapView_addPopup_shouldAddPopupAsLayer
✅ jlMapView_addPolygon_shouldAddPolygonAsLayer
✅ jlMapView_addCircle_shouldAddCircleAsLayer
✅ jlMapView_addPolyline_shouldAddPolylineAsLayer
✅ jlMapView_addImageOverlay_shouldAddImageOverlayAsLayer
✅ jlMapView_addCircleMarker_shouldAddCircleMarkerAsLayer
✅ jlMapView_addMarker_shouldAddMarkerAsLayer
✅ jlMapView_addMultiPolyline_shouldAddMultiPolylineAsLayer

❌ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest.xml

12 tests were completed in 34ms with 11 passed, 1 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest 11✅ 1❌ 34ms

❌ io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest

✅ render_shouldIncludeAllMapEventHandlers
✅ render_shouldIncludeClientToServerEventHandler
✅ render_shouldIncludeMetaTags
✅ render_shouldIncludeLeafletCssAndJavascript
✅ render_shouldIncludeMapSetup
✅ render_shouldIncludeLeafletIntegrityAttributes
❌ render_shouldIncludeMapHelperFunctions
	java.lang.AssertionError:
✅ render_shouldIncludeMapContainerDiv
✅ render_shouldIncludeMapInitializationWithCorrectParameters
✅ render_shouldIncludeJsRelayFunction
✅ render_shouldSetBodyStyle
✅ render_shouldGenerateValidHtmlDocument

✅ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLControlLayerTest.xml

25 tests were completed in 54ms with 25 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.layer.JLControlLayerTest 25✅ 54ms

✅ io.github.makbn.jlmap.fx.test.layer.JLControlLayerTest

✅ setZoomAround_withNullLatLng_shouldThrowNullPointerException
✅ setMaxZoom_shouldExecuteCorrectScript
✅ panInside_shouldExecuteCorrectScript
✅ flyTo_shouldExecuteCorrectScript
✅ panTo_withNullLatLng_shouldThrowNullPointerException
✅ zoomOperations_withNegativeValues_shouldExecuteCorrectScript
✅ panInsideBounds_shouldExecuteCorrectScript
✅ zoomIn_shouldExecuteCorrectScript
✅ constructor_withNullEngine_shouldAcceptNullEngine
✅ panTo_shouldExecuteCorrectScript
✅ zoomOperations_withZeroValues_shouldExecuteCorrectScript
✅ setMaxBounds_shouldExecuteCorrectScript
✅ fitBounds_shouldExecuteCorrectScript
✅ zoomOut_shouldExecuteCorrectScript
✅ flyTo_withNullLatLng_shouldThrowNullPointerException
✅ setMinZoom_shouldExecuteCorrectScript
✅ setZoom_shouldExecuteCorrectScript
✅ fitBounds_withNullBounds_shouldThrowNullPointerException
✅ flyToBounds_shouldExecuteCorrectScript
✅ constructor_withNullCallbackHandler_shouldAcceptNullHandler
✅ multipleOperations_shouldExecuteAllScripts
✅ setMaxBounds_withNullBounds_shouldThrowNullPointerException
✅ controlLayer_shouldExtendJLLayer
✅ fitWorld_shouldExecuteCorrectScript
✅ setZoomAround_shouldExecuteCorrectScript

❌ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml

16 tests were completed in 1s with 0 passed, 16 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest 16❌ 1s

❌ io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest

❌ addFromUrl_whenUrlLoadFails_shouldThrowJLException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromFile_whenFileLoadFails_shouldThrowJLException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ geoJsonLayer_shouldGenerateUniqueIds
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromUrl_withValidUrl_shouldLoadUrlAndExecuteScript
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromContent_withNullContent_shouldThrowNullPointerException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ geoJsonLayer_shouldExtendJLLayer
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromUrl_withNullUrl_shouldThrowNullPointerException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ removeGeoJson_withNullId_shouldThrowNullPointerException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ constructor_withNullEngine_shouldAcceptNullEngine
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromFile_withNullFile_shouldThrowNullPointerException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromContent_whenContentLoadFails_shouldThrowJLException
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ multipleGeoJsonOperations_shouldExecuteAllScripts
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ constructor_withNullCallbackHandler_shouldAcceptNullHandler
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ removeGeoJson_shouldExecuteRemoveScriptAndRemoveFromCallback
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromFile_withValidFile_shouldLoadFileAndExecuteScript
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
❌ addFromContent_withValidContent_shouldLoadContentAndExecuteScript
	java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null

✅ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLUiLayerTest.xml

17 tests were completed in 84ms with 17 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.layer.JLUiLayerTest 17✅ 84ms

✅ io.github.makbn.jlmap.fx.test.layer.JLUiLayerTest

✅ removePopup_shouldExecuteRemoveScript
✅ addImage_withNullImageUrl_shouldAcceptNullUrl
✅ addMarker_withNonDraggableMarker_shouldExecuteCorrectScript
✅ uiLayer_shouldExtendJLLayer
✅ addMarker_withNullText_shouldAcceptNullText
✅ uiLayer_shouldGenerateUniqueIds
✅ addPopup_withNullPosition_shouldThrowNullPointerException
✅ addImage_shouldExecuteCorrectScript
✅ removeMarker_shouldExecuteRemoveScript
✅ constructor_withNullEngine_shouldAcceptNullEngine
✅ addPopup_withDefaultOptions_shouldExecuteCorrectScript
✅ addPopup_withNullText_shouldAcceptNullText
✅ addMarker_withNullPosition_shouldThrowNullPointerException
✅ addImage_withNullBounds_shouldThrowNullPointerException
✅ constructor_withNullCallbackHandler_shouldAcceptNullHandler
✅ addPopup_withCustomOptions_shouldIncludeOptionsInScript
✅ addMarker_withDraggableMarker_shouldExecuteScriptWithDraggableTrue

✅ jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLVectorLayerTest.xml

22 tests were completed in 72ms with 22 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.github.makbn.jlmap.fx.test.layer.JLVectorLayerTest 22✅ 72ms

✅ io.github.makbn.jlmap.fx.test.layer.JLVectorLayerTest

✅ addMultiPolyline_withValidVertices_shouldCreateMultiPolyline
✅ addPolygon_withValidVertices_shouldCreatePolygon
✅ removeCircle_shouldExecuteRemoveScript
✅ addCircleMarker_withDefaultOptions_shouldCreateCircleMarker
✅ addCircleMarker_withNullCenter_shouldThrowNullPointerException
✅ addMultiPolyline_withNullVertices_shouldThrowNullPointerException
✅ addPolyline_withNullVertices_shouldThrowNullPointerException
✅ addPolygon_withNullVertices_shouldThrowNullPointerException
✅ constructor_withNullEngine_shouldAcceptNullEngine
✅ addPolyline_withCustomOptions_shouldIncludeOptionsInScript
✅ removeMultiPolyline_shouldExecuteRemoveScript
✅ constructor_withNullCallbackHandler_shouldAcceptNullHandler
✅ removeCircleMarker_shouldExecuteRemoveScript
✅ addPolyline_withEmptyVertices_shouldAcceptEmptyArray
✅ vectorLayer_shouldGenerateUniqueIds
✅ removePolygon_shouldExecuteRemoveScript
✅ addCircle_withCustomRadius_shouldUseCustomRadius
✅ addPolyline_withValidVertices_shouldCreatePolylineAndExecuteScript
✅ addCircle_withNullCenter_shouldThrowNullPointerException
✅ vectorLayer_shouldExtendJLLayer
✅ removePolyline_shouldExecuteRemoveScript
✅ addCircle_withDefaultOptions_shouldCreateCircleWithDefaults

Annotations

Check failure on line 124 in jlmap-fx/src/test/java/io/github/makbn/jlmap/fx/test/internal/JLFxMapRendererTest.java

See this annotation in the file changed.

@github-actions github-actions / Test Results (Java 21)

io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest ► render_shouldIncludeMapHelperFunctions

Failed test found in:
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest.xml
Error:
  java.lang.AssertionError: 
Raw output
java.lang.AssertionError: 

Expecting actual:
  "<!DOCTYPE html><html lang="EN"><head><title>JLMap Java - Leaflet</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""><script src="https://unpkg.com/[email protected]/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script><script src="https://cdn.jsdelivr.net/npm/[email protected]/leaflet-providers.min.js"></script><script>function jlMapServerCallbackDelegate(functionName, param1, param2, param3, param4, param5) {
    //do nothing
}

let fun = jlMapServerCallbackDelegate;
jlMapServerCallbackDelegate = function () {
    if ('serverCallback' in window) {
        serverCallback.functionCalled(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
    }
    fun.apply(this, arguments);
}
</script><script>function getCenterOfElement(event, mapElement) {
   return JSON.stringify(event.latlng ? event.latlng: {
           lat: mapElement.getCenter().lat,
           lng: mapElement.getCenter().lng
   });
}

function getMapBounds(mapElement) {
   return JSON.stringify({
                   "northEast": {
                       "lat": mapElement.getBounds().getNorthEast().lat,
                       "lng": mapElement.getBounds().getNorthEast().lng,
                   },
                   "southWest": {
                       "lat": mapElement.getBounds().getSouthWest().lat,
                       "lng": mapElement.getBounds().getSouthWest().lng,
                   }
               });
   }
</script><script>function eventHandler(functionType, jlType, uuid, param1, param2, param3) {
     jlMapServerCallbackDelegate(functionType, jlType, uuid, param1, param2, param3);
}
</script></head><body style="margin: 0; background-color: #191a1a;"><div id="jl-map-view" class="leaflet-container leaflet-retina" style="width: 100%; min-height: 100vh; height: 100vh; position: relative; background-color: #191a1a;"></div><script>    this.jlMapElement = document.querySelector('#jl-map-view');
    this.map = L.map(this.jlMapElement, {zoomControl: true}).setView([52.52, 13.405], 13);

    L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(this.map);

    this.outr_eventHandler = eventHandler;
    this.jlMapElement.$server = {
        eventHandler: (functionType, jlType, uuid, param1, param2, param3) =>
            this.outr_eventHandler(functionType, jlType, uuid, param1, param2, param3)
    };

    this.map.jlid = 'main_map';

    this.map.on('click', e => eventHandler('click', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('move', e => eventHandler('move', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('movestart', e => eventHandler('movestart', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('moveend', e => eventHandler('moveend', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('zoom', e => eventHandler('zoom', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('zoomstart', e => eventHandler('zoomstart', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('zoomend', e => eventHandler('zoomend', 'map', 'main_map', this.map.getZoom(), getCenterOfElement(e, this.map), getMapBounds(this.map)));
    this.map.on('resize', e => eventHandler('resize', 'map', 'main_map', this.map.getZoom(), JSON.stringify({"oldWidth": e.oldSize.x, "oldHeight": e.oldSize.y, "newWidth": e.newSize.x, "newHeight": e.newSize.y}), getMapBounds(this.map)));

</script></body></html>"
to contain:
  "function getCenterOfElement(element)" 
	at io.github.makbn.jlmap.fx.test.internal.JLFxMapRendererTest.render_shouldIncludeMapHelperFunctions(JLFxMapRendererTest.java:124)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

Check failure on line 30 in jlmap-fx/src/main/java/io/github/makbn/jlmap/fx/engine/JLJavaFXClientToServerTransporter.java

See this annotation in the file changed.

@github-actions github-actions / Test Results (Java 21)

io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest ► addFromUrl_whenUrlLoadFails_shouldThrowJLException

Failed test found in:
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
  jlmap-fx/target/surefire-reports/TEST-io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.xml
Error:
  java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
Raw output
java.lang.NullPointerException: Cannot invoke "netscape.javascript.JSObject.setMember(String, Object)" because "window" is null
	at io.github.makbn.jlmap.fx.engine.JLJavaFXClientToServerTransporter.initializeBridge(JLJavaFXClientToServerTransporter.java:30)
	at io.github.makbn.jlmap.fx.engine.JLJavaFXClientToServerTransporter.<init>(JLJavaFXClientToServerTransporter.java:23)
	at io.github.makbn.jlmap.fx.layer.JLGeoJsonLayer.<init>(JLGeoJsonLayer.java:78)
	at io.github.makbn.jlmap.fx.test.layer.JLGeoJsonLayerTest.setUp(JLGeoJsonLayerTest.java:57)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)