Здесь я покажу пример описания типов во внешнем файле и подключении этого файла в wsdl-описании вашего веб-сервиса.
Когда у вас относительно немного методов выставленных для веб-сервиса и нет каких-либо сложных custom структур-типов данных, то описание этих самых типов можно реализовать прямо в основном wsdl файле. Когда же количество методов с нестардантными параметрами уже значительно, то для удобства описание типов данных можно вынести во внешний файл.
Обратите внимание, что этот импортируемый файл должен быть полноценным xml файлом — с блоком
в начале документа.
Дальше структура примерно следующая:
<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"/>
Файл описания типов данных необходимо подключать в блоке <strong><wsdl:types/></strong>
:
<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’ам (аттрибут <strong>namespace</strong>
тэга <strong>import</strong>
). А именно, чтобы значение аттрибута namespace
точно соответствовало аттрибуту <strong>targetNamespace</strong>
в подключенном файле схемы. В нашем случае это значение urn:yournamespace.
Вот и всё. Теперь описание типов видно в основном файле описания веб-сервиса.
Удачи вам с «выходом в мир»!