Class DomModelCreator

  • All Implemented Interfaces:
    ContentHandler, Producer, AfterVisitor, BeforeVisitor, SaxNgVisitor, Visitor

    public class DomModelCreator
    extends Object
    implements BeforeVisitor, AfterVisitor, Producer
    DOM Node Model creator.

    Adds the visited element as a node model.

    Mixing DOM and SAX

    When used with SAX filtering, this visitor will construct a DOM Fragment of the visited element. This allows DOM utilities to be used in a Streaming environment.

    When 1+ model are nested inside each other, outer model will never contain data from the inner model i.e. the same fragments will never cooexist inside two model.

    Take the following message as an example:

     <order id='332'>
         <header>
             <customer number="123">Joe</customer>
         </header>
         <order-items>
             <order-item id='1'>
                 <product>1</product>
                 <quantity>2</quantity>
                 <price>8.80</price>
             </order-item>
             <order-item id='2'>
                 <product>2</product>
                 <quantity>2</quantity>
                 <price>8.80</price>
             </order-item>
             <order-item id='3'>
                 <product>3</product>
                 <quantity>2</quantity>
                 <price>8.80</price>
             </order-item>
        </order-items>
     </order>
     
    The DomModelCreator can be configured to create model for the "order" and "order-item" message fragments:
     <resource-config selector="order,order-item">
         <resource>org.smooks.engine.delivery.DomModelCreator</resource>
     </resource-config>
     
    In this case, the "order" model will never contain "order-item" model data (order-item elements are nested inside the order element). The in memory model for the "order" will simply be:
     <order id='332'>
         <header>
             <customer number="123">Joe</customer>
         </header>
         <order-items />
     </order>
     
    Added to this is the fact that there will only ever be 0 or 1 "order-item" model in memory at any given time, with each new "order-item" model overwriting the previous "order-item" model. All this ensures that the memory footprint is kept to a minimum.
    Author:
    tom.fennelly@gmail.com
    • Method Detail

      • getProducts

        public Set<String> getProducts()
        Description copied from interface: Producer
        Get the set of products produced by this producer instance.
        Specified by:
        getProducts in interface Producer
        Returns:
        The set the set of products produced by this producer instance.
      • visitBefore

        public void visitBefore​(Element element,
                                ExecutionContext executionContext)
                         throws SmooksException
        Description copied from interface: BeforeVisitor
        Visits the beginning of an Element.
        Specified by:
        visitBefore in interface BeforeVisitor
        Parameters:
        element - the Element representing the beginning of the fragment. The Element's ancestors are traversable unless the global configuration parameter maintain.element.stack is set to false. The Element's child nodes are not traversable.
        executionContext - the current ExecutionContext
        Throws:
        SmooksException
      • visitAfter

        public void visitAfter​(Element element,
                               ExecutionContext executionContext)
                        throws SmooksException
        Description copied from interface: AfterVisitor
        Visits the end of an Element.
        Specified by:
        visitAfter in interface AfterVisitor
        Parameters:
        element - the Element representing the end of the fragment. The Element's ancestors are traversable unless the global configuration parameter maintain.element.stack is set to false. The Element's child nodes are traversable if one of the following conditions are met:
        executionContext - the current ExecutionContext
        Throws:
        SmooksException