Я пытаюсь использовать чугун 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
, чтобы быть ясным, я удалил только атрибут пространства имен, поэтому включение выглядело так. , и ошибка удаляется только по этой строке, когда я это делаю. но затем я получаю отказ в разрешении определений типов. Может ли быть, что последняя спецификация для xsd: include не позволяет использовать атрибут namespace с include, потому что это пространство имен неявно? то есть include подразумевает одно и то же пространство имен, а не импорт. –
user3208130
Другая интересная вещь в том, что, когда я использую кодовую помощь, кислород показывает tns: SoftLayer_Account как определенный тип. Опять же, кислород и чугун не могут проверяться по тем же причинам. Я попробую другие методы, такие как SOAPUI, но я подозреваю, что как кислород, так и чугун используют те же самые банки поддержки xml, которые являются очень недавними. , во всяком случае, я не могу выполнить работу из чугуна, если я не могу перекодировать wsdl и/или xsds. Я буду взломать, и я приму любые предложения! – user3208130
Я отказался от использования SOAP API. Я долгое время взламывал этот wsdl и пришел к выводу, что каждый, кто использует SOAP-сервисы softlayer, использует программы или инструменты, которые не заботятся о том, что WSDL не может проверить. Вы не можете сказать Cast Iron не проверять wsdl, поэтому готовый WSDL не является стартером с этим инструментом. Я использую REST с Cast Iron, успешно, так что это, по крайней мере, обход. Я не уверен, что это должен быть ответ, а не комментарий? – user3208130