/**
  * Processes the request by invoking the request handler that executes the servlet
  * in a protected context.
  *
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface  $servletRequest  The request instance
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance
  *
  * @return void
  */
 public function invoke(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse)
 {
     try {
         // unpack the remote method call
         $remoteMethod = RemoteMethodProtocol::unpack($servletRequest->getBodyContent());
         // load the application context
         /** @var \AppserverIo\Appserver\Application\Application $application */
         $application = $servletRequest->getContext();
         // prepare method name and parameters and invoke method
         $className = $remoteMethod->getClassName();
         $methodName = $remoteMethod->getMethodName();
         $parameters = $remoteMethod->getParameters();
         $sessionId = $remoteMethod->getSessionId();
         // load the bean manager and the bean instance
         $instance = $application->search($className, array($sessionId, array($application)));
         // invoke the remote method call on the local instance
         $response = call_user_func_array(array($instance, $methodName), $parameters);
         // serialize the remote method and write it to the socket
         $servletResponse->appendBodyStream(RemoteMethodProtocol::pack($response));
         // re-attach the bean instance in the container and unlock it
         $application->search('BeanContextInterface')->attach($instance, $sessionId);
     } catch (\Exception $e) {
         // catch the exception and append it to the body stream
         $servletResponse->appendBodyStream(RemoteMethodProtocol::pack(RemoteExceptionWrapper::factory($e)));
     }
     // finally dispatch this request, because we have finished processing it
     $servletRequest->setDispatched(true);
 }
 /**
  * Processes the request by invoking the request handler that attaches the message to the
  * requested queue in a protected context.
  *
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface  $servletRequest  The request instance
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance
  *
  * @return void
  * @throws \Exception Is thrown if the requested message queue is not available
  */
 public function invoke(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse)
 {
     // load the application context
     /** @var \AppserverIo\Appserver\Application\Application $application */
     $application = $servletRequest->getContext();
     // unpack the message
     $message = MessageQueueProtocol::unpack($servletRequest->getBodyContent());
     // load message queue name
     $queueName = $message->getDestination()->getName();
     // lookup the message queue manager and attach the message
     $queueManager = $application->search('QueueContextInterface');
     if ($messageQueue = $queueManager->lookup($queueName)) {
         $messageQueue->attach($message);
     } else {
         throw new \Exception("Can\\'t find queue for message queue {$queueName}");
     }
     // finally dispatch this request, because we have finished processing it
     $servletRequest->setDispatched(true);
 }
 /**
  * Processes the request by invoking the request handler that executes the servlet
  * in a protected context.
  *
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface  $servletRequest  The request instance
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletResponseInterface $servletResponse The response instance
  *
  * @return void
  */
 public function invoke(HttpServletRequestInterface $servletRequest, HttpServletResponseInterface $servletResponse)
 {
     try {
         // unpack the remote method call
         $remoteMethod = RemoteMethodProtocol::unpack($servletRequest->getBodyContent());
         // load the application context
         /** @var \AppserverIo\Appserver\Application\Application $application */
         $application = $servletRequest->getContext();
         // invoke the remote method and re-attach the bean instance to the container
         $response = $application->search(BeanContextInterface::IDENTIFIER)->invoke($remoteMethod, new ArrayList());
         // serialize the remote method and write it to the socket
         $servletResponse->appendBodyStream(RemoteMethodProtocol::pack($response));
     } catch (\Exception $e) {
         // catch the exception and append it to the body stream
         $servletResponse->appendBodyStream(RemoteMethodProtocol::pack(RemoteExceptionWrapper::factory($e)));
     }
     // finally dispatch this request, because we have finished processing it
     $servletRequest->setDispatched(true);
 }
 /**
  * Stores the data of the passed request in the also passed session.
  *
  * @param \AppserverIo\Psr\Servlet\Http\HttpServletRequestInterface $servletRequest The servlet request instance
  * @param \AppserverIo\Psr\Servlet\Http\HttpSessionInterface        $session        The session instance
  *
  * @return void
  */
 protected function saveRequest(HttpServletRequestInterface $servletRequest, HttpSessionInterface $session)
 {
     // initialize an empty instance
     $req = new \stdClass();
     // set the data of the passed request
     $req->requestUri = $servletRequest->getRequestUri();
     $req->method = $servletRequest->getMethod();
     $req->queryString = $servletRequest->getQueryString();
     $req->documentRoot = $servletRequest->getDocumentRoot();
     $req->serverName = $servletRequest->getServerName();
     $req->bodyContent = $servletRequest->getBodyContent();
     $req->cookies = $servletRequest->getCookies();
     $req->headers = $servletRequest->getHeaders();
     $req->principal = $servletRequest->getUserPrincipal();
     $req->requestUrl = $servletRequest->getRequestUrl();
     // store the data in the session
     $session->putData(Constants::FORM_REQUEST, $req);
 }