Example #1
0
 /**
  * {@inheritDoc}
  * @throws RuntimeException
  */
 public function buildResponse(DomainPayloadInterface $domainPayload, ResponseInterface $response)
 {
     try {
         $response->getBody()->rewind();
         $response->getBody()->write(json_encode($domainPayload->getValues()));
         $headers = array_merge($this->headers, ['Content-Type' => 'application/json']);
         foreach ($headers as $header => $value) {
             $response = $response->withHeader($header, $value);
         }
         return $response->withStatus(200);
     } catch (Exception $e) {
         throw new RuntimeException('Response object could not be instantiated! ' . $e->getMessage());
     }
 }
 /**
  * {@inheritDoc}
  */
 public function resolve(ServerRequestInterface $request, DomainPayloadInterface $domainPayload)
 {
     if (!$this->container->has($domainPayload->getType())) {
         $this->logger->error(sprintf('Could not find responder with id "%s"', $domainPayload->getType()));
         return null;
     }
     try {
         $responder = $this->container->get($domainPayload->getType());
         if ($responder instanceof Responder) {
             return $responder;
         } else {
             $this->logger->debug(sprintf('Got "%s" but expected type "%s". Ignoring.', is_object($responder) ? get_class($responder) : $responder, Responder::class));
         }
     } catch (Exception $e) {
         $this->logger->error(sprintf('An error occurred while trying to instantiate "%s": %s', $domainPayload->getType(), $e->getMessage()));
     }
     return null;
 }
Example #3
0
 /**
  * Tries to resolve an {@link \bitExpert\Adroit\Responder\Responder} instance by querying
  * the $responderResolvers. In case no matching action instance could be found an
  * exception gets thrown.
  *
  * @param ServerRequestInterface $request
  * @param DomainPayloadInterface $domainPayload
  * @return Responder
  * @throws RuntimeException
  */
 protected function resolveResponder(ServerRequestInterface $request, DomainPayloadInterface $domainPayload)
 {
     $this->logger->debug(sprintf('Trying to resolve responder for domainpayload of type %s...', $domainPayload->getType()));
     foreach ($this->responderResolvers as $index => $resolver) {
         if (!$resolver instanceof ResponderResolver) {
             $this->logger->warning(sprintf('Action resolver at index %s is an instance of class %s which does not implement ' . '\\bitExpert\\Adroit\\Action\\Resolver\\ActionResolver. Skipped.', $index, get_class($resolver)));
             continue;
         }
         $responder = $resolver->resolve($request, $domainPayload);
         if ($responder instanceof Responder) {
             // step out of the loop when a responder could be found
             // by the resolver. First resolver wins!
             $this->logger->debug(sprintf('Resolved responder %s via resolver %s', get_class($responder), get_class($resolver)));
             return $responder;
         }
     }
     throw new RuntimeException(sprintf('A responder for domainpayload of type "%s" could not be found! Check your configuration!', $domainPayload->getType()));
 }