/**
  * Handle payload
  * 
  * @param   lang.Type target
  * @param   string $encoding
  * @return  var
  */
 protected function handlePayloadOf($target, $encoding = xp::ENCODING)
 {
     if (204 === $this->response->statusCode()) {
         return null;
         // "No Content"
     } else {
         return parent::handlePayloadOf($target);
     }
 }
Beispiel #2
0
 /**
  * Execute a request
  *
  * @param  webservices.rest.RestRequest $request
  * @return webservices.rest.RestResponse
  * @throws lang.IllegalStateException if no connection is set
  */
 public function execute(RestRequest $request)
 {
     $url = $request->targetUrl($this->base);
     $host = $url->getHost();
     if (!isset($this->connections[$host])) {
         $target = clone $url;
         // Clone & remove query from URL as it will lead to duplication!
         $this->connections[$host] = $this->connectionTo->__invoke($target->setQuery(null));
         $this->connections[$host]->setConnectTimeout($this->timeouts['connect']);
         $this->connections[$host]->setTimeout($this->timeouts['read']);
     }
     $send = $this->connections[$host]->create(new HttpRequest());
     $send->addHeaders($this->headers);
     $send->addHeaders($request->headerList());
     $send->setMethod($request->getMethod());
     // Compose body
     // * Serialize payloads using the serializer for the given mimetype
     // * Use bodies as-is, e.g. file uploads
     // * If no body and no payload is set, use parameters
     if ($request->hasPayload()) {
         $query = $url->getQuery();
         $send->setTarget($url->getPath() . ($query ? '?' . $query : ''));
         $send->setParameters(new RequestData($this->marshalling->marshal($request->getPayload()), $this->serializerFor($request->getContentType())));
     } else {
         if ($request->hasBody()) {
             $query = $url->getQuery();
             $send->setTarget($url->getPath() . ($query ? '?' . $query : ''));
             $send->setParameters($request->getBody());
         } else {
             $send->setTarget($url->getPath());
             $send->setParameters($url->getParams());
         }
     }
     try {
         $this->cat && $this->cat->debug('>>>', $send->getRequestString());
         $response = $this->connections[$host]->send($send);
     } catch (\io\IOException $e) {
         throw new RestException('Cannot send request', $e);
     }
     $reader = new ResponseReader($this->deserializerFor($response->header('Content-Type')[0]), $this->marshalling);
     $result = new RestResponse($response, $reader);
     $this->cat && $this->cat->debug('<<<', $response->toString(), $result->contentCopy());
     return $result;
 }
Beispiel #3
0
 /**
  * Execute a request
  *
  * @param  webservices.rest.RestRequest $request
  * @return webservices.rest.RestResponse
  * @throws lang.IllegalStateException if no connection is set
  */
 public function execute(RestRequest $request)
 {
     if (null === $this->connection) {
         throw new IllegalStateException('No connection set');
     }
     $send = $this->connection->create(new HttpRequest());
     $send->addHeaders($request->headerList());
     $send->setMethod($request->getMethod());
     $send->setTarget($request->getTarget($this->connection->getUrl()->getPath('/')));
     // Compose body
     // * Serialize payloads using the serializer for the given mimetype
     // * Use bodies as-is, e.g. file uploads
     // * If no body and no payload is set, use parameters
     if ($request->hasPayload()) {
         $send->setParameters(new RequestData($this->marshalling->marshal($request->getPayload()), $this->serializerFor($request->getContentType())));
     } else {
         if ($request->hasBody()) {
             $send->setParameters($request->getBody());
         } else {
             $send->setParameters($request->getParameters());
         }
     }
     try {
         $this->cat && $this->cat->debug('>>>', $send->getRequestString());
         $response = $this->connection->send($send);
     } catch (\io\IOException $e) {
         throw new RestException('Cannot send request', $e);
     }
     $reader = new ResponseReader($this->deserializerFor($response->header('Content-Type')[0]), $this->marshalling);
     $result = new RestResponse($response, $reader);
     $this->cat && $this->cat->debug('<<<', $response->toString(), $result->contentCopy());
     return $result;
 }