Class XPathMetadataExtracter

  • All Implemented Interfaces:
    javax.xml.namespace.NamespaceContext, ContentWorker, MetadataEmbedder, MetadataExtracter, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanNameAware, org.springframework.context.ApplicationContextAware

    public class XPathMetadataExtracter
    extends AbstractMappingMetadataExtracter
    implements javax.xml.namespace.NamespaceContext
    An extracter that pulls values from XML documents using configurable XPath statements. It is not possible to list a default set of mappings - this is down to the configuration only.

    When an instance of this extracter is configured, XPath statements should be provided to extract all the available metadata. The implementation is sensitive to what is actually requested by the configured mapping and will only perform the queries necessary to fulfill the requirements.

    To summarize, there are two configurations required for this class:

    All values are extracted as text values and therefore all XPath statements must evaluate to a node that can be rendered as text.

    Since:
    2.1
    Author:
    Derek Hulley
    See Also:
    AbstractMappingMetadataExtracter.setMappingProperties(Properties), setXpathMappingProperties(Properties)
    • Field Detail

      • SUPPORTED_MIMETYPES

        public static java.lang.String[] SUPPORTED_MIMETYPES
    • Constructor Detail

      • XPathMetadataExtracter

        public XPathMetadataExtracter()
        Default constructor
    • Method Detail

      • getNamespaceURI

        public java.lang.String getNamespaceURI​(java.lang.String prefix)
        Specified by:
        getNamespaceURI in interface javax.xml.namespace.NamespaceContext
      • getPrefix

        public java.lang.String getPrefix​(java.lang.String namespaceURI)
        Specified by:
        getPrefix in interface javax.xml.namespace.NamespaceContext
      • getPrefixes

        public java.util.Iterator getPrefixes​(java.lang.String namespaceURI)
        Specified by:
        getPrefixes in interface javax.xml.namespace.NamespaceContext
      • setXpathMappingProperties

        public void setXpathMappingProperties​(java.util.Properties xpathMappingProperties)
        Set the properties file that maps document properties to the XPath statements necessary to retrieve them.

        The Xpath mapping is of the form:

         # Namespaces prefixes
         namespace.prefix.my=http://www....com/alfresco/1.0
         
         # Mapping
         editor=/my:example-element/@cm:editor
         title=/my:example-element/text()
         
      • extractRaw

        protected java.util.Map<java.lang.String,​java.io.Serializable> extractRaw​(org.alfresco.service.cmr.repository.ContentReader reader)
                                                                                 throws java.lang.Throwable
        Description copied from class: AbstractMappingMetadataExtracter
        Override to provide the raw extracted metadata values. An extracter should extract as many of the available properties as is realistically possible. Even if the default mapping doesn't handle all properties, it is possible for each instance of the extracter to be configured differently and more or less of the properties may be used in different installations.

        Raw values must not be trimmed or removed for any reason. Null values and empty strings are

        • Null: Removed
        • Empty String: Passed to the OverwritePolicy
        • Non Serializable: Converted to String or fails if that is not possible

        Properties extracted and their meanings and types should be thoroughly described in the class-level javadocs of the extracter implementation, for example:

         editor: - the document editor        -->  cm:author
         title:  - the document title         -->  cm:title
         user1:  - the document summary
         user2:  - the document description   -->  cm:description
         user3:  -
         user4:  -
         
        Specified by:
        extractRaw in class AbstractMappingMetadataExtracter
        Parameters:
        reader - the document to extract the values from. This stream provided by the reader must be closed if accessed directly.
        Returns:
        Returns a map of document property values keyed by property name.
        Throws:
        java.lang.Throwable - All exception conditions can be handled.
        See Also:
        AbstractMappingMetadataExtracter.getDefaultMapping()
      • processDocument

        protected java.util.Map<java.lang.String,​java.io.Serializable> processDocument​(org.w3c.dom.Document document)
                                                                                      throws java.lang.Throwable
        Executes all the necessary XPath statements to extract values.
        Throws:
        java.lang.Throwable