12.44. Example Visitor Configuration
This example will use the
SAXVisitor
implementation as follows:
@TextConsumer public class ChangeItemState implements SAXVisitAfter { @StreamResultWriter private SAXToXMLWriter xmlWriter; @ConfigParam private String newState; public void visitAfter(SAXElement element, ExecutionContext executionContext) throws SmooksException, IOException { element.setAttribute("state", newState); xmlWriter.writeStartElement(element); xmlWriter.writeText(element); xmlWriter.writeEndElement(element); } }
Declaratively configuring
ChangeItemState
to fire on <order-item> fragments having a status of OK
is shown below:
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"> <resource-config selector="order-items/order-item[@status = 'OK']"> <resource>com.acme.ChangeItemState </resource> <param name="newState">COMPLETED</param> </resource-config> </smooks-resource-list>
Custom configuration namespaces can be used to define a cleaner and more strongly typed configuration for the
ChangeItemState
component. A custom configuration namespace component is configured as follows:
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:order="http://www.acme.com/schemas/smooks/order.xsd"> <order:changeItemState itemElement="order-items/order-item[@status = 'OK']" newState="COMPLETED" /> </smooks-resource-list>
This Visitor could also be configured in source code as follows:
Smooks smooks = new Smooks(); smooks.addVisitor(new ChangeItemState().setNewState("COMPLETED"), "order-items/order-item[@status = 'OK']"); smooks.filterSource(new StreamSource(inReader), new StreamResult(outWriter));