# Not a built-in type: class java.math.BigInteger

**URL:** <https://forum.inductiveautomation.com/t/not-a-built-in-type-class-java-math-biginteger/88579>\
**Category:** Ignition\
**Tags:** opcua, ignition81\
**Created:** [April 9, 2024, 2:37pm UTC](https://forum.inductiveautomation.com/t/not-a-built-in-type-class-java-math-biginteger/88579 "2024-04-09T14:37:28Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 9, 2024, 2:37pm UTC](https://forum.inductiveautomation.com/t/not-a-built-in-type-class-java-math-biginteger/88579/1 "2024-04-09T14:37:28Z")

</div>

When doing arithmetic with jython longs, and passing them into `system.opc.write*()`, I'm getting scary backtraces:

```auto
2024/04/09 14:25:26.554 | W [o.e.m.o.s.c.s.OpcUaBinaryStreamEncoder] [14:25:26]: Not a built-in type: class java.math.BigInteger 
2024/04/09 14:25:26.554 | E [o.e.m.o.s.c.t.u.UascClientMessageHandler] [14:25:26]: Error serializing WriteRequest(requestHeader=RequestHeader(authenticationToken=NodeId{ns=0, id=ByteString{bytes=[-26, 5, 108, -104, -37, 42, -45, 18, -38, 80, -126, -52, -109, -75, -125, 53, -121, -92, -33, 97, 14, -39, -93, 101, 87, 61, -77, 108, 17, -1, 70, -15]}}, timestamp=DateTime{utcTime=133571463264750000, javaDate=Tue Apr 09 14:25:26 UTC 2024}, requestHandle=3845013, returnDiagnostics=0, auditEntryId=null, timeoutHint=60000, additionalHeader=null), nodesToWrite=[WriteValue(nodeId=NodeId{ns=1, id=[OfcEdgeIIoT1]Produced0.TS[0]}, attributeId=13, indexRange=null, value=DataValue{value=Variant{value=2977585760}, status=null}), WriteValue(nodeId=NodeId{ns=1, id=[OfcEdgeIIoT1]Produced0.TS[1]}, attributeId=13, indexRange=null, value=DataValue{value=Variant{value=398762}, status=null})]): unknown builtin type: -1 
2024/04/09 14:25:26.554 | org.eclipse.milo.opcua.stack.core.UaSerializationException: unknown builtin type: -1
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeBuiltinType(OpcUaBinaryStreamEncoder.java:736)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeValue(OpcUaBinaryStreamEncoder.java:654)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeVariant(OpcUaBinaryStreamEncoder.java:637)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeDataValue(OpcUaBinaryStreamEncoder.java:323)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeDataValue(OpcUaBinaryStreamEncoder.java:879)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.types.structured.WriteValue$Codec.encode(WriteValue.java:106)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.types.structured.WriteValue$Codec.encode(WriteValue.java:86)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.codecs.GenericDataTypeCodec$GenericBinaryDataTypeCodec.encode(GenericDataTypeCodec.java:54)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeStruct(OpcUaBinaryStreamEncoder.java:941)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.lambda$writeStructArray$3(OpcUaBinaryStreamEncoder.java:1107)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeArray(OpcUaBinaryStreamEncoder.java:83)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeStructArray(OpcUaBinaryStreamEncoder.java:1107)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeStructArray(OpcUaBinaryStreamEncoder.java:1123)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.types.structured.WriteRequest$Codec.encode(WriteRequest.java:85)
2024/04/09 14:25:26.556 | at org.eclipse.milo.opcua.stack.core.types.structured.WriteRequest$Codec.encode(WriteRequest.java:69)
2024/04/09 14:25:26.557 | at org.eclipse.milo.opcua.stack.core.serialization.codecs.GenericDataTypeCodec$GenericBinaryDataTypeCodec.encode(GenericDataTypeCodec.java:54)
2024/04/09 14:25:26.557 | at org.eclipse.milo.opcua.stack.core.serialization.OpcUaBinaryStreamEncoder.writeMessage(OpcUaBinaryStreamEncoder.java:918)
2024/04/09 14:25:26.557 | at org.eclipse.milo.opcua.stack.client.transport.uasc.UascClientMessageHandler.lambda$encode$9(UascClientMessageHandler.java:334)
2024/04/09 14:25:26.557 | at org.eclipse.milo.opcua.stack.core.channel.SerializationQueue.lambda$encode$0(SerializationQueue.java:59)
2024/04/09 14:25:26.557 | at org.eclipse.milo.opcua.stack.core.util.TaskQueue$TaskWrapper.run(TaskQueue.java:273)
2024/04/09 14:25:26.557 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
2024/04/09 14:25:26.557 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
2024/04/09 14:25:26.557 | at java.base/java.lang.Thread.run(Unknown Source)

```

_ **But** _, only during device startup/shutdown. Once the device is running, it isn't a problem--the values are reaching the other end, and no traces are popping up.

Edge IIoT v8.1.36.

---

<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:** [April 9, 2024, 2:52pm UTC](https://forum.inductiveautomation.com/t/not-a-built-in-type-class-java-math-biginteger/88579/2 "2024-04-09T14:52:01Z")

</div>

Thanks, I'll have think about how this could fail more gracefully...

When a write happens the DataType attribute is read from the server and used to coerce the value from an Ignition platform type to an OPC UA type, if necessary. In this case it's necessary. When reading the DataType attribute fails I think we just pass on the value anyway and hope for the best, but if it's not an OPC UA type it eventually explodes down in the serialization layer.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 9, 2024, 3:17pm UTC](https://forum.inductiveautomation.com/t/not-a-built-in-type-class-java-math-biginteger/88579/3 "2024-04-09T15:17:37Z")

</div>

Hmmm. Can't catch this, either.
