我正在尝试使用带有softlayer SOAP服务的IBM铸铁。在门外,我得到了一个可下载You can see here的softlayer wsdl的验证错误。氧气v18的验证也失败了。在这两种情况下,错误都发生在wsdl:
中的include include规范中<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:属性&#39;命名空间&#39;不允许出现在元素&#39; xsd:include&#39;。
中好的,命名空间不是包含规范的有效属性。很难相信全世界使用的softlayer的wsdl成功使用(除了我)是无效的。我删除了命名空间属性,然后我看到无法在对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>
...
我期待一个来自softlayer的格式良好的WSDL,它可能是。它只是因为我是wsdl和xml主题的白痴,所以任何帮助都会受到赞赏!
谢谢, 帕克
答案 0 :(得分:0)
这很奇怪,软件层WSDL可以与Visual Studio中的SOAP UI或WSDL.exe等工具一起使用。您无法从WSDL中删除XSD引用,否则您将遇到您在帖子中描述的问题。
您可以尝试更改标记并查看是否有效,请查看此帖XSD with elements from other namespace
无论如何,我认为您面临的问题是由于您使用的工具,而不是由于softlayer的WSLD错误。
答案 1 :(得分:0)
嗯,这不是一个答案,但至少它是一个解决方法。我的解决方案是使用REST API来处理使用铸铁而不是SOAP的软件层服务。