第六十三章 生成的类的详细信息 - 数组属性的创建
2024-07-21 本文已影响0人
Cache技术分享
第六十三章 生成的类的详细信息 - 数组属性的创建
数组属性的创建
默认情况下,SOAP
向导会在某些情况下创建数组类型的属性。如果需要,可以使用“不创建数组属性”选项来创建具有不同结构的属性。
具体来说,考虑包含以下类型的 WSDL
:
<s:complexType name="Obj">
<s:sequence>
<s:element minOccurs="0" name="MyProp" type="test:Array"/>
</s:sequence>
</s:complexType>
<s:complexType name="Array">
<s:sequence>
<s:element maxOccurs="unbounded" minOccurs="0" name="Item" nillable="true" type="test:Item"/>
</s:sequence>
</s:complexType>
<s:complexType name="Item">
<s:simpleContent>
<s:extension base="s:string">
<s:attribute name="Key" type="s:string" use="required"/>
</s:extension>
</s:simpleContent>
</s:complexType>
默认情况下,SOAP
向导生成以下类:
Class testws.Obj Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 1;
Parameter NAMESPACE = "https://testws.org";
Parameter XMLNAME = "Obj";
Parameter XMLSEQUENCE = 1;
Property MyProp As array Of %String(MAXLEN = "", XMLITEMNAME = "Item",
XMLKEYNAME = "Key", XMLNAME = "MyProp", XMLPROJECTION = "COLLECTION");
}
如果在使用 SOAP
向导时选择“不创建数组属性”,则生成的 Obj
类中的属性 MyProp
将定义如下:
Property MyProp As list Of testws.Item(XMLITEMNAME = "Item", XMLNAME = "MyProp", XMLPROJECTION = "COLLECTION");
此属性引用以下类,SOAP
向导也会生成该类:
Class testws.Item Extends (%SerialObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 1;
Parameter NAMESPACE = "https://testws.org";
Parameter XMLNAME = "Item";
Parameter XMLSEQUENCE = 1;
Property content As %String(MAXLEN = "", XMLNAME = "content", XMLPROJECTION = "CONTENT");
Property Key As %String(MAXLEN = "", XMLNAME = "Key", XMLPROJECTION = "ATTRIBUTE")
[ Required, SqlFieldName = _Key ];
}
生成的类中的 Web 方法的附加说明
本节包含有关生成的 Web
客户端类中的 Web
方法的附加说明。
-
IRIS
数据平台确保每个方法名称都短于方法名称限制,并且是唯一的。(有关方法名称长度的信息,请参阅常规系统限制)这意味着,如果WSDL
中的方法名称长于此限制,则生成的Web
方法的名称与WSDL
中的名称不同。
所使用的算法没有记录并且可能会发生变化,恕不另行通知。
- 如果
WSDL
中给定方法的soapAction
属性等于""
(这是有效的),则需要对生成的客户端类进行以下更改之一,以使此方法可以正常工作:- 将
SOAPACTIONQUOTED
参数设置为1
。 - 编辑生成的客户端类中的Web方法,原包含以下内容:
- 将
Quit ..WebMethod("HelloWorld").Invoke($this,"")
编辑如下:
Quit ..WebMethod("HelloWorld").Invoke($this,"""")
或者,在生成 Web
客户端之前编辑 WSDL
。如果这样做,请将 soapAction
属性编辑为""""
而不是""