<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
             http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

  <bean id="beerFunction" class="org.apache.camel.test.blueprint.PropertiesComponentFunctionTest.MyFunction"/>

  <bean id="vmProperties" class="org.apache.camel.test.blueprint.MyProperties" />

  <camelContext xmlns="http://camel.apache.org/schema/blueprint">

    <propertyPlaceholder id="properties" location="ref:vmProperties" ignoreMissingLocation="true">
      <propertiesFunction ref="beerFunction"/>
    </propertyPlaceholder>

    <route>
      <from uri="direct:start"/>
      <to uri="log:{{sys:os.name}}"/>
      <to uri="{{beer:FOO}}"/>
      <to uri="{{beer:BAR}}"/>
    </route>
  </camelContext>

</blueprint>

