Beispiel #1
0
 /**
  * Top-level handler invoked by Dispatcher against any request to this 
  * service. This method will hand over request processing task to other 
  * functions which process the request, set required headers and Response 
  * stream (if any in Atom/Json format) in 
  * WebOperationContext::Current()::OutgoingWebResponseContext.
  * Once this function returns, dispatcher uses global WebOperationContext 
  * to write out the request response to client.
  * This function will perform the following operations:
  * (1) Check whether the top level service class implements 
  *     IServiceProvider which means the service is a custom service, in 
  *     this case make sure the top level service class implements 
  *     IMetaDataProvider and IQueryProvider.
  *     These are the minimal interfaces that a custom service to be 
  *     implemented in order to expose its data as OData. Save reference to
  *     These interface implementations. 
  *     NOTE: Here we will ensure only providers for IDSQP and IDSMP. The 
  *     IDSSP will be ensured only when there is an GET request on MLE/Named 
  *     stream.
  *  
  * (2). Invoke 'Initialize' method of top level service for
  *      collecting the configuration rules set by the developer for this 
  *      service. 
  *  
  * (3). Invoke the Uri processor to process the request URI. The uri 
  *      processor will do the following:
  *      (a). Validate the request uri syntax using OData uri rules
  *      (b). Validate the request using metadata of this service
  *      (c). Parse the request uri and using, IQueryProvider
  *           implementation, fetches the resources pointed by the uri 
  *           if required
  *      (d). Build a RequestDescription which encapsulate everything 
  *           related to request uri (e.g. type of resource, result 
  *           etc...)
  * (3). Invoke handleRequest2 for further processing
  * 
  * @return void
  */
 public function handleRequest()
 {
     try {
         $this->createProviders();
         $this->_serviceHost->validateQueryParameters();
         $requestMethod = $this->getOperationContext()->incomingRequest()->getMethod();
         // Lion: accept OPTIONS request
         if ($requestMethod == HTTPRequestMethod::OPTIONS()) {
             header('Allow: GET,PATCH,POST,PUT');
             http_response_code(200);
             return;
         }
         // ----
         //            if ($requestMethod != HTTPRequestMethod::GET()) {
         //                throw ODataException::createNotImplementedError(Messages::onlyReadSupport($requestMethod));
         //            }
         $uriProcessor = UriProcessor::process($this);
         $request = $uriProcessor->getRequest();
         $this->serializeResult($request, $uriProcessor);
     } catch (\Exception $exception) {
         ErrorHandler::handleException($exception, $this);
         // Return to dispatcher for writing serialized exception
         return;
     }
 }