我有一个动态类,它是一个Value Object,用于将参数传递给WebService。它有两个公共属性:
package
{
[Bindable]
public dynamic class WebServiceCriteria
{
public var property1:String;
public var property2:String;
}
}
我在应用程序的一部分中设置了这两个属性:
var myCriteria:WebServiceCriteria = new WebServiceCriteria();
myCriteria.property1 = "x";
myCriteria.property2 = "y";
然后我在我的应用程序的另一点添加了其他 - 动态 - 属性:
myCriteria.property3 = "z";
但是,当我将实例作为参数传递给WebService时,即使它们具有值,也不会发送原始的两个公共属性(正如我在Fiddler中看到的那样)。但是,我可以在send()之前的调试器中将它们视为我的Class实例的属性。
operation.arguments = {args: myCriteria};
operation.send(); // only property3 is sent
为什么没有发送这两个属性?
以下是发送到WebService的SOAP请求的示例:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<intf:webservice_controller xmlns:intf="http://childDir.parentDir">
<args xsi:type="apachesoap:Map" xmlns:apachesoap="http://xml.apache.org/xml-soap">
<item>
<key xsi:type="xsd:string">property1</key>
<value xsi:type="xsd:string"></value>
</item>
<item>
<key xsi:type="xsd:string">property2</key>
<value xsi:type="xsd:string"></value>
</item>
<item>
<key xsi:type="xsd:string">property3</key>
<value xsi:type="xsd:string">z</value>
</item>
</args>
</intf:webservice_controller>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
答案 0 :(得分:1)
尝试将其添加到构造函数中:
package
{
[Bindable]
public dynamic class WebServiceCriteria
{
public var property1:String;
public var property2:String;
function WebServiceCriteria()
{
prototype.property1 = null;
prototype.property2 = null;
}
}
}
......因为似乎只有Object
属性是可枚举的
答案 1 :(得分:1)
Flex 3.0手册中记录了此行为。有关详细信息,请参阅Dynamic Classes。直接引用:
[...]但是,以这种方式创建的方法无法访问[example]类的任何私有属性或方法。此外,甚至对[example]类的公共属性或方法的引用也必须使用this关键字或类名进行限定。
答案 2 :(得分:-1)
我不相信您可以将对象发送到Web服务。如果要发送对象,则需要使用远程对象。要使用Web服务,您需要将对象转换为某种xml或soap请求。像
var myCriteria:WebServiceCriteria = new WebServiceCriteria();
myCriteria.property1 = "x";
myCriteria.property2 = "y";
operation.send(<request>
<property1>{myCriteria.property1}</property1>
<property2>{myCriteria.property2}</property2>
</request>);
http://livedocs.adobe.com/flex/3/html/help.html?content=data_intro_2.html