<!--
  ~ 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.
  -->

<wsdl:definitions xmlns:tns="http://ws.apache.org/axis2/mtomsample/"
	xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
	xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
	xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
	xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
	xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns="http://schemas.xmlsoap.org/wsdl/"
	targetNamespace="http://ws.apache.org/axis2/mtomsample/">
	<wsdl:types>
		<xsd:schema xmlns="http://schemas.xmlsoap.org/wsdl/"
			attributeFormDefault="qualified" elementFormDefault="qualified"
			targetNamespace="http://ws.apache.org/axis2/mtomsample/">
			<xsd:import namespace="http://www.w3.org/2005/05/xmlmime"
				schemaLocation="xmime.xsd" />
			<xsd:complexType name="AttachmentType">
				<xsd:sequence>
					<xsd:element minOccurs="0" name="fileName"
						type="xsd:string" />
					<xsd:element minOccurs="0" name="binaryData"
						type="xmime:base64Binary" />
				</xsd:sequence>
			</xsd:complexType>
			<xsd:element name="AttachmentRequest" type="tns:AttachmentType" />
			<xsd:element name="AttachmentResponse" type="xsd:string" />
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="AttachmentRequest">
		<wsdl:part name="part1" element="tns:AttachmentRequest" />
	</wsdl:message>
	<wsdl:message name="AttachmentResponse">
		<wsdl:part name="part1" element="tns:AttachmentResponse" />
	</wsdl:message>
	<wsdl:portType name="MTOMServicePortType">
		<wsdl:operation name="attachment">
			<wsdl:input message="tns:AttachmentRequest"
				wsaw:Action="attachment" />
			<wsdl:output message="tns:AttachmentResponse"
				wsaw:Action="http://schemas.xmlsoap.org/wsdl/MTOMServicePortType/AttachmentResponse" />
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="MTOMServiceSOAP11Binding"
		type="tns:MTOMServicePortType">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
			style="document" />
		<wsdl:operation name="attachment">
			<soap:operation soapAction="attachment" style="document" />
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:binding name="MTOMServiceSOAP12Binding"
		type="tns:MTOMServicePortType">
		<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"
			style="document" />
		<wsdl:operation name="attachment">
			<soap12:operation soapAction="attachment" style="document" />
			<wsdl:input>
				<soap12:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap12:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="MTOMSample">
		<wsdl:port name="MTOMSampleSOAP11port_http"
			binding="tns:MTOMServiceSOAP11Binding">
			<soap:address
				location="http://localhost:8080/axis2/services/MTOMSample" />
		</wsdl:port>
		<wsdl:port name="MTOMSampleSOAP12port_http"
			binding="tns:MTOMServiceSOAP12Binding">
			<soap12:address
				location="http://localhost:8080/axis2/services/MTOMSample" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>