pfx-filepreview Component

Overview

The pfx-filepreview component generates structured previews of CSV and XLSX files. It reads a configurable number of rows, auto-detects column types (STRING, NUMBER, INTEGER, BOOLEAN, DATE, DATE_TIME), and returns a JSON preview. Supports compressed (ZIP), base64-encoded, and plain inputs.

URI pattern: pfx-filepreview:preview[?options]


Method

Method

Description

preview

Generate a JSON column/row preview from the input file


Parameters

Parameter

Type

Default

Description

fileType

String

Required. CSV or XLSX (case-insensitive)

maxRecords

Integer

3

Max data rows to include in preview (header excluded)

specifiedCharset

String

Character encoding for CSV (UTF-8, windows-1250, ISO-8859-1, …). Auto-detected if not set.

separator

String

,

CSV column delimiter (practical default from parser)

quoteChar

String

"

CSV quote character (practical default from parser)

escapeChar

String

\\

CSV escape character (practical default from parser)

useVirtualHeader

boolean

false

Generate virtual headers (column1, column2, …) when file has no header row

decimalSeparator

String

.

Decimal separator for number parsing (practical default from parser; use , for European format)

dateFormat

String

yyyy-MM-dd

Java DateTimeFormatter pattern for date parsing (practical default from parser)

inputBase64Encoded

boolean

false

Decode body from base64 before processing

resultAsBase64

boolean

false

Return the preview JSON (or raw CSV lines) as base64

storeResultTo

String

body

Where to store result: body, header, or property

storeResultToName

String

Header/property name when storeResultTo is header or property


Output Headers

Header

Type

Description

FilePreviewType

String

File type processed (CSV or XLSX)

FilePreviewNumberOfRecords

Integer

Actual number of records in the preview


Output Format

JSON
{
  "fileName": "products.csv",
  "columns": [
    {
      "name": "sku",
      "type": "STRING",
      "order": 0,
      "parsedValues": ["SKU001", "SKU002", "SKU003"],
      "originalValues": ["SKU001", "SKU002", "SKU003"]
    },
    {
      "name": "price",
      "type": "NUMBER",
      "order": 1,
      "parsedValues": [29.99, 149.50, 89.00],
      "originalValues": ["29.99", "149.50", "89.00"]
    }
  ]
}

Examples

Preview CSV from inbound directory

XML
<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="previewCsv">
        <from uri="file:{{inbound.path}}?noop=true&amp;include=.*\.csv"/>
        <to uri="pfx-filepreview:preview?fileType=CSV&amp;maxRecords=5"/>
        <log message="Preview: ${body}"/>
    </route>
</routes>

Preview XLSX, store result in header (preserve body)

XML
<to uri="pfx-filepreview:preview?fileType=XLSX&amp;maxRecords=3&amp;storeResultTo=header&amp;storeResultToName=previewJson"/>
<!-- body still contains original file; header.previewJson has the JSON -->

European CSV (semicolon delimiter, comma decimal)

XML
<to uri="pfx-filepreview:preview?fileType=CSV&amp;separator=;&amp;decimalSeparator=,&amp;dateFormat=dd.MM.yyyy"/>

Base64 input/output (for API transport)

XML
<to uri="pfx-filepreview:preview?fileType=CSV&amp;inputBase64Encoded=true&amp;resultAsBase64=true"/>

Column Type Detection

Types are detected in this precedence order (first match wins):

Type

Rule

DATE_TIME

All non-empty values parse as LocalDateTime

DATE

All non-empty values parse as LocalDate

BOOLEAN

All non-empty values are true or false

NUMBER

All non-empty values parse as decimal

STRING

Default fallback

Empty values are ignored during type detection. A column with all-empty values defaults to STRING.


Common Pitfalls

  • fileType is required — the component does not auto-detect file format.

  • ZIP-compressed files are decompressed automatically — no special configuration needed.

  • When storeResultTo=header, you must also set storeResultToName.

  • Keep maxRecords low (≤20) for preview use cases — the component reads the full file for type detection but stops collecting rows after maxRecords.

  • For XLSX, the first sheet (index 0) is always used.

  • specifiedCharset is optional — the component will attempt charset auto-detection if not provided. Set it explicitly when you know the encoding to avoid misdetection.