# Error at setup for Resource migration

**URL:** <https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794>\
**Category:** Module Development\
**Tags:** ignition83\
**Created:** [September 19, 2025, 5:56pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794 "2025-09-19T17:56:57Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [September 19, 2025, 5:56pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/1 "2025-09-19T17:56:57Z")

</div>

**Ignition 8.3** (no forum tag…)

I migrated a module from 8.1.

At setup I have the following error:

Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "com.bouyguesenergiesservices.ignition.gateway.utils.records.ByesModulesUtilsSettingsResource.NetworkInterfacesTagsEnabled()" is null

The \*\*config.json\*\* file file seems to be ok:

```json
{
"alarmCountEnabled": true,
"alarmMaximumPriority": "Critical",
"alarmMinimumPriority": "Low",
"alarmScanPeriodSec": 10,
"alarmSources": "prov:default:/tag:TVG\*:/alm:\*",
"includeSystem": false,
"networkInterfacesScanPeriodSec": 10,
"networkInterfacesTagsEnabled": true,
"projectListenerEnabled": false,
"projectListenerFilterProjectAdded": false,
"projectListenerFilterProjectDeleted": false,
"projectListenerFilterProjectNames": "global",
"projectListenerFilterProjectUpdated": false,
"projectListenerGatewayMessageHandler": "gwHandlerPlatformUpdate",
"projectListenerGatewayMessageProjectName": "",
"projectListenerMinimalInterval": 60,
"projectListenerNotificationDelay": 30,
"projectListenerUseGatewayScriptingProject": true,
"serverDiagEnabled": true,
"serverDiagScanPeriodSec": 10,
"webServerCacheSeconds": 0,
"webServerDirPath": "C:/web",
"webServerEnabled": true,
"webServerStaticCacheSeconds": 0,
"webServerStaticDirPath": null
}

```

and the code at setup:

```java
context.getConfigurationManager().getResourceTypeMetaRegistry().register(ByesModulesUtilsSettingsResource.META);
singletonResourceHandler = SingletonResourceHandler.newBuilder(ByesModulesUtilsSettingsResource.META)
        .context(context)
        // add a listener that will be invoked whenever this resource changes
        .onChange(byesModulesUtilsSettingsResource -> {
            // settings globaux => fire onChange même si pas de modif sur la catégory concernée
            managerNetworkInterfaces.onChange(byesModulesUtilsSettingsResource);
            managerServer.onChange(byesModulesUtilsSettingsResource);
            managerWebServer.onChange(byesModulesUtilsSettingsResource);
        })
        .build();

settingsResource = singletonResourceHandler.getResource();

```

```python
java.lang.Exception: Exception while starting up module "com.bouyguesenergiesservices.utils".
at com.inductiveautomation.ignition.gateway.modules.ModuleInstance.startup(ModuleInstance.java:709)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.runStartupPhase(ModuleManagerImpl.java:499)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startup(ModuleManagerImpl.java:459)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.startupInternal(IgnitionGateway.java:1304)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.startup(RedundancyManagerImpl.java:352)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.initRedundancy(IgnitionGateway.java:787)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.lambda$initInternal$1(IgnitionGateway.java:712)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.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.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "com.bouyguesenergiesservices.ignition.gateway.utils.records.ByesModulesUtilsSettingsResource.NetworkInterfacesTagsEnabled()" is null
at com.bouyguesenergiesservices.ignition.gateway.utils.ManagerNetworkInterfaces.onChange(ManagerNetworkInterfaces.java:100)
at com.bouyguesenergiesservices.ignition.gateway.utils.GatewayHook.lambda$setup$0(GatewayHook.java:262)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Builder$1.onResourceUpdated(SingletonResourceHandler.java:400)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler.onResourceUpdated(SingletonResourceHandler.java:179)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.updateResource(SingletonResourceHandler.java:255)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.updateRef(SingletonResourceHandler.java:287)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler$Lifecycle.onStartup(SingletonResourceHandler.java:273)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycle.onStartup(ResourceCollectionLifecycle.java:61)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.maybeStartLifecycle(ResourceCollectionLifecycleFactory.java:264)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$4(ResourceCollectionLifecycleFactory.java:248)
at java.base/java.util.Optional.ifPresent(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$5(ResourceCollectionLifecycleFactory.java:243)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.updateOrStartAffected(ResourceCollectionLifecycleFactory.java:190)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.collectionAdded(ResourceCollectionLifecycleFactory.java:145)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory.onStartup(ResourceCollectionLifecycleFactory.java:61)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.inductiveautomation.ignition.gateway.config.SingletonResourceHandler.onStartup(SingletonResourceHandler.java:145)
at com.inductiveautomation.ignition.common.lifecycle.AbstractLifecycle.startup(AbstractLifecycle.java:19)
at com.bouyguesenergiesservices.ignition.gateway.utils.GatewayHook.startup(GatewayHook.java:362)
at com.inductiveautomation.ignition.gateway.modules.ModuleInstance.startup(ModuleInstance.java:703)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.runStartupPhase(ModuleManagerImpl.java:499)
at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startup(ModuleManagerImpl.java:459)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.startupInternal(IgnitionGateway.java:1304)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.startup(RedundancyManagerImpl.java:352)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.initRedundancy(IgnitionGateway.java:787)
at com.inductiveautomation.ignition.gateway.IgnitionGateway.lambda$initInternal$1(IgnitionGateway.java:712)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.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)

```

```java
package com.bouyguesenergiesservices.ignition.gateway.utils.records;

import com.bouyguesenergiesservices.ignition.common.utils.Constantes;
import com.inductiveautomation.ignition.common.alarming.AlarmPriority;
import com.inductiveautomation.ignition.common.resourcecollection.ResourceType;
import com.inductiveautomation.ignition.gateway.config.ResourceTypeMeta;
import com.inductiveautomation.ignition.gateway.dataroutes.openapi.annotations.*;
import com.inductiveautomation.ignition.gateway.web.nav.FormFieldType;

public record ByesModulesUtilsSettingsResource(

        // Category NetworkInterfaces
        //--------------

        @FormCategory("NetworkInterfaces")
        @FormField(FormFieldType.CHECKBOX)
        @Label("TagsEnabled")
        @Required
        //@DefaultValue(Boolean.TRUE)
        @Description("Create Managed tags for Network Interfaces")
        Boolean NetworkInterfacesTagsEnabled,

        @FormCategory("NetworkInterfaces")
        @FormField(FormFieldType.NUMBER)
        @Label("ScanPeriodSec")
        @Required
        @Description("Period for updating Managed tags for Network Interfaces")
        @Maximum("65535")
        @Minimum("0")
        @DefaultValue("10")
        Integer NetworkInterfacesScanPeriodSec,

.....
)
{
    // typeId => nom du dossier
    public static final ResourceType TYPE = new ResourceType(Constantes.MODULE_ID, "settings");

    public static final ByesModulesUtilsSettingsResource DEFAULT = new ByesModulesUtilsSettingsResource(
            true,
            10,
            true,
            10,
            "prov:default:/tag:*:/alm:*",
            AlarmPriority.Low.getIntValue(),
            AlarmPriority.High.getIntValue(),
            false,
            true,
            "global",
            true,
            false,
            true,
            "gwHandlerPlatformUpdate",
            true,
            "",
            30,
            60,
            false,
            "C:/Data",
            30,
            "C:/StaticData",
            0,
            true,
            10
    );

    public static final ResourceTypeMeta<ByesModulesUtilsSettingsResource> META = ResourceTypeMeta.newBuilder(ByesModulesUtilsSettingsResource.class)
            .resourceType(TYPE)
            .singleton()
            .defaultConfig(DEFAULT)
            .categoryName("Byes Modules Utils SettingsResource") .build();
}

```

I probably miss something.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 19, 2025, 6:04pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/2 "2025-09-19T18:04:34Z")

</div>

> [@mazeyrat](#):
>
> ```python
> public record ByesModulesUtilsSettingsResource(
> 
> // Category NetworkInterfaces
> //--------------
> 
> @FormCategory("NetworkInterfaces")
> @FormField(FormFieldType.CHECKBOX)
> @Label("TagsEnabled")
> @Required
> //@DefaultValue(Boolean.TRUE)
> @Description("Create Managed tags for Network Interfaces")
> Boolean NetworkInterfacesTagsEnabled,
> 
> ```

your record class field names start with upper case (not the normal convention btw), but your JSON fields don't... might be a problem.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 19, 2025, 6:06pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/3 "2025-09-19T18:06:15Z")

</div>

> [@mazeyrat](#):
>
> **Ignition 8.3** (no forum tag…)

Seems like there is one? [Topics tagged ignition83](https://forum.inductiveautomation.com/tag/ignition83)

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [September 19, 2025, 6:09pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/4 "2025-09-19T18:09:00Z")

</div>

Json fields have been generated by the migration strategy, I will try to change the field name in the Record

PersistentRecord was:

```python
public static final BooleanField NetworkInterfacesTagsEnabled = new BooleanField(META, "NetworkInterfacesTagsEnabled", SFieldFlags.SMANDATORY);
public static final IntField NetworkInterfacesScanPeriodSec = new IntField(META, "NetworkInterfacesScanPeriodSec",SFieldFlags.SMANDATORY);

```

Uppercase in SQLITE

What’s strange, I do not have this issue with 8.3.0-beta4 and a fresh install.

And I still have the issue with 8.3.0 after a gateway reboot

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [September 19, 2025, 6:17pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/5 "2025-09-19T18:17:22Z")

</div>

just realize that there was other category 🫢 but need to search, the dropdown only display the first one…

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/3/3343ad3a76c2e46b0661e670dfe62322598a5d15.png)

---

<div class="post-metadata">

**Author:** ![David\_Stone](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/david_stone/32/79749_2.png) [@David\_Stone](https://forum.inductiveautomation.com/u/David_Stone)\
**Post date:** [September 19, 2025, 6:19pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/6 "2025-09-19T18:19:38Z")

</div>

I added it for you earlier, those tags in the menu are ordered based on popularity.

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [September 19, 2025, 6:44pm UTC](https://forum.inductiveautomation.com/t/error-at-setup-for-resource-migration/110794/7 "2025-09-19T18:44:19Z")

</div>

I’ve finally renamed the Record and used:

```java
 @Override public List<IdbMigrationStrategy> getRecordMigrationStrategies() {

        logger.info("getRecordMigrationStrategies() : add SingletonRecordMigrationStrategy for ByesModulesUtilsSettingsRecord");

        return List.of(new SingletonRecordMigrationStrategy(
                ByesModulesUtilsSettingsRecord.META,
                ByesModulesUtilsSettingsRecord.Id,
                ByesModulesUtilsSettingsResource.TYPE,
                DefaultRecordEncodingDelegate.newBuilder()
                        .withCustomFieldName(ByesModulesUtilsSettingsRecord.NetworkInterfacesTagsEnabled,"networkInterfacesTagsEnabled")
                        .withCustomFieldName(ByesModulesUtilsSettingsRecord.NetworkInterfacesScanPeriodSec,"networkInterfacesScanPeriodSec")
...

```

and it solved the issue.
