Class DomModelCreator

  • All Implemented Interfaces:
    org.smooks.api.delivery.ContentHandler, org.smooks.api.delivery.ordering.Producer, org.smooks.api.resource.visitor.sax.ng.AfterVisitor, org.smooks.api.resource.visitor.sax.ng.BeforeVisitor, org.smooks.api.resource.visitor.sax.ng.SaxNgVisitor, org.smooks.api.resource.visitor.Visitor

    public class DomModelCreator
    extends Object
    implements org.smooks.api.resource.visitor.sax.ng.BeforeVisitor, org.smooks.api.resource.visitor.sax.ng.AfterVisitor, org.smooks.api.delivery.ordering.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()
        Specified by:
        getProducts in interface org.smooks.api.delivery.ordering.Producer
      • visitBefore

        public void visitBefore​(Element element,
                                org.smooks.api.ExecutionContext executionContext)
                         throws org.smooks.api.SmooksException
        Specified by:
        visitBefore in interface org.smooks.api.resource.visitor.sax.ng.BeforeVisitor
        Throws:
        org.smooks.api.SmooksException
      • popCreator

        public Document popCreator​(org.smooks.api.ExecutionContext executionContext)
      • visitAfter

        public void visitAfter​(Element element,
                               org.smooks.api.ExecutionContext executionContext)
                        throws org.smooks.api.SmooksException
        Specified by:
        visitAfter in interface org.smooks.api.resource.visitor.sax.ng.AfterVisitor
        Throws:
        org.smooks.api.SmooksException