# Deserializing event-scripts with Kindling

**URL:** <https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978>\
**Category:** General Discussion\
**Tags:** ignition81, scripting\
**Created:** [September 25, 2025, 5:10pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978 "2025-09-25T17:10:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![akivabrookler](https://avatars.discourse-cdn.com/v4/letter/a/41988e/32.png) [@akivabrookler](https://forum.inductiveautomation.com/u/akivabrookler)\
**Post date:** [September 25, 2025, 5:10pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978/1 "2025-09-25T17:10:38Z")

</div>

In Ignition 8.1, how can I deserialize event-scripts? I tried to take the data.bin file and gunzip it. After I loaded the gunzipped file into Kindling, I get the following error. Any advice?

Invalid STREAM\_MAGIC 0x-26583, should be 0xAC ED  
java.lang.IllegalArgumentException: Invalid STREAM\_MAGIC 0x-26583, should be 0xAC ED

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [September 25, 2025, 6:28pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978/2 "2025-09-25T18:28:49Z")

</div>

After gunzipping you get Java serialized data...but encoded in a special proprietary format.

It's going to be close to impossible to read that outside of a Java context - I could add it to Kindling as a best effort kind of thing - it won't be perfect because technically modules can extend that deserialization handling, but it should be possible for platform and base Vision stuff.

You ultimately need to invoke `deserializeBinary` on this class, if you're curious/motivated enough to try to extend Kindling to do it, where some base Ignition dependencies are already in scope.

> **[XMLDeserializer](https://files.inductiveautomation.com/sdk/javadoc/ignition83/8.3.0/com/inductiveautomation/ignition/common/xmlserialization/deserialization/XMLDeserializer.html)**
>
> declaration: package: com.inductiveautomation.ignition.common.xmlserialization.deserialization, class: XMLDeserializer

---

<div class="post-metadata">

**Author:** ![akivabrookler](https://avatars.discourse-cdn.com/v4/letter/a/41988e/32.png) [@akivabrookler](https://forum.inductiveautomation.com/u/akivabrookler)\
**Post date:** [September 26, 2025, 6:33pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978/3 "2025-09-26T18:33:15Z")

</div>

I tried using the `deserializeBinary` method and built a .jar executable to take a file as input and to write out the deserialized result. I’m getting runtime errors that seem like the deserializer doesn’t recognize the binary data. Any ideas what I may be doing wrong? Is this for sure the correct method I should be using?

```python
package io.ia.deserializer;

import java.io.IOException;
import java.nio.file.Files;
import java.util.Map;
import com.inductiveautomation.ignition.common.xmlserialization.SerializationException;
import com.inductiveautomation.ignition.common.xmlserialization.deserialization.DeserializationContext;
import com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer;

import static java.nio.file.Files.readAllBytes;

public final class IgnitionDeserializer {

    public static void main (String [] args) {
        if (args.length < 2) {
            System.err.println("Usage: java IgnitionDeserializer <input.bin> <output.txt>");
            System.exit(1);
        }

        // Read serialized input
        byte[] data = null;
        try {
            data = Files.readAllBytes(java.nio.file.Path.of(args[0]));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        // Run dumper
        String output = deserialize(data);

        // Write to file
        try {
            Files.writeString(java.nio.file.Path.of(args[1]), output);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        System.out.println("Deserialized written to " + args[1]);

    }

    private static String deserialize(byte [] data){
        XMLDeserializer xmlDeserializer = new XMLDeserializer();
        DeserializationContext deserializationContext;
        try {
            deserializationContext = xmlDeserializer.deserializeBinary(data);
        } catch (SerializationException e) {
            throw new RuntimeException(e);
        }

        Map<String,String> deserializedMap = deserializationContext.getRootAttributes();
        return deserializedMap.toString();
    }
}

```

```python
PS C:\Users\akiva\source\repos\ignition-sdk-examples\project-resource> java -jar .\build\libs\project-resource-0.0.1-all.jar "C:\Users\akiva\Downloads\EventScriptBinaries\start_update_shutdown.bin" ./data.out
14:03:43.834 [main] DEBUG Serialization.BinaryParser - Read header, version=2, timestamp=Fri Sep 26 10:00:29 EDT 2025
14:03:43.849 [main] DEBUG Common.BundleUtil - BundleGroupClassLoader#getResource("common.properties")
14:03:43.859 [main] DEBUG Common.BundleUtil - BundleGroupClassLoader#getResource("common_en.properties")
14:03:43.860 [main] DEBUG Common.BundleUtil - BundleGroupClassLoader#getResource("common_en_US.properties")
14:03:43.860 [main] DEBUG Common.BundleUtil - Requested load of resource bundle 'common' for locale 'en_US', received bundle for ''
14:03:43.862 [main] DEBUG Serialization.BinaryParser - Read 32 strings from string-table in 3 ms.
Exception in thread "main" java.lang.RuntimeException: com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Unexpected parsing error during binary deserialization.
        at io.ia.deserializer.IgnitionDeserializer.deserialize(IgnitionDeserializer.java:48)
        at io.ia.deserializer.IgnitionDeserializer.main(IgnitionDeserializer.java:29)
Caused by: com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Unexpected parsing error during binary deserialization.
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:376)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:355)
        at io.ia.deserializer.IgnitionDeserializer.deserialize(IgnitionDeserializer.java:46)
        ... 1 more
Caused by: org.apache.commons.io.IOExceptionWithCause: java.lang.ClassNotFoundException: str
        at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$SignatureDecoder.binaryToObject(Decoders.java:434)
        at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$SignatureDecoder.binaryToObject(Decoders.java:408)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readAttributes(BinaryParser.java:179)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:148)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.readElement(BinaryParser.java:157)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.BinaryParser.parse(BinaryParser.java:51)
        at com.inductiveautomation.ignition.common.xmlserialization.deserialization.XMLDeserializer.deserializeBinary(XMLDeserializer.java:367)
        ... 3 more
Caused by: java.lang.ClassNotFoundException: str
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:467)
        at java.base/java.lang.Class.forName(Class.java:458)
        at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForNameImpl(ClassNameResolver.java:196)
        at com.inductiveautomation.ignition.common.xmlserialization.ClassNameResolver.classForName(ClassNameResolver.java:169)
        at com.inductiveautomation.ignition.common.xmlserialization.encoding.Decoders$SignatureDecoder.binaryToObject(Decoders.java:430)
        ... 10 more

```

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [September 26, 2025, 8:40pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978/4 "2025-09-26T20:40:43Z")

</div>

You'll need to at least call `initDefaults()` on your deserializer instance:

> **[XMLDeserializer](https://files.inductiveautomation.com/sdk/javadoc/ignition83/8.3.0/com/inductiveautomation/ignition/common/xmlserialization/deserialization/XMLDeserializer.html#initDefaults())**
>
> declaration: package: com.inductiveautomation.ignition.common.xmlserialization.deserialization, class: XMLDeserializer

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [September 26, 2025, 11:39pm UTC](https://forum.inductiveautomation.com/t/deserializing-event-scripts-with-kindling/110978/5 "2025-09-26T23:39:12Z")

</div>

Feel free to try this PR out:

> <https://github.com/inductiveautomation/kindling/pull/317>
>
> Fixes #312

It's probably not immediately useful to you, but should prove the concept:

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