<?xml version="1.0"?>
<!--

    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<definitions name="urn:SimpleTest"
             targetNamespace="urn:SimpleTest" 
	     xmlns="http://schemas.xmlsoap.org/wsdl/" 
	     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
	     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
	     xmlns:tns="urn:SimpleTest" 
	     xmlns:s="http://SimpleTest.org/xsd" 
	     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

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

            <element name="echoString" type="s:echoStringType"/>
            <complexType name="echoStringType">
                <sequence>
	            <element name="inputString" type="xsd:string" nillable="true"/>
                    <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                </sequence>
            </complexType>

            <element name="stringResponseName" type="s:stringResponseNameType"/>
	    <complexType name="stringResponseNameType">
                <sequence>
		    <element name="responseString" 
                             type="xsd:string" 
                             nillable="true"/>
                </sequence>
            </complexType>
        </schema>
    </types>

    <message name="echoString">
        <part name="body" type="s:echoStringType"/>
    </message>
    <message name="echoStringResponse">
        <part name="return" type="s:stringResponseNameType"/>
    </message>

    <portType name="SimpleTest">
        <operation name="echoString" parameterOrder="body" >
           <input message="tns:echoString"/>
	   <output message="tns:echoStringResponse"/>
        </operation>
    </portType>

    <binding name="SimpleTestBinding" type="tns:SimpleTest">
        <soap:binding style="rpc" 
                      transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="echoString">
	        <soap:operation soapAction="http://SimpleTest.org/"/>
	            <input> <soap:body use="literal" namespace="http://SimpleTest.org/xsd"/> </input>
                    <output> <soap:body use="literal" namespace="http://SimpleTest.org/xsd"/> </output>
            </operation>
    </binding>

    <service name="SimpleTestService">
        <port name="SimpleTest" binding="tns:SimpleTestBinding">
            <soap:address location="http://localhost:1024/rpclit/SimpleTest"/>
        </port>
    </service>
</definitions>
