Описание типов данных для wsdl во внешнем файле

Здесь я покажу пример описания типов во внешнем файле и подключении этого файла в wsdl-описании вашего веб-сервиса.
Когда у вас относительно немного методов выставленных для веб-сервиса и нет каких-либо сложных custom структур-типов данных, то описание этих самых типов можно реализовать прямо в основном wsdl файле. Когда же количество методов с нестардантными параметрами уже значительно, то для удобства описание типов данных можно вынести во внешний файл.
Обратите внимание, что этот импортируемый файл должен быть полноценным xml файлом — с блоком

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

в начале документа.
Дальше структура примерно следующая:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:webservice.contentinn.com" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:yournamespace">
  <xsd:complexType name="AuthHeader">
    <xsd:sequence>
      <xsd:element name="company" type="xsd:string"/>
      <xsd:element name="username" type="xsd:string"/>
      <xsd:element name="password" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AuthHeaderElement" type="tns:AuthHeader"/>
  ...........

Так как wsdl файл по сути своей та же схема, то подключение одного файла в другой выполняется обычным для xsd-файлов методом:

<import namespace="YOURNAMESPACE" schemaLocation="RELATIVE_PATH_TO_YOUR_SCHEMA_FILE"/>

Файл описания типов данных необходимо подключать в блоке :

<wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema">
      <import namespace="urn:yournamespace" schemaLocation="wsdlTypes.xsd"/>
    </xsd:schema>
</wsdl:types>

У меня лично на первых порах некоторые сложности вызвало подключение файла с описанием типов данных в основной wsdl файл. Особое внимание в этом случае необходимо уделить namespace’ам (аттрибут namespace тэга import). А именно, чтобы значение аттрибута namespace точно соответствовало аттрибуту targetNamespace в подключенном файле схемы. В нашем случае это значение urn:yournamespace.
Вот и всё. Теперь описание типов видно в основном файле описания веб-сервиса.

Удачи вам с «выходом в мир»!