<!--
 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.
-->
<service name="RMSampleService">
   <parameter name="ServiceClass" locked="xsd:false">sandesha2.samples.userguide.RMSampleService</parameter>



    <description>
        The userguide Sample service.
    </description>

    <module ref="sandesha2" />
       
    <operation name="ping" mep="http://www.w3.org/ns/wsdl/in-only">  
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver" />
        <actionMapping>urn:wsrm:Ping</actionMapping>
    </operation>
    
    <operation name="MTOMPing" mep="http://www.w3.org/ns/wsdl/in-only">  
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver" />
    </operation>
    
    <operation name="echoString">
        <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
        <actionMapping>urn:wsrm:EchoString</actionMapping>
        <outputActionMapping>urn:wsrm:EchoStringResponse</outputActionMapping>
    </operation>
       
   <!--     
   <supported-policy-namespaces namespaces="http://ws.apache.org/sandesha2/policy" />

	<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
			xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
			xmlns:sandesha2="http://ws.apache.org/sandesha2/policy" wsu:Id="RMPolicy">
			
		<sandesha2:RMAssertion>
			<wsp:Policy>
				<sandesha2:AcknowledgementInterval>4000</sandesha2:AcknowledgementInterval>
				<sandesha2:EnforceRM>true</sandesha2:EnforceRM>
			</wsp:Policy>
		</sandesha2:RMAssertion>
		
	</wsp:Policy>
	 -->
    
    
</service>

