[
https://issues.apache.org/jira/browse/CAMEL-23279?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitrii Ostapchuk updated CAMEL-23279:
--------------------------------------
Description:
*Bug Description*
`samplePeriod` attribute of `<sample>` component does not support property
placeholders (e.g., `{{{}value{}}}`), while `timePeriodMillis` attribute of
`<throttle>` component with identical metadata works correctly.
*Root Cause*
`SamplingDefinition.description()` tries to parse `samplePeriod` via
`TimeUtils.toDuration()` before placeholder resolution, while
`ThrottleDefinition.description()` simply returns `timePeriodMillis` as a raw
String.
*Steps to Reproduce*
1. Add property to application.properties:
sample.period=5000
2. Configure route:
<sample samplePeriod="{{{}sample.period{}}}"/>
3. Start application
*Expected Behavior*
Route starts successfully, samplePeriod resolved to 5000
*Actual Behavior*
java.lang.NumberFormatException: For input string: "{{sample.perio"
at org.apache.camel.util.TimeUtils.toMilliSeconds(TimeUtils.java:194)
at org.apache.camel.util.TimeUtils.toDuration(TimeUtils.java:153)
at
org.apache.camel.model.SamplingDefinition.description(SamplingDefinition.java:89)
at
org.apache.camel.model.SamplingDefinition.toString(SamplingDefinition.java:82)
*Root Cause Code*
{code:java}
// SamplingDefinition.description() - BROKEN:
protected String description() {
if (messageFrequency != null) {
return "1 Exchange per " + getMessageFrequency() + " messages received";
} else {
// Tries to parse placeholder before resolution
return "1 Exchange per " +
TimeUtils.printDuration(TimeUtils.toDuration(samplePeriod));
}
}
// ThrottleDefinition.description() - WORKS:
protected String description() {
// Just returns raw String - no parsing
return getExpression() + " request per " + getTimePeriodMillis() + " millis";
}{code}
*Suggested Fix*
{code:java}
// In SamplingDefinition.description():
protected String description() {
if (messageFrequency != null) {
return "1 Exchange per " + getMessageFrequency() + " messages received";
} else {
// Just return raw string like ThrottleDefinition does
return "1 Exchange per " + getSamplePeriod();
}
}
{code}
*Environment*
- Camel version: 4.18.1
- Java version: 21
- Spring version: 6
was:
## Bug Description
`samplePeriod` attribute of `<sample>` component does not support
property placeholders (e.g., `\{{value}}`), while `timePeriodMillis`
attribute of `<throttle>` component with identical metadata works correctly.
## Root Cause
`SamplingDefinition.description()` tries to parse `samplePeriod` via
`TimeUtils.toDuration()` before placeholder resolution, while
`ThrottleDefinition.description()` simply returns `timePeriodMillis`
as a raw String.
## Steps to Reproduce
1. Add property to application.properties:
sample.period=5000
2. Configure route:
<sample samplePeriod="\{{sample.period}}"/>
3. Start application
## Expected Behavior
Route starts successfully, samplePeriod resolved to 5000
## Actual Behavior
java.lang.NumberFormatException: For input string: "{{sample.perio"
at org.apache.camel.util.TimeUtils.toMilliSeconds(TimeUtils.java:194)
at org.apache.camel.util.TimeUtils.toDuration(TimeUtils.java:153)
at
org.apache.camel.model.SamplingDefinition.description(SamplingDefinition.java:89)
at
org.apache.camel.model.SamplingDefinition.toString(SamplingDefinition.java:82)
## Root Cause Code
// SamplingDefinition.description() - BROKEN:
protected String description() {
if (messageFrequency != null) {
return "1 Exchange per " + getMessageFrequency() + " messages received";
} else {
// Tries to parse placeholder before resolution
return "1 Exchange per " +
TimeUtils.printDuration(TimeUtils.toDuration(samplePeriod));
}
}
// ThrottleDefinition.description() - WORKS:
protected String description() {
// Just returns raw String - no parsing
return getExpression() + " request per " + getTimePeriodMillis() + "
millis";
}
## Suggested Fix
// In SamplingDefinition.description():
protected String description() {
if (messageFrequency != null) {
return "1 Exchange per " + getMessageFrequency() + " messages received";
} else {
// Just return raw string like ThrottleDefinition does
return "1 Exchange per " + samplePeriod;
}
}
## Environment
- Camel version: 4.18.1
- Java version: 21
- Spring version: 6
> SamplingDefinition.description() fails with NumberFormatException when
> samplePeriod uses property placeholders
> --------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23279
> URL: https://issues.apache.org/jira/browse/CAMEL-23279
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 4.18.1
> Reporter: Dmitrii Ostapchuk
> Priority: Major
>
> *Bug Description*
> `samplePeriod` attribute of `<sample>` component does not support property
> placeholders (e.g., `{{{}value{}}}`), while `timePeriodMillis` attribute of
> `<throttle>` component with identical metadata works correctly.
>
> *Root Cause*
> `SamplingDefinition.description()` tries to parse `samplePeriod` via
> `TimeUtils.toDuration()` before placeholder resolution, while
> `ThrottleDefinition.description()` simply returns `timePeriodMillis` as a raw
> String.
>
> *Steps to Reproduce*
> 1. Add property to application.properties:
> sample.period=5000
> 2. Configure route:
> <sample samplePeriod="{{{}sample.period{}}}"/>
> 3. Start application
>
> *Expected Behavior*
> Route starts successfully, samplePeriod resolved to 5000
>
> *Actual Behavior*
> java.lang.NumberFormatException: For input string: "{{sample.perio"
> at org.apache.camel.util.TimeUtils.toMilliSeconds(TimeUtils.java:194)
> at org.apache.camel.util.TimeUtils.toDuration(TimeUtils.java:153)
> at
> org.apache.camel.model.SamplingDefinition.description(SamplingDefinition.java:89)
> at
> org.apache.camel.model.SamplingDefinition.toString(SamplingDefinition.java:82)
>
> *Root Cause Code*
>
> {code:java}
> // SamplingDefinition.description() - BROKEN:
> protected String description() {
> if (messageFrequency != null) {
> return "1 Exchange per " + getMessageFrequency() + " messages received";
>
> } else {
> // Tries to parse placeholder before resolution
> return "1 Exchange per " +
> TimeUtils.printDuration(TimeUtils.toDuration(samplePeriod));
> }
> }
> // ThrottleDefinition.description() - WORKS:
> protected String description() {
> // Just returns raw String - no parsing
> return getExpression() + " request per " + getTimePeriodMillis() + "
> millis";
> }{code}
> *Suggested Fix*
>
> {code:java}
> // In SamplingDefinition.description():
> protected String description() {
> if (messageFrequency != null) {
> return "1 Exchange per " + getMessageFrequency() + " messages
> received";
> } else {
> // Just return raw string like ThrottleDefinition does
> return "1 Exchange per " + getSamplePeriod();
> }
> }
> {code}
>
> *Environment*
> - Camel version: 4.18.1
> - Java version: 21
> - Spring version: 6
--
This message was sent by Atlassian Jira
(v8.20.10#820010)