<?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.    
-->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.7-b01-. -->
<definitions targetNamespace="http://helloworld/external" name="HelloWorldServiceService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://helloworld/external" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <types>
    <xsd:schema>
      <xsd:import namespace="http://helloworld/external" schemaLocation="HelloWorldServiceService_schema1.xsd"/>
    </xsd:schema>
  </types>
  <message name="getGreetings">
    <part name="parameters" element="tns:getGreetings"/>
  </message>
  <message name="getGreetingsResponse">
    <part name="parameters" element="tns:getGreetingsResponse"/>
  </message>
  <message name="getGreetingsComplex">
    <part name="parameters" element="tns:getGreetingsComplex"/>
  </message>
  <message name="getGreetingsComplexResponse">
    <part name="parameters" element="tns:getGreetingsComplexResponse"/>
  </message>
  <portType name="HelloWorldService">
    <operation name="getGreetings">
      <input message="tns:getGreetings"/>
      <output message="tns:getGreetingsResponse"/>
    </operation>
    <operation name="getGreetingsComplex">
      <input message="tns:getGreetingsComplex"/>
      <output message="tns:getGreetingsComplexResponse"/>
    </operation>
  </portType>
  <binding name="HelloWorldServicePortBinding" type="tns:HelloWorldService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
    <operation name="getGreetings">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
    <operation name="getGreetingsComplex">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="HelloWorldServiceService">
    <port name="HelloWorldServicePort" binding="tns:HelloWorldServicePortBinding">
      <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
    </port>
  </service>
</definitions>
