Hi Ravi,
the DMN model ItemDefinition(s) has no relationship with corresponding Java Types, beyond the information you are carrying over as structural typing when creating the ItemDefinition itself. This means from a DMN specification point of view the engine has no way to know your ItemDefinition named "Student" must correspond to org.dmn.model.Student in the JVM or the likes.
In turn, when using the Drools DMN Engine via the Kogito API, this error is expected, as by the DMN spec we have no way to conform to org.dmn.model.Student specified by your called Java method in BKM, by using only the ItemDefinition definition in the model.
To be fully precise, I believe the use-case might work as-is only when using the Drools DMN Engine in embedded mode and with its API directly, but is more of an edge-case which I wouldn't recommend anyway.
The most appropriate solution would be to adopt the same structural typing also on the Java side, eg: the method should be getAge(java.util.Map) and that should work.
Then, per your definition, you expect the incoming parameter to have a "dob" property (the Map's key).
This approach is aligned with the requirements set forward by Table 47 in the DMN Specification when bridging Java invocation from a DMN model.
Alternatively, you might consider a more generic signature such as getAge(java.lang.Object) for your method, and use Jackson internally in your method or another binding framework to convert the structural type into your java nominal type (your class).
That way, you would get the binding from the structural typing where the property "dob" is defined, to the Java getter "getDateOfBirth()" of the nominal type defined by org.dmn.model.Student in this case.
Hope this clarifies,
MM