2011-03-08 79 views
1

我看到我的SOAP響應的某些節點在Flex 4中消失。我正在使用使用PHP/nusoap編寫的<mx:WebService>,並且99%的響應在Flex中正確解序列化。出於某種原因,這個片段是造成問題:SOAP響應在Flex 4中未正確反序列化

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顯示是 「名」。所有其他值都被忽略。

的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將無法正常解序列化?

+0

也許是因爲'url'節點丟失了?只是一個猜測。我的XML很生疏。 – 2011-03-09 00:22:29

+0

啊......我想你可能就在那裏。根據http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#element-all minOccurs默認爲1,這意味着它需要在WSDL中顯式設置爲minOccurs = 0。讓我試試這個。謝謝。 – 2011-03-10 20:59:09

+0

不用擔心。讓我知道如果事實證明是這樣,我會將其添加爲正式答案,以便在其他情況下遇到類似問題時可以接受它。 – 2011-03-10 21:26:10

回答

0

從上面的評論:

根據w3.org/TR/2001/REC-xmlschema-1-20010502/#element-all的minOccurs默認爲1意味着它需要顯式地設置的minOccurs = 0在WSDL中。

以上SOAP響應缺少所需的url元素。將WSDL更改爲明確定義url元素爲可選minOccurs="0"可修復此問題。