...
Code Block | ||||
---|---|---|---|---|
| ||||
<smooks [config-key="string"]> <input [type="|text|xml"]/> <output [type="|text|xml|java"] [property="string"] [action="string"]/> </smooks> |
...
UI
...
configuration
- Config-Key
- Input- User can define the input as text or XML.
- Expression - Specify an XPath as an expression to pick the exact message block. Else, the entire 'message body' will be selected by default.
- Output - Similar to input, the user can define how the output should be. The output type can be text, XML, or Java, and the output can be a property or expression. When the user defines the output as a property, the property will be saved in the messagecontext for future uses. When the user defines the output as an expression, there are additional actions that 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.
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 is a sample Smooks configuration file with this setting. For more information on creating the Smooks configuration file, see the documentation on the official Smooks website.
Code Block | ||||
---|---|---|---|---|
| ||||
<?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>
|