2010-10-12 83 views
2

我们已经得到了一个.wsdl文件(下面列出),我们将使用它来生成用于我们的应用程序的c#代码。当我将文件加载到XMLSpy的我收到以下错误WSDL定义问题

attribute 'type' in message part 'organisation' (message 'getOrganisationResponse') refers to type 'organisation' which is not defined within the WSDL file! 

它说,它无法找到的类型,但是,这是在该文件的顶部的部分定义的,所以我不知道为什么它没有找到它。

任何帮助,将不胜感激

干杯

理查德

<?xml version="1.0" encoding="UTF-8"?> 
<definitions 
    xmlns:tns="http://www.xxxx.com/epp/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:ns1="http://xml.apache.org/xml-soap/" 
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    name="Heiq" 
    targetNamespace="http://www.xxxx.com/epp/"> 


    <types> 
    <!-- Organisation object --> 
    <xsd:element name="organisation"> 
    <xsd:complexType> 
    <xsd:sequence> 
    <xsd:element name="id" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="componentID" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="name" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="suburb" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="address1" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="address2" type="xsd:string" minOccurs="0"/> 
    <xsd:element name="postcode" type="xsd:string"/> 
    <xsd:element name="phone" type="xsd:string"/> 
    <xsd:element name="fax" type="xsd:string"/> 
    <xsd:element name="emailAddress" type="xsd:string"/> 
    <xsd:element name="website" type="xsd:string"/> 
    <xsd:element name="contactPersonName" type="xsd:string"/> 
    </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</types> 


<message name="getOrganisationRequest"> 
    <part name="token" type="xsd:string"/> 
    <part name="organisationID" type="xsd:string"/> 
</message> 

<message name="getOrganisationResponse"> 
    <part name="organisation" type="organisation"/> 
</message> 


    <portType name="xxxxPortType"> 
    <!-- Get organisation function --> 
    <operation name="getOrganisation"> 
    <input message="tns:getOrganisationRequest"/> 
    <output message="tns:getOrganisationResponse"/> 
    </operation> 
</portType> 


<binding name="xxxxBinding" type="tns:xxxxPortType"> 
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <!-- Get organisation function --> 
    <operation name="getOrganisation"> 
    <input> 
    <soap:body use="encoded"  encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
    </input> 
    <output> 
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
    </output> 
    </operation> 
</binding> 


<service name="xxxxService"> 
    <port name="xxxxPort" binding="tns:xxxxBinding"> 
    <soap:address location="http://www.xxxx.com/xxxx/application/soap.php"/> 
    </port> 
</service> 

</definitions> 

回答

2

你的类型声明下方<types>需要给予自己的命名空间。我猜测你的wsdl的供应商在测试他们编写的WSDL时使用了非常松散的解析器,或者依赖于某些代码优先的WSDL生成工具来创建此WSDL。在任何一种情况下,都有责任为你提供一个合适的WSDL和xsd。

这里是一个WSDL的相关部分应该是什么样子的例子 - 在这里改变名称空间,如你所愿:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions 
    xmlns:tns="http://www.xxxx.com/epp/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:ns1="http://xml.apache.org/xml-soap/" 
    xmlns:types="http://www.xxxx.com/types/"  
    xmlns="http://schemas.xmlsoap.org/wsdl/" 
    name="Heiq" 
    targetNamespace="http://www.xxxx.com/epp/"> 


    <types> 
     <xsd:schema targetNamespace="http://www.xxxx.com/types/" 
      xmlns="http://www.w3.org/2001/XMLSchema"> 
     <xsd:complexType name="organisation"> 
      <xsd:sequence> 
       <xsd:element name="id" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="componentID" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="name" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="suburb" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="address1" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="address2" type="xsd:string" minOccurs="0"/> 
       <xsd:element name="postcode" type="xsd:string"/> 
       <xsd:element name="phone" type="xsd:string"/> 
       <xsd:element name="fax" type="xsd:string"/> 
       <xsd:element name="emailAddress" type="xsd:string"/> 
       <xsd:element name="website" type="xsd:string"/> 
       <xsd:element name="contactPersonName" type="xsd:string"/> 
      </xsd:sequence> 
     </xsd:complexType> 
     </xsd:schema> 
    </types> 


    <message name="getOrganisationRequest"> 
     <part name="token" type="xsd:string"/> 
     <part name="organisationID" type="xsd:string"/> 
    </message> 

    <message name="getOrganisationResponse"> 
     <part name="organisation" type="types:organisation"/> 
    </message> 

    ... 
+0

感谢您的帮助。 – PerryW 2010-10-14 11:49:41

+0

我会回到他们希望得到一个更强大的wsdl – PerryW 2010-10-14 11:50:16