【发布时间】:2009-05-11 17:09:15
【问题描述】:
在 SOAP 客户端请求中,标头需要此行:
<NS2:Header Name="Foo">Bar<NS2:Header>
所以我写了一个有两个字符串属性的类:
- Content 属性 - 用于元素的值(“Bar”)
- Name 属性 - 用于属性的值(“Foo”)
Name 属性的 AS_ATTRIBUTE 标志应该表明它是一个 XML“属性”。
Header = class(TSoapHeader)
private
FContent: string;
FName: string;
published
property Content: string read FContent write FContent;
property Name: string read FName write FName stored AS_ATTRIBUTE;
end;
并注册
RemClassRegistry.RegisterXSClass(Header, MY_URI);
RemClassRegistry.RegisterSerializeOptions(Header, [xoLiteralParam,
xoSimpleTypeWrapper]);
xoLiteralTypWrapper 选项指示该类应仅在元素中“包装”值 Content 属性,而不应为其添加嵌套元素。
对于 Name := "Foo" 和 Content := "Bar",这将是 SOAP 请求中的结果 XML 代码:
<NS2:Header Name="Foo">
<Content xsi:type="xsd:string">Bar</Content>
</NS2:Header>
属性在正确的位置,但内容值在嵌套标记中,不应该在此处。如果我从类定义中删除 Name 属性,则 Content 属性将作为元素内容看起来不错,如下所示:
<NS2:Header>Bar</NS2:Header>
这两个要求之间似乎存在冲突 - 如果我有 属性,我不会得到 xoSimpleTypeWrapper 样式。
【问题讨论】:
标签: web-services delphi soap attributes delphi-2009