Hi everyone, I've been working on a blueprint based applications for soem weeks and I had to deal with a number of properties placeholders so I've used camel-properties and I found some issues/limitation for which I've raised the following JIRA:
1. CAMEL-10352: Optionally delegate to Aries PropertyEvaluator services in BlueprintPropertiesParser 2. CAMEL-10393: Add an option to disable using default value if a property does not exists 3. CAMEL-10417: Support adding location using child nodes of propertyPlaceholder element 4. CAMEL-10419: Allow to individually set whether to silently ignore a missing location CAMEL-10352 and CAMEL-10393 have already been merged and I've just completed the implementation of CAMEL-10417 and CAMEL-10419 which you can find in my fork: https://github.com/lburgazzoli/apache-camel/tree/camel-properties Before merge it I'd like to have your opinion as there are some small changes about the XML configuration I'm going to highlight here: 1. As today, you can customize the property placeholders with the tag propertyPlaceholder where the attribute location is mandatory and that is fine untill you just want to register your own function in blueprint which lead to something like that: <propertyPlaceholder id="myPropertyPlaceholder" location="none" ignoreMissingLocation="true"> <propertiesFunction ref="beerFunction"/> </propertyPlaceholder> So you may think that you have no locations set but that is not true because by default camel-blueprint detects OSGi blueprint property placeholders services and add them to the mix. Of course you can disable such behavior but I found this a little bit confusing so I made it not more mandatory (in fact that is the same behavior you'd have if you define a PropertiesComponent bean instead of using the propertyPlaceholder tag) and now you can now write it as: <propertyPlaceholder id="myPropertyPlaceholder"> <propertiesFunction ref="beerFunction"/> </propertyPlaceholder> 2. As today to add new properties placeholder locations you need to set them with the location attribute using comma as separator and this work just fine but it may result confusing if you need to deal with a number of properties files. In addition you can't set which location is required and which may be missing as the option to ignore missing location is global so I've enhanced the propertyPlaceholder tag in a way you can add locations as: <propertyPlaceholder id="myPropertyPlaceholder"> <propertiesLocation resolver = "classpath" path = "com/my/company/something/my-properties-1.properties" optional = "false"/> <propertiesLocation resolver = "classpath" path = "com/my/company/something/my-properties-2.properties" optional = "false"/> <propertiesLocation resolver = "file" path = "${karaf.home}/etc/my-override.properties" optional = "true"/> </propertyPlaceholder> Note that the attribute resolver and optional are not mandatory and have classpath and false as default value respectivley. Of course setting locations via location attribute is still supported and it has been enhanced to support additional attributes, i.e.: <propertyPlaceholder id="myPropertyPlaceholder" location="file:${karaf.home}/etc/my.properties;optional=true"/> Note that the locations defined by the propertiesLocation tag are added to those defined in location attribute. Any objection/suggestion on such implementation ? Regards, Luca --- Luca Burgazzoli