<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ex="http://datex2.eu/schema/3/exchangeInformation" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://datex2.eu/wsdl/FULLExchange/2020" xmlns:con="http://datex2.eu/schema/3/messageContainer" xmlns:com="http://datex2.eu/schema/3/common" targetNamespace="http://datex2.eu/wsdl/FULLExchange/2020" name="FULLExchange">
	<documentation>
		Exchange 2020 Version ( DATEX II 3.x related )
		This document describes all the Exchange 2020 supporting DATEX II exchange interfaces i.e. a FULL exchange interfaces web service agent based on Exchange 2020 
		This wsdl document is the reference with which each DATEX II Web Service has to be built
		Refer http://datex2.eu
	</documentation>
	
	<types>
		<xs:schema targetNamespace="http://datex2.eu/wsdl/FULLExchange/2020">
			<xs:import namespace="http://datex2.eu/schema/3/messageContainer" schemaLocation="./DATEXII_3_MessageContainer.xsd"/>
			<xs:import namespace="http://datex2.eu/schema/3/exchangeInformation" schemaLocation="./DATEXII_3_ExchangeInformation.xsd"/>
			<!-- Here, the "namespace" MUST be the same as the used DATEXII schema targetNamespace -->
			<!-- Here, the "schemaLocation" depends on each implementation and MUST be filled  by each developer, for instance  "file:///C:/DATEXII/MessageContainer.xsd"-->

			<!-- for snapshot pull no elelement definition for input message is needed
			<xs:element name="pullSnapshotDataInput" type="ex:ExchangeInformation" /> -->
			<xs:element name="pullSnapshotDataOutput" type="con:MessageContainer" />	

			<xs:element name="putDataInput" type="con:MessageContainer" />
			<xs:element name="putDataOutput" type="ex:ExchangeInformation" />			
			
			<xs:element name="putSnapshotDataInput" type="con:MessageContainer" />
			<xs:element name="putSnapshotDataOutput" type="ex:ExchangeInformation" />
			
			<xs:element name="openSessionInput" type="ex:ExchangeInformation" />
			<xs:element name="openSessionOutput" type="ex:ExchangeInformation" />
			
			<xs:element name="closeSessionInput" type="ex:ExchangeInformation" />
			<xs:element name="closeSessionOutput" type="ex:ExchangeInformation" />
			
			<xs:element name="keepAliveInput" type="ex:ExchangeInformation" />
			<xs:element name="keepAliveOutput" type="ex:ExchangeInformation" />

			<xs:element name="putCISServiceRequestInput"  type="con:MessageContainer" />			
			<xs:element name="putCISServiceRequestOutput" type="ex:ExchangeInformation" />			
			
			<xs:element name="putCISServiceFeedbackInput"  type="con:MessageContainer" />			
			<xs:element name="putCISServiceFeedbackOutput" type="ex:ExchangeInformation" />
		</xs:schema>
	</types>
	
	<message name="pullSnapshotDataInputMessage"/>
	<message name="pullSnapshotDataOutputMessage">
		<part name="return" element="tns:pullSnapshotDataOutput"/>
	</message>
	
	<message name="putDataInputMessage">
		<part name="body" element="tns:putDataInput"/>
	</message>
	<message name="putDataOutputMessage"> 
		<part name="return" element="tns:putDataOutput"/>
	</message>

	<message name="putSnapshotDataInputMessage">
		<part name="body" element="tns:putSnapshotDataInput"/>
	</message>
	<message name="putSnapshotDataOutputMessage">
		<part name="return" element="tns:putSnapshotDataOutput"/>
	</message>
	
	<message name="openSessionInputMessage">
		<part name="body" element="tns:openSessionInput"/>
	</message>
	<message name="openSessionOutputMessage">
		<part name="return" element="tns:openSessionOutput"/>
	</message>
	
	<message name="closeSessionInputMessage">
		<part name="body" element="tns:closeSessionInput"/>
	</message>
	<message name="closeSessionOutputMessage">
		<part name="return" element="tns:closeSessionOutput"/>
	</message>
	
	<message name="keepAliveInputMessage">
		<part name="body" element="tns:keepAliveInput"/>
	</message>
	<message name="keepAliveOutputMessage">
		<part name="return" element="tns:keepAliveOutput"/>
	</message>
	
	<message name="putCISServiceRequestInputMessage">
		<part name="body" element="tns:putCISServiceRequestInput"/>
	</message>
	<message name="putCISServiceRequestOutputMessage">
		<part name="return" element="tns:putCISServiceRequestOutput"/>
	</message>

	<message name="putCISServiceFeedbackInputMessage">
		<part name="body" element="tns:putCISServiceFeedbackInput"/>
	</message>
	<message name="putCISServiceFeedbackOutputMessage">
		<part name="return" element="tns:putCISServiceFeedbackOutput"/>
	</message>
		
	<portType name="FULLExchangeInterface">
		<operation name="pullSnapshotData">
			<input message="tns:pullSnapshotDataInputMessage"/>
			<!-- The SnapshotPull service doesn't use any input message but its declaration is here mandatory for a few Web Service frameworks-->
			<output message="tns:pullSnapshotDataOutputMessage"/>
		</operation>
		<operation name="putData">
			<input message="tns:putDataInputMessage"/>
			<output message="tns:putDataOutputMessage"/>
		</operation>
		<operation name="openSession">
			<input message="tns:openSessionInputMessage"/>
			<output message="tns:openSessionOutputMessage"/>
		</operation>
		<operation name="closeSession">
			<input message="tns:closeSessionInputMessage"/>
			<output message="tns:closeSessionOutputMessage"/>
		</operation>
		<operation name="keepAlive">
			<input message="tns:keepAliveInputMessage"/>
			<output message="tns:keepAliveOutputMessage"/>
		</operation>
		<operation name="putSnapshotData">
			<input message="tns:putSnapshotDataInputMessage"/>
			<output message="tns:putSnapshotDataOutputMessage"/>
		</operation>
		<operation name="putCISServiceRequest">
			<input message="tns:putCISServiceRequestInputMessage"/>
			<output message="tns:putCISServiceRequestOutputMessage"/>
		</operation>
		<operation name="putCISServiceFeedback">
			<input message="tns:putCISServiceFeedbackInputMessage"/>
			<output message="tns:putCISServiceFeedbackOutputMessage"/>
		</operation>
	</portType>
	
	<binding name="FULLExchangeSoapBinding" type="tns:FULLExchangeInterface">
		<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
		<operation name="pullSnapshotData">
			<soapbind:operation
				soapAction="http://datex2.eu/wsdl/FULLExchange/2020/pullSnapshotData"
				style="document" />
			<input>
				<soapbind:body use="literal" />
			</input>
			<output>
				<soapbind:body parts="return" use="literal" />
			</output>
		</operation>
		<operation name="putData">
			<soapbind:operation soapAction="http://datex2.eu/wsdl/FULLExchange/2020/putData" style="document"/>
			<input>
				<soapbind:body parts="body" use="literal"/>
			</input>
			<output>
				<soapbind:body parts="return" use="literal"/>
			</output>
		</operation>
		<operation name="putSnapshotData">
			<soapbind:operation soapAction="http://datex2.eu/wsdl/FULLExchange/2020/putSnapshotData" style="document"/>
			<input>
				<soapbind:body parts="body" use="literal"/>
			</input>
			<output>
				<soapbind:body parts="return" use="literal"/>
			</output>
		</operation>
		<operation name="openSession">
			<soapbind:operation soapAction="http://datex2.eu/wsdl/FULLExchange/2020/openSession" style="document"/>
			<input>
				<soapbind:body parts="body" use="literal"/>
			</input>
			<output>
				<soapbind:body parts="return" use="literal"/>
			</output>
		</operation>
		<operation name="closeSession">
			<soapbind:operation soapAction="http://datex2.eu/wsdl/FULLExchange/2020/closeSession" style="document"/>
			<input>
				<soapbind:body parts="body" use="literal"/>
			</input>
			<output>
				<soapbind:body parts="return" use="literal"/>
			</output>
		</operation>
		<operation name="keepAlive">
			<soapbind:operation soapAction="http://datex2.eu/wsdl/FULLExchange/2020/keepAlive" style="document"/>
			<input>
				<soapbind:body parts="body" use="literal"/>
			</input>
			<output>
				<soapbind:body parts="return" use="literal"/>
			</output>
		</operation>
				<operation name="putCISServiceRequest">
			<soapbind:operation
				soapAction="http://datex2.eu/wsdl/FULLExchange/2020/putCISServiceRequest"
				style="document" />
			<input>
				<soapbind:body parts="body" use="literal" />
			</input>
			<output>
				<soapbind:body parts="return" use="literal" />
			</output>
		</operation>
				<operation name="putCISServiceFeedback">
			<soapbind:operation
				soapAction="http://datex2.eu/wsdl/FULLExchange/2020/putCISServiceFeedback"
				style="document" />
			<input>
				<soapbind:body parts="body" use="literal" />
			</input>
			<output>
				<soapbind:body parts="return" use="literal" />
			</output>
		</operation>
	</binding>
	<service name="FULLExchangeService">
		<port name="FULLExchangeSoapEndPoint" binding="tns:FULLExchangeSoapBinding">
			<soapbind:address location="...../FULLExchangeService/2020"/>
			<!-- Here, the "location" depends on each implementation and MUST be filled  by each developer, for instance "http://localhost:8080/FULLExchangeService/2020"-->
		</port>
	</service>
</definitions>