SOAP响应未在Flex 4中正确反序列化

时间:2011-03-08 23:39:29

标签: flex soap flex4 wsdl

我看到我的SOAP响应的某些节点在Flex 4中消失。我使用的是使用PHP / nusoap编写的<mx:WebService>,并且99%的响应在Flex中正确地反序列化。出于某种原因,这段代码会导致问题:

RAW XML:

<data xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:reportData[1]">
  <item xsi:type="tns:reportData">
    <name xsi:type="xsd:string">Tue.  8 Mar. 2011</name>
    <year xsi:type="xsd:int">2011</year>
    <month xsi:type="xsd:int">3</month>
    <day xsi:type="xsd:int">8</day>
    <counts xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:double[3]">
      <item xsi:type="xsd:double">26</item>
      <item xsi:type="xsd:double">11</item>
      <item xsi:type="xsd:double">11</item>
    </counts>
  </item>
</data>

Flex ProxyObject中显示的唯一元素是“name”。所有其他值都被忽略了。

WSDL将reportData定义为:

 <xsd:complexType name="reportData">
  <xsd:all>
   <xsd:element name="name" type="xsd:string"/>
   <xsd:element name="url" type="xsd:string"/>
   <xsd:element name="year" type="xsd:int"/>
   <xsd:element name="month" type="xsd:int"/>
   <xsd:element name="day" type="xsd:int"/>
   <xsd:element name="hour" type="xsd:int"/>
   <xsd:element name="counts" type="tns:reportCountList"/>
   <xsd:element name="breakdown_total" type="tns:reportCountList"/>
   <xsd:element name="breakdown" type="tns:reportDataList"/>
  </xsd:all>
 </xsd:complexType>

为什么这个XML不会正确地反序列化?

1 个答案:

答案 0 :(得分:0)

来自上述评论:

  

根据w3.org/TR/2001/REC-xmlschema-1-20010502/#element-all,minOccurs默认为1意味着需要在WSDL中将其显式设置为minOccurs = 0.

上述SOAP响应缺少必需的url元素。更改WSDL以将url元素明确定义为可选minOccurs="0"可以解决问题。