[Flex] probleem met gegenereerde web service proxy

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Rene59
  • Registratie: April 2000
  • Laatst online: 07-07-2024
Ik heb een web service die een array van User objecten teruggeeft.
Deze heb ik geimpoerteerd in Flex en als ik de service nu aanroep gaat het mis als er maar één User wordt teruggegeven. Als er meerdere User object teruggegeven worden gaat het wel goed.
Nu ben ik er al achter dat als je geen gebruik maakt van door de Flex builder gegenereerde web service proxies, je dit in de ResultEvent listener kunt afvangen door te controleren of event.result een ObjectProxy of Array(Collection) is.
Maar met de door Flex gegenereerde ResultEvents werkt dit dus niet, aangezien event.result Null is indien er maar 1 User teruggegeven wordt (en een Array als het er meerdere zijn).

De code:
code:
1
2
3
4
5
public function getUsersResult(event:GetUsersResultEvent):void {
    if (event.result != null) {
        users = new ArrayCollection(event.result as Array);
    }
}

event.result is dus null als er maar 1 User teruggegeven wordt.

Weet iemand of er een workaround voor dit probleem bestaat (behalve dus niet de gegenereerde proxies gebruiken)?

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Wat als je een single User object serverside ook gewoon in een Array stopt?

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Rene59
  • Registratie: April 2000
  • Laatst online: 07-07-2024
Dat gebeurt al, alleen Flex ziet het blijkbaar niet als array zodra er maar 1 object in zit en geeft vervolgens, blijkbaar, null terug.

[ Voor 3% gewijzigd door Rene59 op 16-05-2009 22:11 ]


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Klopt je service dan wel? Lijkt me sterk dat flex null geeft als er wel data inzit.

Met ServiceCapture of Charles kun je je calls volgen, wat geven die als output?

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • Rene59
  • Registratie: April 2000
  • Laatst online: 07-07-2024
Yep, de service werkt prima (in de debugger zie ik ook een goede response terug komen). Met onderstaande (zelf geschreven ipv gegenereerde) code werkt het ook prima in Flex.
Ik heb het vermoeden dat de gegenereerde code niet de controle bevat die ik er zelf wel in heb gezet (of event.result een ObjectProxy of ArrayCollection is)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Bindable] private var users:ArrayCollection = new ArrayCollection();

<mx:WebService id="um" showBusyCursor="true" wsdl="http://link_naar_wsdl">
    <mx:operation name="getUsers" result="getUsersResult(event);" fault="handleFaults(event);"/>
</mx:WebService>

[...]

// Get users result
public function getUsersResult(event:ResultEvent):void {
    if (event.result != null) {
        if (event.result is ObjectProxy) {
            users = new ArrayCollection([event.result]);
        } else {
            users = event.result as ArrayCollection;
        }
    }
}