protected function call($method, DTOMessage $request, $resultClass) { $requestDto = $request->makeDto(); Assert::isInstance($requestDto, 'DTOClass'); if (defined('__LOCAL_DEBUG__') && !defined('SIMPLE_TEST')) { // self-validation $form = ObjectToFormConverter::create($request->entityProto())->make($request); Assert::isTrue(!$form->getErrors() && $request->entityProto()->validate($request, $form), Assert::dumpArgument($request)); } try { try { $resultDto = $this->getSoapClient()->{$method}($requestDto); } catch (BaseException $e) { if (get_class($e) == 'BaseException') { throw new SoapFault('Server', get_class($e) . ': ' . $e->getMessage()); } else { $this->logCall(); throw $e; } } } catch (SoapFault $e) { $this->logCall(); throw self::convertSoapFault($e); } $this->logCall(); if (!$resultClass) { Assert::isNull($resultDto); $result = null; } else { Assert::isInstance($resultDto, 'DTOClass'); Assert::isEqual($resultDto->entityProto()->className(), $resultClass); $form = DTOToFormImporter::create($resultDto->entityProto())->make($resultDto); Assert::isTrue(!$form->getErrors(), Assert::dumpArgument($resultDto)); $result = $resultDto->makeObject($form); Assert::isInstance($result, 'DTOMessage'); Assert::isEqual(get_class($result), $resultClass); Assert::isTrue($result->entityProto()->validate($result, $form), Assert::dumpArgument($result)); } return $result; }
/** * @return Form **/ public final function toForm() { return ObjectToFormConverter::create($this->entityProto())->make($this); }