Distance Engine

<?xml version='1.0' encoding='UTF-8'?>

<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
             xmlns:tns="http://xmlns.oracle.com/apps/otm/distanceengine" 
             xmlns:xs="http://www.w3.org/2001/XMLSchema" 
             xmlns="http://schemas.xmlsoap.org/wsdl/" 
             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
             targetNamespace="http://xmlns.oracle.com/apps/otm/distanceengine" 
             name="DistanceEngineService">
    <types>
        <xs:schema  xmlns:tns="http://xmlns.oracle.com/apps/otm/distanceengine" elementFormDefault="qualified"  targetNamespace="http://xmlns.oracle.com/apps/otm/distanceengine">
            
            <xs:complexType name="keyValue">
                <xs:annotation>
                    <xs:documentation>
                        This acts like place holder for requirement similar to Map with a key and value like SCAC code, Weight_UOM, Length_UOM etc...
                    </xs:documentation>
                </xs:annotation>
                <xs:attribute name="name" type="xs:string" use="required"/>
                <xs:attribute name="value" type="xs:string"/>
            </xs:complexType>
            <xs:complexType name="keyValues">
                <xs:annotation>
                    <xs:documentation>
                        This acts like place holder for requirement similar to Map with a key and list of values like HAZMAT_TYPES.
                    </xs:documentation>
                </xs:annotation>
                <xs:sequence>
                    <xs:element ref="tns:values"/>
                </xs:sequence>
                <xs:attribute name="name" use="required" type="xs:string"/>
            </xs:complexType>
            <xs:element name="values">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:value" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="value" type="xs:string"/>            <xs:element name="addressLine" type="xs:string"/>
            <xs:element name="accuracy" type="xs:string" />
            <xs:element name="city" type="xs:string" />
            <xs:element name="countryCode" type="xs:string" />
            <xs:element name="countyCode" type="xs:string" />
            <xs:element name="latitude" type="xs:double" nillable='true' />
            <xs:element name="locationName" type="xs:string" />
            <xs:element name="longitude" type="xs:double" nillable='true'/>
            <xs:element name="postalCode" type="xs:string" />
            <xs:element name="province" type="xs:string" />
            <xs:element name="provinceCode" type="xs:string" />
            <xs:element name="railSplc" type="xs:string" />
            <xs:element name="railStationCode" type="xs:string" />
            <xs:element name="seqNumber" type="xs:int" nillable='true'/>
            <xs:element name="shortPostalCode" type="xs:string" />
            <xs:element name="possibleMatch"  type="tns:extEngineAddress"/>
            <xs:element name="validFlag" type="xs:boolean" default='false' />
            <xs:element name="sourceAddress" type="tns:extEngineAddress"/>
            <xs:element name="destinationAddress" type="tns:extEngineAddress"/>
            <xs:element name="address" type="tns:extEngineAddress" />
            <xs:element name="uom" type="xs:string"/>
            <xs:element name="amount" type="xs:double" nillable='true'/>
           
            <xs:element name="ExtEngineException"  type="xs:string" >
                <xs:annotation>
                    <xs:documentation>
                        Message contain information to be shown to user when fault occurs.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        
            <xs:element name="edeParam" type="tns:keyValue">
                <xs:annotation>
                    <xs:documentation>
                        <!-- TODO: Had not identified the use of this constants -->
                        The valid values to name attribute are
                        SOURCE_ADDRESS_TYPE
                        DEST_ADDRESS_TYPE
                        SAME_SOURCE_DEST_DIST
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="extEngineAuxInput" type="tns:keyValue" >
                <xs:annotation>
                    <xs:documentation>
                        The valid values to name attribute are
                        SCAC,
                        RouteCode,
                        Height,
                        Height_UOM,
                        Length,
                        Length_UOM,
                        Width,
                        Width_UOM,
                        Weight,
                        Weight_UOM
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="extEngineAuxValueList" type="tns:keyValues">
                <xs:annotation>
                    <xs:documentation>
                        The valid values to name attribute are
                        HAZMAT_TYPES
                    </xs:documentation>
                </xs:annotation>
		  </xs:element>
            <xs:element name="addressLines">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref='tns:addressLine' maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

            <xs:complexType name="extEngineAddress">
                <xs:sequence>
                    <xs:element ref="tns:accuracy" />
                    <xs:element ref="tns:addressLines" />
                    <xs:element ref="tns:city" />
                    <xs:element ref="tns:countryCode" />
                    <xs:element ref="tns:countyCode" />
                    <xs:element ref="tns:latitude"  />
                    <xs:element ref="tns:locationName" />
                    <xs:element ref="tns:longitude" />
                    <xs:element ref="tns:postalCode" />
                    <xs:element ref="tns:province" />
                    <xs:element ref="tns:provinceCode" />
                    <xs:element ref="tns:railSplc" />
                    <xs:element ref="tns:railStationCode" />
                    <xs:element ref="tns:seqNumber" />
                    <xs:element ref="tns:shortPostalCode" />
                </xs:sequence>
            </xs:complexType>

            <xs:element name="possibleMatches">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:possibleMatch" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            
            <xs:element name="locationAddressMatches">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:possibleMatches"/>
                        <xs:element ref="tns:validFlag" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
    
            <xs:element name="extEngineAuxInputList">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:extEngineAuxInput" maxOccurs="unbounded"/>
                        <xs:element ref="tns:extEngineAuxValueList" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
           
            <xs:element name="edeParams" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:edeParam" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            
            <xs:element name="lookupDistanceRequest">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:sourceAddress" />
                        <xs:element ref="tns:destinationAddress" />
                        <xs:element ref='tns:extEngineAuxInputList'/>
                        <xs:element ref="tns:edeParams"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
           
            <xs:element name="extEngineDistance">
                <xs:annotation>
                    <xs:documentation>the values for UOM element should be valid unit of measure in OTM.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:uom" />
                        <xs:element ref="tns:amount" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            
            <xs:element name="validateAddressRequest">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:address" />
                        <xs:element ref='tns:extEngineAuxInputList' />
                        <xs:element ref="tns:edeParams"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </types>
    
    <message name="lookupDistanceRequest">
        <part name="lookupDistanceRequest" element="tns:lookupDistanceRequest"/>
    </message>
    
    <message name="lookupDistanceResponse">
        <part name="extEngineDistance" element="tns:extEngineDistance"/>
    </message>
    
    <message name="ExtEngineException">
        <part name="fault" element="tns:ExtEngineException"/>
    </message>
    
    <message name="validateAddressRequest">
        <part name="validateAddressRequest" element="tns:validateAddressRequest"/>
    </message>
    
    <message name="validateAddressResponse">
        <part name="locationAddressMatches" element="tns:locationAddressMatches"/>
    </message>
    
    <portType name="ExternalDistanceEngine">
        <operation name="lookupDistance" >
            <input message="tns:lookupDistanceRequest"  />
            <output message="tns:lookupDistanceResponse" />
            <fault message="tns:ExtEngineException" name="ExtEngineException"/>
        </operation>
        <operation name="validateAddress">
            <input  message="tns:validateAddressRequest" />
            <output  message="tns:validateAddressResponse" />
            <fault message="tns:ExtEngineException" name="ExtEngineException"/>
        </operation>
    </portType>
    
    <binding name="ExternalDistanceEnginePortBinding" type="tns:ExternalDistanceEngine">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="lookupDistance">
            <soap:operation soapAction="lookupDistance"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
            <fault name="ExtEngineException">
                <soap:fault name="ExtEngineException" use="literal"/>
            </fault>
        </operation>
        <operation name="validateAddress">
            <soap:operation soapAction="validateAddress"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
            <fault name="ExtEngineException">
                <soap:fault name="ExtEngineException" use="literal"/>
            </fault>
        </operation>
    </binding>
    <service name="DistanceEngineService">
        <port name="ExternalDistanceEnginePort" binding="tns:ExternalDistanceEnginePortBinding">
            <soap:address location="http://localhost/GC3Services/DistanceEngineService"/>
        </port>
    </service>
</definitions>