With the DocumentBuilder class, when DTD or schema validation is
requested, the WhitespaceStrippingPolicy setting
was previously ignored (although the documentation didn't make this clear): whatever the setting, whitespace nodes were stripped if and
only if they appeared in elements with element-only content. This has changed so that any explicit setting other than
WhitespaceStrippingPolicy.IGNORABLE results in an exception reporting the error.
It is now possible to define a custom
WhitespaceStrippingPolicy by supplying a callback predicate which indicates whether
whitespace for a particular element name is to be stripped or preserved. This provides XQuery users with a mechanism comparable to
xsl:preserve-space, and allows fine-grained control of whitespace stripping
to be taken out of the control of the transformation.
The constructors for the Serializer class (deprecated since 9.6) have been removed; the factory methods on
Processor must now be used instead. This change ensures that the
Serializer is always bound to a specific
New classes XdmMap and XdmArray have been added as subclasses of XdmFunctionItem,
making it easier to pass maps and arrays as parameters to queries or stylesheets. Maps and arrays are also now supported
in the s9api ItemType and ItemTypeFactory classes. The
XdmMap class implements
java.util.Map<XdmAtomicValue, XdmValue>, allowing it to be used directly in contexts where a Java map
is expected (it is immutable, however).
The class XdmAtomicValue now has
hashCode() methods that reflect the semantics
op:is-same-key() relation which is used to compare keys in maps. (Without this, the
method was not very useful).
Static methods have been added to
to allow conversion from ordinary Java values. For example,
XdmArray.makeArray() will construct an array of
values from a Java
A static method XdmFunctionItem.getSystemFunction() allows a function item representing a built-in function to be obtained. This can then be used for direct calls on system functions from the Java application without the inconvenience of parsing an XPath expression to represent the function call.
The method XdmFunctionItem.call() has been enhanced to
apply the function conversion rules to the supplied
arguments, and to return a clean error message (rather than a
ClassCastException) if the supplied arguments are of the wrong type.
The method Xslt30Transformer.setMessageListener() is
supplemented with a variant that accepts a MessageListener2
as its parameter; the
MessageListener2 interface allows the
xsl:message error code to be reported along with the message