# Calling Static Methods in a Java Class

Static methods can be called directly.

For example (in XSLT):

                <xsl:value-of select="math:sqrt($arg)"
       xmlns:math="java:java.lang.Math"/>

This will invoke the static method `java.lang.Math#sqrt()`, applying it to the value of the variable `$arg`, and copying the value of the square root of `$arg` to the result tree.

Similarly (in XQuery):

                <a xmlns:double="java:java.lang.Double">
                                  {double:MAX_VALUE()} </a>

This will output the value of the static field `java.lang.Double#MAX_VALUE`. (In practice, it is better to declare the namespace in the query prolog, because it will then not be copied to the result tree.)

A static Java method called as an extension function may have an extra first argument of class `net.sf.saxon.expr.XPathContext`. This argument is not supplied by the calling XPath or XQuery code, but by Saxon itself. The `XPathContext` object provides methods to access many internal Saxon resources, the most useful being `getContextItem()` which returns the context item from the dynamic context. The XPathContext object is available with static or instance-level methods, but not with constructors.

The following example shows a function that obtains the line number of the context node (this is actually a built-in Saxon extension):

                    /**
        * Return the line number of the context node.
        */
        public static int lineNumber(XPathContext c) {
            Item item = c.getCurrentIterator().current();
            if (item instanceof NodeInfo) {
                return ((NodeInfo)item).getLineNumber();
            } else {
                return -1;
            }
        }

If this method appears in class `com.example.code.NodeData`, then it can be accessed using the following code in XSLT:

                <xsl:value-of select="nd:line-number()"
        xmlns:nd="java:com.example.code.NodeData"/>

or the following in XQuery:

                <line xmlns:nd="java:com.example.code.NodeData">
        { nd:line-number() }
    </line>

Next