protected function call($method, RequestInterface $request)
{
$requestEvent = new Event\RequestEvent($this, $method, $request);
$this->dispatcher->dispatch(Events::REQUEST, $requestEvent);
try {
$arguments = $request instanceof MultiArgumentRequestInterface ? $request->getArguments() : [$request];
$result = call_user_func_array([$this->soapClient, $method], $arguments);
if ($result instanceof ResultProviderInterface) {
$result = $result->getResult();
}
if (!$result instanceof ResultInterface) {
$result = new MixedResult($result);
}
} catch (SoapFault $soapFault) {
$this->dispatcher->dispatch(Events::FAULT, new Event\FaultEvent($this, $soapFault, $requestEvent));
throw $soapFault;
}
$this->dispatcher->dispatch(Events::RESPONSE, new Event\ResponseEvent($this, $requestEvent, $result));
return $result;
}