<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
 * 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.    
-->
<xs:schema version="1.0" targetNamespace="http://ws.binding.sca.tuscany.apache.org/doclit" 
                         xmlns:tns="http://ws.binding.sca.tuscany.apache.org/doclit" 
                         xmlns:tns2="http://helloworld/external" 
                         xmlns:xs="http://www.w3.org/2001/XMLSchema">
                         
  <xs:import namespace="http://helloworld/external" schemaLocation="./HelloWorldImplService-doclit2.xsd"/>

  <xs:element name="Exception" type="tns:Exception"/>

  <xs:element name="getGreetings" type="tns:getGreetings"/>

  <xs:element name="getGreetingsComplex" type="tns:getGreetingsComplex"/>

  <xs:element name="getGreetingsComplexResponse" type="tns:getGreetingsComplexResponse"/>

  <xs:element name="getGreetingsException" type="tns:getGreetingsException"/>

  <xs:element name="getGreetingsExceptionResponse" type="tns:getGreetingsExceptionResponse"/>

  <xs:element name="getGreetingsResponse" type="tns:getGreetingsResponse"/>

  <xs:complexType name="getGreetingsException">
    <xs:sequence>
      <xs:element name="arg0" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getGreetingsExceptionResponse">
    <xs:sequence>
      <xs:element name="return" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Exception">
    <xs:sequence>
      <xs:element name="message" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getGreetings">
    <xs:sequence>
      <xs:element name="arg0" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getGreetingsResponse">
    <xs:sequence>
      <xs:element name="return" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getGreetingsComplex">
    <xs:sequence>
      <xs:element name="arg0" type="tns2:foo" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="getGreetingsComplexResponse">
    <xs:sequence>
      <xs:element name="return" type="tns2:foo" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

