From edb0f2f6223de0d257c84057a58141b5634d3ae4 Mon Sep 17 00:00:00 2001 From: Kaleb Murphy Date: Mon, 11 Aug 2008 17:49:40 +0000 Subject: [PATCH] WSClient replaced if test with eval and fixed bug where it was not handling simple arrays. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/WSClient.pm | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index a970549f8..3db071e8b 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -12,6 +12,7 @@ charset=utf8 - fixed: Gallery navigation back to album returns to page 1 (Martin Kamerbeek / Oqapi) + - fixed: WSClient now correctly handles SOAP::Som returns of simple arrays of scalars and a exception producing if test turned into an eval. 7.5.19 - fixed: paginator doesn't show correct number of page links with a limit applied diff --git a/lib/WebGUI/Asset/Wobject/WSClient.pm b/lib/WebGUI/Asset/Wobject/WSClient.pm index 565580d15..2bacaae4e 100644 --- a/lib/WebGUI/Asset/Wobject/WSClient.pm +++ b/lib/WebGUI/Asset/Wobject/WSClient.pm @@ -426,7 +426,7 @@ sub view { # services, but let's assume it might. If our results array has # more than one element, let's hope if contains scalars $p = WebGUI::Paginator->new($self->session,$url, $self->get('paginateAfter')); - $p->setDataByArrayRef(\@result); + $p->setDataByArrayRef(\@result); @result = (); @result = @$p; @@ -434,11 +434,12 @@ sub view { # In my experience, the most common case. We have an array # containing a single hashref for which we have been given a key name - if (my $aref = $result[0]->{$self->get('paginateVar')}) { - + my $aref; + eval{ $aref = $result[0]->{$self->get('paginateVar')} }; + if(!$@) { $var{'numResults'} = scalar @$aref; $p = WebGUI::Paginator->new($self->session,$url, $self->get('paginateAfter')); - $p->setDataByArrayRef($aref); + $p->setDataByArrayRef($aref); $result[0]->{$self->get('paginateVar')} = $p->getPageData; } else { @@ -459,13 +460,13 @@ sub view { } elsif ((ref $result[0]) =~ /ARRAY/) { $p = WebGUI::Paginator->new($self->session,$url, $self->get('paginateAfter')); - $p->setDataByArrayRef($result[0]); + $p->setDataByArrayRef($result[0]); $result[0] = $p->getPageData; } else { $p = WebGUI::Paginator->new($self->session,$url, $self->get('paginateAfter')); - $p->setDataByArrayRef([$result[0]]); - $result[0] = $p->getPageData; + $p->setDataByArrayRef([$result[0]]); + @result = map({'result' => $_}, @{$p->getPageData}); } } } @@ -499,9 +500,9 @@ sub view { if ($self->session->config->get('soapHttpHeaderOverride') && $self->get("httpHeader")) { - $self->session->http->setMimeType($self->get("httpHeader")); - $self->session->errorHandler->warn("changed mimetype: " . $self->get("httpHeader")); - } + $self->session->http->setMimeType($self->get("httpHeader")); + $self->session->errorHandler->warn("changed mimetype: " . $self->get("httpHeader")); + } # Note, we still process our template below even though it will never # be displayed if the redirectURL is set. Not sure how important it is