JoiningProcessIdentificationDataType: Configuring Java

Jason IP2 min read
OPC / OPC UAOther ManufacturerTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

JoiningProcessIdentificationDataType is a subtype of Structure, so treat the complete value as one structured OPC UA value carried on the wire as an ExtensionObject. Do not replace the structure with three independent method arguments unless the method definition itself declares three arguments.

Classify the OPC UA DataType

DataType category Wire representation
Subtype of Structure ExtensionObject
Subtype of Enumeration Int32
Subtype of another built-in DataType Its underlying built-in type

The NodeSet declares JoiningProcessIdentificationDataType with NodeId ns=1;i=3029 and an inverse HasSubtype reference to i=22. Based on the supplied classification, the complete structure is encoded as an ExtensionObject. Its listed encodings are ns=1;i=5121, ns=1;i=5123, and ns=1;i=5122.

Map TrimmedString Fields

TrimmedString is a subtype outside the Structure and Enumeration categories. It therefore appears on the wire as its underlying built-in type, String. A Java data class can consequently hold each supplied field as a string while preserving its optional status.

public final class JoiningProcessIdentificationData {
    public String joiningProcessId;
    public String joiningProcessOriginId;
    public String selectionName;
}

All three fields are marked IsOptional="true". The supplied definition allows JoiningProcessOriginId to be null when the original instance is not tracked. The evidence does not define the Java stack's mechanism for distinguishing an omitted optional field from a present null value, so use the stack's generated structure or optional-field support where available.

Define the Method Argument Correctly

If a method accepts one JoiningProcessIdentificationDataType value, define one scalar Argument whose declared DataType is ns=1;i=3029. Using three arguments with Identifiers.String changes the method signature from one structure to three scalar strings.

If the method definition genuinely declares three separate scalar inputs, Identifiers.String matches the wire-level representation of each TrimmedString. It does not preserve the declared TrimmedString subtype identity in argument metadata; use the subtype's NodeId when exact type identity is required. That NodeId is not present in the supplied evidence and must be read from the NodeSet instead of guessed.

Verify the Mapping

  1. Inspect the method's input-argument definition and determine whether it declares one structured input or three scalar inputs.
  2. For one structured input, confirm that the argument DataType is ns=1;i=3029, the value rank is scalar, and the runtime value is encoded as an ExtensionObject.
  3. Decode the value and verify that JoiningProcessId, JoiningProcessOriginId, and SelectionName are handled as optional string fields.

FAQ

Is TrimmedString mapped to Identifiers.String in Java OPC UA?

TrimmedString is represented on the wire as the built-in String. Use Identifiers.String for a separate scalar argument only when preserving the declared subtype identity is unnecessary.

Should JoiningProcessIdentificationDataType become three Arguments?

Not when the method declares one structured input. Define one scalar argument with DataType ns=1;i=3029 and carry its three fields inside the structure's ExtensionObject.

How are optional JoiningProcessIdentificationDataType fields handled?

All three fields are marked optional. Preserve the Java OPC UA stack's optional-field encoding, and allow JoiningProcessOriginId to be null when origin tracking is unavailable.

Back to blog