2012-08-14 48 views
2

使用德尔福2007我想导入一个WSDL的客户端使用。德尔福WSDL导入不解析扩展派生的类型

我已经导入了WSDL https://services.rdc.nl/voertuigscan/2.0/wsdl,它导入了一个xsd来定义它的类型。在导入的XSD,有几个附加的导入和包含XSD的,其中被定义以下类型:

<xs:complexType name="BedragExtended"> 
    <xs:simpleContent> 
    <xs:extension base="ct:Bedrag"> 
     <xs:attribute name="Bron" type="Bron"/> 
    </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

类型CT:Bedrag是在包括XSD定义为:

<xs:simpleType name="Bedrag"> 
    <xs:restriction base="xs:decimal"> 
    <xs:totalDigits value="9"/> 
    <xs:fractionDigits value="2"/> 
    </xs:restriction> 
</xs:simpleType> 

然而,该BedragExtended类型导入为:

// ************************************************************************ // 
// XML  : BedragExtended, global, <complexType> 
// Namespace : http://nsp.rdc.nl/RDC/voertuigscan 
// ************************************************************************ // 
BedragExtended = class(TRemotable) 
private 
    FBron: Bron; 
    FBron_Specified: boolean; 
    procedure SetBron(Index: Integer; const ABron: Bron); 
    function Bron_Specified(Index: Integer): boolean; 
published 
    property Bron: Bron Index (IS_ATTR or IS_OPTN) read FBron write SetBron stored Bron_Specified; 
end; 

正如你所看到的,有没有提到Bedrag类型的潜在价值,但在.PAS文件根儿的顶部的标题由wsdl导入显示正确的xsd已被解析。我怎样才能让Delphi正确地生成BedragExtended类型?

+0

可能不相关,但我有一个导入WSDL的错误和[我不得不求助于内联](http://stackoverflow.com/questions/10264057/delphi-xml-data-bindings-error-unknown-datatype )文件而不是包括。 – 2012-08-14 14:01:08

回答

0

在所有语言中看到这种行为是相当典型的(至少我知道这一点)。一个简单的类型通常不映射到一个类。唯一值得注意的例外是使用枚举构面的简单类型,在这种情况下,您可能会获得类型安全枚举(包括Java和.NET)。

这是有点期待的,因为BedragExtended意味着是一个具有属性的字符串。不幸的是,在XSD 1.0中,你不能同时扩展(设置属性)和限制(限制词法空间),所以看到这个实现是很常见的,这是一个复杂的类型(获取属性)但有一个简单的内容(基本上是某种文本)。

+0

你是说这是不可能的? 'BedragExtended'意思是一个带附加属性的小数。在导入的WSDL中'Bedrag'确实是一个'integer',但是'Bedrag'和'BedragExtended'之间的整个关系消失了。 – 2012-08-15 10:28:50

+0

我还没有看到它。正如我所说的,除了枚举构面之外,简单类型不会映射到类;它们映射到基元。 – 2012-08-15 12:01:31