<?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.

-->
<!-- START SNIPPET: drools -->
<rule-set name="cheese rules"
  xmlns="http://drools.org/rules"
  xmlns:jbi="http://drools.org/semantics/servicemix"
  xmlns:foo="http://servicemix.org/cheese/">

  <application-data identifier="jbi">org.apache.servicemix.components.drools.JbiHelper</application-data>
  <application-data identifier="context">javax.jbi.component.ComponentContext</application-data>
  <application-data identifier="deliveryChannel">javax.jbi.messaging.DeliveryChannel</application-data>

  <rule name="Ignore 2 message">
    <parameter identifier="exchange">
      <class>javax.jbi.messaging.MessageExchange</class>
    </parameter>

    <jbi:condition>/*/@id != 2</jbi:condition>
    <jbi:invoke service="foo:receiver"/>
  </rule>

</rule-set>
<!-- END SNIPPET: drools -->
