An item representing an external Java object (for example, the result of calling
in a reflexive extension function call) may now be treated as a map. There is one entry in the map for each
public non-static method defined on the object (either directly, or inherited), provided that its name is
unique. If there are several methods with the same name but different arity, then they are available
under suffixed names such as "action_0" and "action_1". But if there are several methods with the same arity,
this group of methods is not included in the map. The key of the entry is the method name, while the
value is a function item that may be called using dynamic function call syntax to invoke the method.
The conversion of the Java object to a map may be done explicitly or implicitly.
- It is done explicitly by calling the new extension function saxon:object-map() which takes an external object as its argument, and returns the constructed map.
- It is done implicitly when an external object is used as the left-hand operand of the lookup operator "?".
For example, the extension function
sql:connect returns an external Java object of
$connection holds the result of this function,
$connection?isClosed() calls the
isClosed method on the underlying object. The
rollback method of this class has two variants; the arity-0 version may be invoked as
The conversion of XDM atomic values to Java values (when passing parameters to extension
functions) now handles conversion of the XSD date/time types (
to the new Java 8 types