2016-06-28 3 views
0

Я пытаюсь использовать чугун IBM с помощью SOAP-сервисов softlayer. вне ворот, я получаю ошибку проверки с программным обеспечением wsdl, которое можно загрузить here. валидация терпит неудачу и в кислороде v18. в обоих случаях возникает ошибка при включении в спецификацию wsdl:SoftLayer 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: пространство имен атрибутов не может появляться в элементе 'xsd: include'.

ОК, пространство имен не является допустимым атрибутом для спецификации include. трудно поверить, что wsdl softlayer, используемый во всем мире, успешно используется (за исключением меня), недействителен. Я удаляю атрибут пространства имен, а затем вижу, что определение типа не может быть разрешено в спецификации спецификации элемента для 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, поэтому любая помощь там ценится!

Спасибо, Parke

ответ

0

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

Вы можете попробовать изменить тег, и посмотреть, если это работает, взгляните на этот пост XSD with elements from other namespace

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

+0

, чтобы быть ясным, я удалил только атрибут пространства имен, поэтому включение выглядело так. , и ошибка удаляется только по этой строке, когда я это делаю. но затем я получаю отказ в разрешении определений типов. Может ли быть, что последняя спецификация для xsd: include не позволяет использовать атрибут namespace с include, потому что это пространство имен неявно? то есть include подразумевает одно и то же пространство имен, а не импорт. – user3208130

+0

Другая интересная вещь в том, что, когда я использую кодовую помощь, кислород показывает tns: SoftLayer_Account как определенный тип. Опять же, кислород и чугун не могут проверяться по тем же причинам. Я попробую другие методы, такие как SOAPUI, но я подозреваю, что как кислород, так и чугун используют те же самые банки поддержки xml, которые являются очень недавними. , во всяком случае, я не могу выполнить работу из чугуна, если я не могу перекодировать wsdl и/или xsds. Я буду взломать, и я приму любые предложения! – user3208130

+0

Я отказался от использования SOAP API. Я долгое время взламывал этот wsdl и пришел к выводу, что каждый, кто использует SOAP-сервисы softlayer, использует программы или инструменты, которые не заботятся о том, что WSDL не может проверить. Вы не можете сказать Cast Iron не проверять wsdl, поэтому готовый WSDL не является стартером с этим инструментом. Я использую REST с Cast Iron, успешно, так что это, по крайней мере, обход. Я не уверен, что это должен быть ответ, а не комментарий? – user3208130

0

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

Смежные вопросы