我使用的是 Delphi 10.4.2,编写一个SOAP服务器应用程序。为了启动WSDL,我使用了一个TWSDLHTMLPublish组件,它放在我的TWebModule Descendant上。我在将属性和可选元素暴露到wsdl文件中时遇到了问题。
我的接口定义对象如下:
// TRemotable Property Index constants.
// Quelle: http://www.codenewsfast.com/cnf/article/0/permalink.art-ng1920q2865
const
IS_OPTN = $0001; // This element is optional (minOccurs=0); Don't serialize it if its value was not explicitly set
IS_UNBD = $0002; // This array element is unbounded (The runtime serializes dyn arrays as either collection or unbounded elements)
IS_NLBL = $0004; // This element is nillable (xsi:nillable=true)
IS_UNQL = $0008; // This element is unqualified (see http://www.w3schools.com/schema/el_schema.asp) Runtime defaults to qualified otherwise
IS_ATTR = $0010; // This property is an attribute (otherwise the runtime serializes it as an element)
IS_TEXT = $0020; // This property is text (typically of the parent element) (see http://www.w3schools.com/schema/schema_complex_text.asp)
IS_ANY = $0040; // This property represents an xsd:any element (not really used by runtime)
IS_REF = $0080; // This property is a ref (i.e. ref=QName) element (see http://www.w3schools.com/schema/el_element.asp)
IS_QUAL = $0100; // This attribute is qualified (the runtime defaults to unqualified otherwise)
type
OrderDirection = (OrderNONE, OrderASC, OrderDESC);
ProjektOrderField = (pofNONE, pofID, pofNummer, pofStatus);
ProjektStatus = (psAll, psAnfrage, psAuftrag, psAbgeschlossen);
ProjektFilterType = class(TRemotable)
private
FStatus : ProjektStatus;
FStatus_specified : Boolean;
FOrderField : ProjektOrderField;
FOrderField_specified : Boolean;
FOrderDir : OrderDirection;
FOrderDir_specified : Boolean;
FTestAttribut : string;
Procedure SetStatus (Index: Integer; const Value: ProjektStatus);
Procedure SetOrderDir (Index: Integer; const Value: OrderDirection);
Procedure SetOrderField (Index: Integer; const Value: ProjektOrderField);
public
Function Status_Specified (Index: Integer) : Boolean;
Function OrderDir_Specified (Index: Integer) : Boolean;
Function OrderField_Specified(Index: Integer) : Boolean;
published
property TestAttribut : string Index (IS_UNQL OR IS_ATTR) read FTestAttribut write FTestAttribut;
property Status : ProjektStatus Index (IS_UNQL OR IS_OPTN) read FStatus write SetStatus stored Status_specified;
property OrderField : ProjektOrderField Index (IS_UNQL OR IS_OPTN) read FOrderField write SetOrderField stored OrderField_specified;
property OrderDir : OrderDirection Index (IS_UNQL OR IS_OPTN) read FOrderDir write SetOrderDir stored OrderDir_specified;
end;
个字符
输出WSDL文件如下所示:
<xs:complexType name="ProjektFilterType">
<sequence xmlns="http://www.w3.org/2001/XMLSchema">
<xs:element name="TestAttribut" type="xs:string"/>
<xs:element name="Status" type="ns1:ProjektStatus"/>
<xs:element name="OrderField" type="ns1:ProjektOrderField"/>
<xs:element name="OrderDir" type="ns1:OrderDirection"/>
</sequence>
</xs:complexType>
型
问题:IS_ATTR根本不工作-输出是xs:element而不是xs.attribute,元素缺少MinOccurs=“0”和MaxOccurs=“1”属性。
我做错了什么?除了属性索引之外,还需要定义任何RTTI属性?
1条答案
按热度按时间pgky5nke1#
好吧,我在Embarcaqdero的来源中找到了这个:
因此我将手工生成wdsl,并使用wsdl-importer生成接口单元。我希望有一个更简单的方法(对我来说:-)),但我可以接受这个...