Troubleshooting
Connection Errors
ConnectException: Connection refused
Symptom: Route fails immediately on startup or first API call.
Root cause: IM cannot reach the Pricefx server or a 3rd-party system.
Solutions:
-
Verify the URL in
integration.pfx.urlor connection JSON file -
Check network/firewall rules -- provisioned instances need outbound access to
*.pricefx.eu -
If using SFTP/REST: verify host and port in the connection configuration
-
Check if the target system is up and accessible from the IM instance
ConnectTimeoutException / SocketTimeoutException
Symptom: Route hangs for a while, then fails with timeout.
Root cause: Network latency or the target system is overloaded.
Solutions:
-
IM retries these automatically (default: 10 retries with exponential backoff)
-
If persistent: check if the Pricefx partition is under heavy load
-
For SFTP: increase timeout with
connectTimeoutandsoTimeoutparameters -
For REST: set
httpClient.socketTimeoutandhttpClient.connectionTimeout
SSLHandshakeException / Certificate errors
Symptom: Connection fails with SSL/TLS errors.
Solutions:
-
For self-signed certs: upload the certificate via PlatformManager and reference it in the connection
-
Verify the certificate chain is complete
-
Check if the certificate has expired
Data Loading Errors
NonRecoverableException / PfxApiException
Symptom: pfx-api call fails immediately without retry.
Root cause: A permanent error -- the request is invalid and retrying won't help.
Common messages:
-
"Parameter 'objectType' must be present"-- missingobjectTypein URI -
"Mapper definition wasn't found"-- mapper bean ID doesn't match any mapper file -
"Body must be defined when using 'pfx-api:import'"-- exchange body is null -
"Unknown object type: [type]"-- typo in objectType value -
"Pricing parameter id or name not specified"-- LTV/MLTV2 missingpricingParameterName -
"ConditionRecordSetId or ConditionRecordSetName must be defined in the mapper"-- condition record mapper incomplete
Solution: Read the error message carefully -- it tells you exactly what's missing. These are configuration errors, not data issues.
IllegalStateException: Mapper attribute 'name' is required for extension types
Symptom: PX or CX import fails immediately.
Root cause: The mapper is missing <constant expression="TableName" out="name"/>.
Solution: Add the table name as a constant to the mapper:
<loadMapper id="my-mapper">
<constant expression="Cars" out="name"/>
<body in="sku" out="sku"/>
...
</loadMapper>
HTTP 409 Conflict on loaddata
Symptom: Load fails with 409 status, often during concurrent imports.
Root cause: Another load or flush is already in progress for the same target.
Solutions:
-
Ensure only one route loads into the same target simultaneously
-
Wait for previous load/flush to complete before starting a new one
-
IM retries 409 automatically -- if transient, it resolves itself
HTTP 413 Payload Too Large
Symptom: Load fails when sending large batches.
Root cause: Batch size too large for the server.
Solution: Reduce batchSize in the route URI:
-
< 10 fields per row:
batchSize=500000 -
10-20 fields:
batchSize=100000-200000 -
20+ fields:
batchSize=50000or less
Data loaded but not visible in Pricefx
Symptom: loaddata succeeds, but data is not in Pricefx.
Root causes:
-
Missing flush (DMDS) -- Data Source imports require
pfx-api:flushafter loading. Without it, data remains in staging. -
Wrong
dsUniqueName-- Check thatdsUniqueName,dataFeedName(DMF.X), anddataSourceName(DMDS.X) all use the same name. -
onCompletioninside split -- The flush runs after every batch, not once at the end. MoveonCompletionoutside the<split>block.
Solution for DMDS:
<route id="import-ds">
<from uri="file:..."/>
<split ...>
<to uri="pfx-api:loaddata?objectType=DM&dsUniqueName=Product&mapper=myMapper"/>
</split>
<onCompletion onCompleteOnly="true">
<to uri="pfx-api:flush?dataFeedName=DMF.Product&dataSourceName=DMDS.Product"/>
</onCompletion>
</route>
FormatException: Value doesn't have the required format
Symptom: Records fail during mapper processing.
Root cause: A field value doesn't match the expected converter format (e.g., stringToDecimal on a non-numeric string).
Solutions:
-
Fix source data to match expected format
-
Use
convertEmptyStringToNull="true"on the mapper to handle empty strings -
Use
skipInvalidRecords="true"to log and skip bad records -
Add a default value to the converter:
converterExpression="stringToInteger('0')"
Records rejected / partial failures
Symptom: Some records load, others are silently dropped.
Root causes:
-
Business key mismatch --
businessKeysvalue doesn't match the mapper output field -
Required fields missing (e.g.,
skufor Products,customerIdfor Customers) -
Data type mismatch -- string value where a number is expected
Solution: Enable skipInvalidRecords="true" on the mapper to log rejected records, then fix the source data or mapper.
Fetch / Export Errors
HTTP 400 Bad Request on fetch
Symptom: Fetch fails with 400 status.
Root causes:
-
Invalid filter syntax -- check
fieldName,operator,value -
Non-existent field name in filter criterion
-
Invalid
objectTypevalue -
Missing required parameter (e.g.,
pricingParameterNamefor LTV/MLTV2)
Solution: Verify the filter XML. Common mistakes:
-
Using
equalinstead ofequalsas operator -
Missing
simple:prefix for dynamic values:value="simple:${header.myHeader}" -
Referencing a non-existent filter bean ID
OutOfMemoryError on large exports
Symptom: IM runs out of memory when exporting large datasets.
Root cause: Fetching all records into memory at once.
Solution: Use batched mode:
<to uri="pfx-api:fetch?objectType=PX&filter=myFilter&batchedMode=true&batchSize=5000"/>
<split>
<simple>${body}</simple>
<to uri="pfx-api:fetchIterator"/>
<to uri="pfx-csv:marshal"/>
<to uri="file:export?fileName=data.csv&fileExist=Append"/>
</split>
Empty result set (no data returned)
Symptom: Fetch returns 0 records when you expect data.
Root causes:
-
Filter criteria too restrictive
-
For PX/CX: missing
namecriterion -- PX/CX fetch requires a filter withfieldName="name"to identify the extension table -
Wrong
objectType-- e.g., usingPXwhen the data is in a Data Source (DM) -
Case-sensitive field values -- Pricefx field values may be case-sensitive
Route Startup Errors
Failed to start route: Route ID mismatch
Symptom: IM fails to start, route not found or not loaded.
Root cause: The route ID doesn't match the file name.
Rule: File import-products.xml -> route ID must be import-products. See Routes.
Mapper/filter bean not found
Symptom: Route fails with "No bean could be found" error.
Root cause: The mapper or filter referenced in the route URI doesn't exist or has a mismatched ID.
Check:
-
Mapper file
mappers/my-mapper.mapper.xml-> mapper ID must bemy-mapper.mapper -
Filter file
filters/my-filter.filter.xml-> filter ID must bemy-filter.filter -
File name and ID must match exactly (case-sensitive)
XML parsing error on route file
Symptom: IM fails to parse route XML.
Common causes:
-
Using
&instead of&in URI attributes -
Missing
xmlns="http://camel.apache.org/schema/spring"on<routes>element -
Invalid XML characters in expressions
-
Unclosed XML elements
File Processing Errors
File not picked up
Symptom: File is in the directory but the route doesn't process it.
Root causes:
-
File still being written -- if using
{{read.lock}}(readLock=changed), IM waits for the file to stabilize -
Missing
.donemarker -- if using{{done.file}}, IM waits forfilename.done -
File already processed -- check
.archive/directory -
includepattern doesn't match the file name -
Wrong directory path in
application.properties
CSV parsing errors
Symptom: pfx-csv:unmarshal fails with parse error.
Common messages:
-
"Header parameter must be defined because headerPolicy is strict"-- CSV has no header row butskipHeaderRecord=trueis set -
"Required header is different from header in data"--headerparameter doesn't match actual CSV columns -
"Streaming unmarshal can't be used inside of a route split"--streamingUnmarshalmust be used before the<split>, not inside it
Solutions:
-
Verify the CSV has a header row if
skipHeaderRecord=true -
If no header row, specify columns explicitly:
header=sku,name,price -
Move
streamingUnmarshalbefore the split element
File processed but no data loaded
Symptom: File is moved to archive, but no data in Pricefx.
Root causes:
-
CSV header mismatch -- column names don't match mapper
infields -
Empty file (only header row)
-
Wrong delimiter -- default is
,but file may use;or\t -
Encoding mismatch -- file uses a different encoding than expected
Solution: Check CSV parsing with pfx-filepreview:preview to see what IM reads from the file.
Event Handling Errors
Events not being processed
Symptom: Pricefx events fire but IM doesn't react.
Root causes:
-
integration.events.enabled=false (default) -- must be set totrue -
Wrong event type in mapping -- e.g.,
PADATALOAD_COMPLETEDvsPA_DATALOAD_COMPLETED -
Route URI mismatch -- the
direct:URI in the mapping must match the route's<from>URI
Stuck events
Symptom: Events accumulate and are never processed.
Root cause: A previous event handler route failed or is still running.
Solutions:
-
Check stuck event monitoring:
integration.events.check-stuck-processing.enabled=true(default) -
Manually clear stuck events via the Pricefx API
-
Check IM logs for the failed route and fix the root cause
Groovy Errors
SecurityException: Groovy sandbox violation
Symptom: Groovy expression fails with security exception.
Root cause: The expression uses a class or method not allowed by the Groovy sandbox.
Solutions:
-
Check the whitelist in the Groovy Sandbox documentation
-
Use only whitelisted Java classes (String, Math, BigDecimal, etc.)
-
No anonymous inner classes
-
No reflective access
TimeoutException: Groovy execution timeout
Symptom: Groovy expression is killed after timeout.
Root cause: Script takes too long (default limit configured by integration.groovy-sandbox.timeout).
Solutions:
-
Optimize the Groovy logic -- avoid loops over large collections
-
If legitimate: increase
integration.groovy-sandbox.timeoutvalue (in seconds) -
Consider moving complex logic to a Groovy processor class instead of inline expression
See Also
-
Error Handling -- retry configuration, email notifications
-
pfx-validator Component -- validate CSV/XLSX before loading
-
Groovy Sandbox -- sandbox whitelist and timeout configuration