ilyn.org/xsd/smooks-1.1.xsd" xmlns:fl="http://www.milyn.org/xsd/smooks/fixed-length-1.3.xsd"> <fl:reader fields="" separator="" quote="" skipLines="" lineNumber="" rootElementName="" recordElementName="" lineNumberAttributeName="" truncatedAttributeName=""> <fl:singleBinding beanId="" class="" /> </fl:reader> </smooks-resource-list>
To maintain a {@link java.util.List} of binding instances in memory:
<?xml version="1.0"?> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:fl="http://www.milyn.org/xsd/smooks/fixed-length-1.3.xsd"> <fl:reader fields="" separator="" quote="" skipLines="" lineNumber="" rootElementName="" recordElementName="" lineNumberAttributeName="" truncatedAttributeName=""> <fl:listBinding beanId="" class="" /> </fl:reader> </smooks-resource-list>
To maintain a {@link Map} of binding instances in memory:
<?xml version="1.0"?> <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:fl="http://www.milyn.org/xsd/smooks/fixed-length-1.3.xsd"> <fl:reader fields="" separator="" quote="" skipLines="" lineNumber="" rootElementName="" recordElementName="" lineNumberAttributeName="" truncatedAttributeName=""> <fl:mapBinding beanId="" class="" keyField="" /> </fl:reader> </smooks-resource-list>
Field definition
The field definition is a comma separated list of fieldnames. After each fieldname the length is set between brackets. So a field definition could look like this: firstname[10],lastname[10],gender[1]
Strict parsing
You can choose if the data is read strictly or not. When strict is to true then the line which doesn't contain enough characters is skipped else the fields that don't have enough characters are empty and those records and fields have the 'truncated' attribute set to true. By default strict is set to false.
Ignoring Fields
To ignore a field in a fixed length record set, just insert the string "
$ignore$[10]" for that field in the fields attribute. You still need to set the field length between the brackets
String manipulation functions
String manipulation functions can be defined per field. These functions are executed before that the data is converted into SAX events. The functions are defined after the field length definition and are optionally separated with a question mark. So a field definition with string functions could look like this: firstname[10]?trim,lastname[10]?right_trim,gender[1]?upper_case Take a look in the Smooks manual for a list of all available functions.
Simple Java Bindings
A simple java binding can be configured on the reader configuration. This allows quick binding configuration where the fixed length records map cleanly to the target bean. For more complex bindings, use the Java Binging Framework.
Example Usage
So the following configuration could be used to parse a fixed length stream into a stream of SAX events:
<csv:reader fields="name[20]?trim,address[50]?trim,$ignore$[5],item[5],quantity[3].trim" />
Within Smooks, the stream of SAX events generated by the "Acme-Order-List" message (and this parser) will generate an event stream equivalent to the following:
<set> <record number="1"> <name>Tom Fennelly</name> <address>Ireland</address> <item>V1234</item> <quantity>3</quantity> <record> <record number="2"> <name>Joe Bloggs</name> <address>England</address> <item>D9123</item> <quantity>7</quantity> <record> </set>
Other profile based transformations can then be used to transform the CSV records in accordance with the requirements of the consuming entities.
@author Cedric Rathgeb
@author
maurice.zeijen@smies.com