<?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.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
    ">

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="activemq-activemq:topic:foo"/>
            <to uri="mock:result-activemq"/>
        </route>
        <route>
            <from uri="activemq-camel:topic:foo"/>
            <to uri="mock:result-camel"/>
        </route>
        <route>
            <from uri="activemq-empty:topic:foo"/>
            <to uri="mock:result-empty"/>
        </route>
        <route>
            <from uri="activemq-trusted:topic:foo"/>
            <to uri="mock:result-trusted"/>
        </route>
    </camelContext>

    <!-- configuration for activemq-camel endpoint -->

    <bean id="camelConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
        <property name="trustedPackages">
            <list>
                <value>org.apache.camel</value>
            </list>
        </property>
    </bean>

    <bean id="camelConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="camelConnectionFactory"/>
    </bean>

    <bean id="activemq-camel" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="camelConfig"/>
    </bean>

    <!-- configuration for activemq-activemq endpoint -->

    <bean id="activemqConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
        <property name="trustedPackages">
            <list>
                <value>org.apache.activemq</value>
            </list>
        </property>
    </bean>

    <bean id="activemqConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="activemqConnectionFactory"/>
    </bean>

    <bean id="activemq-activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="activemqConfig"/>
    </bean>

    <!-- configuration for activemq-empty endpoint -->

    <bean id="emptyConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
        <property name="trustedPackages">
            <list>
                <value></value>
            </list>
        </property>
    </bean>

    <bean id="emptyConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="emptyConnectionFactory"/>
    </bean>

    <bean id="activemq-empty" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="emptyConfig"/>
    </bean>

    <!-- configuration for activemq-trusted endpoint -->

    <bean id="trustedConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://localhost?broker.persistent=false"/>
        <property name="trustAllPackages" value="true"/>
    </bean>

    <bean id="trustedConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="trustedConnectionFactory"/>
    </bean>

    <bean id="activemq-trusted" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="trustedConfig"/>
    </bean>

</beans>
