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

<!-- Task injecting to a Proxy service -->
<definitions xmlns="http://ws.apache.org/ns/synapse">

    <task class="org.apache.synapse.startup.tasks.MessageInjector" name="InjectToProxyTask">
        <property name="soapAction" value="urn:getQuote"/>
        <property name="format" value="soap11"/>
        <property name="injectTo" value="proxy"/>
        <property name="proxyName" value="SampleProxy"/>
        <property name="message">
            <m0:getQuote xmlns:m0="http://services.samples">
                <m0:request>
                    <m0:symbol>IBM</m0:symbol>
                </m0:request>
            </m0:getQuote>
        </property>
        <trigger interval="5"/>
    </task>

    <proxy name="SampleProxy" transports="http">
        <target>
            <inSequence>
                <log level="custom">
                    <property name="MSG" value="SampleProxy invoked"/>
                </log>
                <send>
                    <endpoint>
                        <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                    </endpoint>
                </send>
            </inSequence>
            <outSequence>
                <log level="custom">
                    <property xmlns:ns="http://services.samples" name="Stock_Quote_on"
                              expression="//ns:return/ns:lastTradeTimestamp/child::text()"/>
                    <property xmlns:ns="http://services.samples" name="For_the_organization"
                              expression="//ns:return/ns:name/child::text()"/>
                    <property xmlns:ns="http://services.samples" name="Last_Value"
                              expression="//ns:return/ns:last/child::text()"/>
                </log>
                <drop/>
            </outSequence>
        </target>
    </proxy>

</definitions>
