Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
XML
XML
<smooks [config-key="string"]>
   <input [type="|text|xml"]/>
   <output [type="|text|xml|java"] [property="string"] [action="string"]/>
</smooks>

...

UI configuration

The parameters available for configuring the Smooks mediator are as follows:

...

Parameter NameDescription
Config-Key

...

  • Expression - Specify an XPath as an expression to pick the exact message block. Else, the entire 'message body' will be selected by default. 
The key to access the Smooks configuration. The Smooks configuration should be saved in the Registry as a local entry before it can be used here. Click either Configuration Registry or Governance Registry to select the Smooks configuration from the resource tree.
InputYou can select either XML or Text as the input.
ExpressionThis parameter is used to enter an XPath expression to select the exact message block to which the transformation should be applied. If no expression is entered, the transformation would apply to the entire message body by default.
Output

The format of the output. The output type can be XML, Text or Java, and the output can be

...

one of the following.

  • Property: If this is selected, the output defined as a property

...

  • will be saved in the

...

  • message context for future

...

  • use.
  • Expression: If this is selected, the output is defined as an expression and the following additional actions can be performed.
      • Add:The selected node will be added as a child to the message.
      • Replace

...

      • : Selected node will be replaced in the message.
      • Sibling

...

      • : Selected node will be added as a sibling.

Examples

Example 1: Performance tuning

Smooks can be used to split a file and send split results to a JMS endpoint. In this case, having a value other than -1 for jms:highWaterMark in the Smooks configuration file can result in a low throughput for message publishing, since Smooks will spend resources on message counting while the messages are being published. Therefore, it is recommended to use -1 as the highWaterMark value for high throughput values. Following The following is a sample Smooks configuration file with this setting. For more information on creating the Smooks configuration file, see the documentation on in the official Smooks website.

Code Block
languagexml
titleSample Smooks configuration
<?xml version="1.0" encoding="UTF-8"?>
 <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd" xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd" xmlns:jms="http://www.milyn.org/xsd/smooks/jms-routing-1.2.xsd">
   <!--
   Filter the message using the SAX Filter (i.e. not DOM, so no
   intermediate DOM, so we can process huge messages...
   -->
   <core:filterSettings type="SAX" />
   <!-- Capture the message data 2 seperate DOM model, for "order" and "order-item" fragments... -->
   <resource-config selector="order,order-item">
     <resource>org.milyn.delivery.DomModelCreator</resource>
   </resource-config>
   <!-- At each "order-iteam", apply a template to the "order" and "order-item" DOM model... -->
   <ftl:freemarker applyOnElement="order-item">
     <!--
     Note in the template that we need to use the special FreeMarker variable ".vars"
     because of the hyphenated variable names ("order-item"). See http://freemarker.org/docs/ref_specvar.html.
     -->
     <ftl:template>/repository/resources/orderitem-split.ftl.txt</ftl:template>
     <ftl:use>
       <!-- Bind the templating result into the bean context, from where
       it can be accessed by the JMSRouter (configured above). -->
       <ftl:bindTo id="orderItem_xml" />
     </ftl:use>
   </ftl:freemarker>
   <!-- At each "order-item", route the "orderItem_xml" to the ActiveMQ JMS Queue... -->
   <jms:router routeOnElement="order-item" beanId="orderItem_xml" destination="smooks.exampleQueue">
     <jms:message>
       <!-- Need to use special FreeMarker variable ".vars" -->
       <jms:correlationIdPattern>${order.@id}-${.vars["order-item"].@id}</jms:correlationIdPattern>
     </jms:message>
     <jms:jndi properties="/repository/conf/jndi.properties" />
     <jms:highWaterMark mark="-1" />
   </jms:router>
 </smooks-resource-list>

...

Samples

See Sample 654: Smooks Mediator.