<?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.
  -->


<definitions name="FaultyWebService" targetNamespace="http://org/test/faults"
	xmlns:tns="http://org/test/faults" xmlns="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">


	<types>
		<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
			elementFormDefault="qualified" targetNamespace="http://org/test/faults">
			<element name="faultyWebServiceResponse">
				<complexType>
					<sequence>
						<element name="return" type="xsd:int" />
					</sequence>
				</complexType>
			</element>

			<element name="faultyWebService">
				<complexType>
					<sequence>
						<element name="arg0" type="xsd:int" />
					</sequence>
				</complexType>
			</element>

			<element name="FaultyWebServiceFault">
				<complexType>
					<sequence>
						<element name="faultInfo" type="xsd:string" />
						<element name="message" type="xsd:string" />
					</sequence>
				</complexType>
			</element>

		</xsd:schema>
	</types>

	<message name="faultyWebService">
		<part name="parameters" element="tns:faultyWebService" />
	</message>
	<message name="faultyWebServiceResponse">
		<part name="result" element="tns:faultyWebServiceResponse" />
	</message>
	<message name="faultyWebServiceFault">
		<part name="FaultyWebServiceFault" element="tns:FaultyWebServiceFault" />
	</message>

	<portType name="FaultyWebServicePortType">
		<operation name="faultyWebService">
			<input message="tns:faultyWebService" name="add" />
			<output message="tns:faultyWebServiceResponse" name="faultyWSResponse" />
			<fault name="faultyWebServiceFault" message="tns:faultyWebServiceFault" />
		</operation>
	</portType>
	<binding name="FaultyWebServiceBinding" type="tns:FaultyWebServicePortType">
		<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
			style="document" />
		<operation name="faultyWebService">
			<soap:operation soapAction="" />
			<input>
				<soap:body use="literal" />
			</input>
			<output>
				<soap:body use="literal" />
			</output>
			<fault name="faultyWebServiceFault">
				<soap:fault name="faultyWebServiceFault" use="literal" />
			</fault>
		</operation>
	</binding>
	<service name="FaultyWebServiceService">
		<port name="FaultyWebServicePort" binding="tns:FaultyWebServiceBinding">
			<soap:address
				location="http://localhost:9080/FaultyWebService/FaultyWebServiceImplService" />
		</port>
	</service>
</definitions>
