SoftLayer WSDL не проходит проверку

Я пытаюсь использовать чугун IBM с сервисами SOAP Softlayer. из ворот я получаю ошибку проверки с помощью программного слоя wsdl, который можно скачать здесь. проверка не проходит и в кислороде v18. в обоих случаях ошибка возникает при включении спецификации в wsdl:

<xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
    schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
</xsd:schema>

и это ошибка.

cvc-complex-type.3.2.2: атрибут 'namespace' не может появляться в элементе 'xsd:include'.

хорошо, пространство имен не является допустимым атрибутом для включаемой спецификации. Трудно поверить, что wsdl софтлайера, используемый всем миром, успешно использует (кроме меня), недействительно. я удаляю атрибут namespace и затем вижу, что определение типа не может быть разрешено в ссылке на спецификацию элемента tns:SoftLayer_Account.

<xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <xsd:complexType name="SoftLayer_AccountObjectMask">
    <xsd:sequence>
      <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>

и целый ряд таких ошибок в контексте спецификаций операции wsdl.

Пространство имен для заголовка SOAP не указано. Когда использование закодировано, должен быть определен URI пространства имен.

Вот одна из операций, где происходит ошибка.

<operation name="addReferralPartnerPaymentOption">
  <soap:operation soapAction="http://api.service.softlayer.com/soap/v3/SoftLayer_AccountAction"/>
  <input>
    <soap:header message="tns:authenticateHeader" part="authenticate" use="encoded"
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
...

Для контекста, вот начальные строки wsdl.

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:tns="http://api.service.softlayer.com/soap/v3/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="slApi"
  targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <types>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
        schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
    </xsd:schema>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:complexType name="SoftLayer_AccountObjectMask">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </types>
  <message name="activatePartner">
    <part name="accountId" type="xsd:string"/>
    <part name="hashCode" type="xsd:string"/>
  </message>
...

И глава включенной схемы, SoftLayer_Account.xsd.

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
  xmlns:tns="http://api.service.softlayer.com/soap/v3/"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="slApi"
  targetNamespace="http://api.service.softlayer.com/soap/v3/">
  <types>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:include namespace="http://api.service.softlayer.com/soap/v3/"
        schemaLocation="https://api.softlayer.com/soap/v3/SoftLayer_Account?xsd"/>
    </xsd:schema>
    <xsd:schema targetNamespace="http://api.service.softlayer.com/soap/v3/">
      <xsd:complexType name="SoftLayer_AccountObjectMask">
        <xsd:sequence>
          <xsd:element minOccurs="1" maxOccurs="1" name="mask" type="tns:SoftLayer_Account"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </types>
  <message name="activatePartner">
    <part name="accountId" type="xsd:string"/>
    <part name="hashCode" type="xsd:string"/>
  </message>
...

Я ожидал хорошо сформированного WSDL от softlayer, и это, вероятно, так. просто я идиот по теме wsdl и xml, поэтому любая помощь там приветствуется!

Спасибо Парке

2 ответа

Ну, это не так много ответа, но, по крайней мере, это обходной путь. Мое решение состоит в том, чтобы использовать API-интерфейсы REST для работы со службами программного слоя, используя чугун, а не SOAP.

Это странно, программный слой WSDL отлично работает с такими инструментами, как SOAP UI или WSDL.exe из Visual Studio. Вы не можете удалить ссылку XSD из WSDL, иначе вы столкнетесь с проблемами, подобными описанным в вашем сообщении.

Вы можете попробовать поменять тег и посмотреть, работает ли он, посмотрите на этот пост XSD с элементами из другого пространства имен.

В любом случае, я думаю, что проблема, с которой вы сталкиваетесь, связана с инструментами, которые вы используете, а не с неправильным WSLD от softlayer.

Другие вопросы по тегам