To split and route fragments of a message, use the basic frag:serialize and *:router components (jms:router, file:router and so on) from the Routing Cartridge. The frag:serialize component has its own configuration in the http://www.milyn.org/xsd/smooks/fragment-routing-1.2.xsd namespace.
Use the example below for serializing the contents of a SOAP message body and storing it in the bean context under the beanId of soapBody:
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:frag="http://www.milyn.org/xsd/smooks/fragment-routing-1.2.xsd">
<frag:serialize fragment="Envelope/Body" bindTo="soapBody" childContentOnly="true"/>
</smooks-resource-list>
Use this code to execute it:
Smooks smooks = new Smooks(configStream);
JavaResult javaResult = new JavaResult();
smooks.filterSource(new StreamSource(soapMessageStream), javaResult);
String bodyContent = javaResult.getBean("soapBody").toString().trim();
To do this programatically, use this code:
Smooks smooks = new Smooks();
smooks.addVisitor(new FragmentSerializer().setBindTo("soapBody"), "Envelope/Body");
JavaResult javaResult = new JavaResult();
smooks.filterSource(new StreamSource(soapMessageStream), javaResult);
String bodyContent = javaResult.getBean("soapBody").toString().trim();