Yes, turns out there was a binary incompatible change. You need to recompile against the 8.1 SDK (so you compile against Milo 0.5).
It’s pretty interesting. It starts with this change: https://github.com/eclipse/milo/commit/1f19f5eb6fb2d553e544a0ee45212c1b566e7e94
This in itself would be an API incompatible change, when used directly, but that’s not what got you.
The NodeManager
interface takes a type parameter T
that has an upper bound on the previously mentioned Node
interface that changed packages.
Your driver module invokes various methods on this interface that have T
in the type signature.
I bet your module will recompile with zero changes, and when I peaked at the de-compilation output I saw no import or explicit usages of Node
via the old package. But those interface calls result in bytecode invokeinterface
instructions that do reference Node
by its previous package. Like this call to NodeManager::removeNode
:
L3
LINENUMBER 445 L3
ALOAD 0
GETFIELD com/automation_pros/streamer/driver/CV5kDevice.nodeManager : Lorg/eclipse/milo/opcua/sdk/server/api/NodeManager;
ALOAD 3
INVOKEINTERFACE org/eclipse/milo/opcua/sdk/server/api/NodeManager.removeNode (Lorg/eclipse/milo/opcua/sdk/server/api/nodes/Node;)Ljava/util/Optional; (itf)
POP
So yeah… you have to recompile even if there are no changes necessary.