/** * @param string $method * @param RequestInterface $params * * @return ResultInterface * @throws SoapFault */ 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; }