public function execute($operationConfig, $operationMetadata, $inputMap) {
        $request = $this->getRequest($operationConfig, $operationMetadata, $inputMap);

        try {
            $response = $this->client->send($request, array_merge(ApiConfig::getProxy(), ApiConfig::getTimeout()));
            $statusCode = $response->getStatusCode();
            $responseContent = $response->getBody()->getContents();
            
            if ($statusCode < self::HTTP_AMBIGUOUS) {
                
                if (ApiConfig::isDebug()) {
                    $this->logger->debug("---------------------");
                    $this->logger->debug(">>request(".$request->getMethod().") ". $request->getUri()->__toString() );    
                    $this->logger->debug(">>headers: ", $request->getHeaders());
                    $this->logger->debug(">>body: ". $request->getBody());
                    
                    $this->logger->debug("<<statusCode: ". $statusCode);
                    $this->logger->debug("<<headers: ", $response->getHeaders());
                    $this->logger->debug("<<body: ". $responseContent);
                    $this->logger->debug("---------------------");
                }
                
                if (strlen($responseContent) > 0) {
                    return json_decode($responseContent, true);
                } else {
                    return array();
                }
            } else {
                $this->handleException($response, $request);
            }
        } catch (RequestException $ex) {
            if ($ex->hasResponse()) {
                $this->handleException($ex->getResponse(), $request);
            } else {
                throw new ApiException($ex->getMessage());
            }
        }
    }