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