Extensibility mechanisms

For external Java objects, the mapping from Java class names to XPath type names in namespace http://saxon.sf.net/java-type has been refined. The convention that a "$" character in the Java class name is replaced by a hyphen ("-") in the XPath name is now applied systematically (previously, it was only applied on some code paths). A new convention is introduced allowing array types to be represented: any "[" at the start of the Java class name is replaced by "_-" (underscore then hyphen). So for example the QName representing the Java class byte[] (binary name [B) is now Q{http://saxon.sf.net/java-type}_-B, while byte[][] (binary name [[B) becomes Q{http://saxon.sf.net/java-type}_-_-B.

For reflexive extension functions, a new scheme involving generics is available to allow more precise type checking, corresponding more closely to the way that native (XSLT or XQuery) function calls work. The arguments of a method can now be declared for example as ZeroOrMore<IntegerValue>, OneOrMore<NodeInfo>, ZeroOrOne<StringValue>, or One<BooleanValue> to indicate both the expected item type and the cardinality. When arguments or result are described using this notation, the function conversion rules operate exactly as for native function calls.