Class ObjectValue<T>

  • All Implemented Interfaces:
    GroundedValue, Item, Sequence, AnyExternalObject
    Direct Known Subclasses:
    Bindery.FailureValue, MemoFunction.NodeSurrogate, Tuple

    public class ObjectValue<T>
    extends java.lang.Object
    implements AnyExternalObject
    An XPath value that encapsulates a Java object. Such a value can only be constructed from Java code either in a Java extension function, or in the calling application.

    Until Saxon 9.4, ObjectValue was a subclass of AtomicValue, and external Java objects were considered to be atomic. From 9.5, this has been changed so that an ObjectValue is another kind of Item: a fourth kind, at the same level as nodes, atomic values, and function items.

    In the same way as ObjectValue is a wrapper around a Java instance object, the type of the value is a wrapper around the corresponding Java class. These types have subtype-supertype relationships that correspond to the Java class hierarchy. The top type in this branch of the class hierarchy, which wraps the Java class "Object", has item() as its superclass. These types can be referred to in the SequenceType syntax using QNames of the form jt:full.package.name.ClassName, where the conventional prefix jt maps to the namespace URI http://saxon.sf.net/java-type.

    An ObjectValue is no longer permitted to wrap a Java null. An empty sequence should be used in this situation.

    The effective boolean value of a wrapped Java object, like that of a node, is always true.

    Atomizing a wrapped Java object, or applying the fn:string() function, returns an xs:string whose value is the result of calling toString() on the wrapped Java object.

    • Constructor Detail

      • ObjectValue

        public ObjectValue​(T object)
        Constructor
        Parameters:
        object - the object to be encapsulated
      • ObjectValue

        public ObjectValue​(T object,
                           java.lang.Class<? extends T> theInterface)
    • Method Detail

      • getInterface

        public java.lang.Class<? extends T> getInterface()
      • getGenre

        public Genre getGenre()
        Get the genre of this item
        Specified by:
        getGenre in interface Item
        Returns:
        the genre
      • getUnicodeStringValue

        public UnicodeString getUnicodeStringValue()
        Get the value of the item as a string. For nodes, this is the string value of the node as defined in the XPath 2.0 data model, except that all nodes are treated as being untyped: it is not an error to get the string value of a node with a complex type. For atomic values, the method returns the result of casting the atomic value to a string.
        Specified by:
        getUnicodeStringValue in interface GroundedValue
        Specified by:
        getUnicodeStringValue in interface Item
        Returns:
        the string value of the item
        Throws:
        java.lang.UnsupportedOperationException - if the item is a function item (an unchecked exception is used here to avoid introducing exception handling to a large number of paths where it is not needed)
        Since:
        8.4
      • atomize

        public StringValue atomize()
        Atomize the item.
        Specified by:
        atomize in interface Item
        Returns:
        the result of atomization. For an external object this is defined to be the result of the toString() method, as an xs:string value.
      • getItemType

        public ItemType getItemType​(TypeHierarchy th)
        Determine the data type of the items in the expression, if possible
        Specified by:
        getItemType in interface AnyExternalObject
        Parameters:
        th - The TypeHierarchy.
        Returns:
        for the default implementation: AnyItemType (not known)
      • displayTypeName

        public static java.lang.String displayTypeName​(java.lang.Object value)
        Display the type name for use in error messages
        Parameters:
        value - a Java object
        Returns:
        the type name. This will be in the form "java-type:" followed by the full class name of the wrapped Java object.
      • effectiveBooleanValue

        public boolean effectiveBooleanValue()
        Get the effective boolean value of the value
        Specified by:
        effectiveBooleanValue in interface GroundedValue
        Returns:
        true (always)
      • getObject

        public T getObject()
        Get the encapsulated object
        Returns:
        the Java object that this external object wraps
      • getWrappedObject

        public java.lang.Object getWrappedObject()
        Get the encapsulated object. This version of the method does not use generics, enabling it to work the same way in Java and C#.
        Specified by:
        getWrappedObject in interface AnyExternalObject
        Returns:
        the Java object that this external object wraps
      • equals

        public boolean equals​(java.lang.Object other)
        Determine if two ObjectValues are equal
        Overrides:
        equals in class java.lang.Object
        Returns:
        true if the other object is also a wrapped Java object and if the two wrapped objects compare equal using the Java equals() method.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toShortString

        public java.lang.String toShortString()
        Description copied from interface: Item
        Provide a short string showing the contents of the item, suitable for use in error messages
        Specified by:
        toShortString in interface GroundedValue
        Specified by:
        toShortString in interface Item
        Returns:
        a depiction of the item suitable for use in error messages