<?xml version="1.0"?>
<!-- Copyright 2003-2004 The Apache Software Foundation.                      -->
<!--                                                                          -->
<!-- Licensed 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.                                           -->


<definitions name="InteropTest" targetNamespace="http://soapinterop.org/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://soapinterop.org/" xmlns:s="http://soapinterop.org/xsd" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">



	<types>

		<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://soapinterop.org/xsd">

	                <import namespace = "http://schemas.xmlsoap.org/soap/encoding/"/>

			

			<element name="intItem" type="int" />

			<complexType name="intType">

			<sequence>

			<element ref="s:intItem" />

			</sequence>

			</complexType>





		</schema>

	</types>

	<message name="echoIntRequest">

	      <part name ="inputIntType" type="s:intType"/>

	</message> 

	<message name="echoIntResponse">

	       <part name ="return" type="s:intType"/>

        </message> 

	

	<portType name="RefTestPortType">

	        <operation name="echoInt" parameterOrder="inputIntType">

		        <input message="tns:echoIntRequest"/>

		        <output message="tns:echoIntResponse"/>

		</operation>			

		</portType>



	<binding name="RefTestSoapBinding" type="tns:RefTestPortType">

		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

               <operation name="echoInt">

                  <soap:operation soapAction="ref#echoInt"/>

                  <input>

                      <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

                  </input>

                  <output>

                      <soap:body use="encoded" namespace="http://soapinterop.org/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

                  </output>

               </operation>						

	       

	</binding>

 	<service name="ref">

    		<port binding="tns:RefTestSoapBinding" name="RefTest">

      		<soap:address location="http://localhost/axis/ref"/>

    		</port>

  	</service>

</definitions>

