2012-05-02 3 views
0

У меня есть веб-сервис REST, реализованный с помощью API LuraCast Restler. До сих пор он работал нормально. Внезапно я не получаю данные JSON в ответ на мои запросы к службе больше.Luracast Restler отправляет 'text/html' вместо JSON

X-Debug всегда возвращает следующие уведомления с каждым запросом к службе. не

(!) Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 1136 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.0969 1170720 Restler->addAPIClass() ../restIndex.php:14 
3 0.0971 1181912 Restler->generateMap() ../restler.php:248 
4 0.0971 1184616 parse_doc() ../restler.php:652 
5 0.0971 1184984 DocParser->parse() ../restler.php:1157 
6 0.0972 1205520 DocParser->parseLines() ../restler.php:1073 
7 0.0972 1209704 DocParser->parseLine() ../restler.php:1079 
8 0.0973 1209944 DocParser->setParam() ../restler.php:1111 
9 0.0973 1209944 DocParser->formatClass() ../restler.php:1120 

(!) Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 1136 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.1065 1224952 Restler->addAuthenticationClass() ../restIndex.php:15 
3 0.1065 1225304 Restler->addAPIClass() ../restler.php:260 
4 0.1068 1228176 Restler->generateMap() ../restler.php:248 
5 0.1068 1229568 parse_doc() ../restler.php:652 
6 0.1068 1229936 DocParser->parse() ../restler.php:1157 
7 0.1068 1239456 DocParser->parseLines() ../restler.php:1073 
8 0.1068 1241448 DocParser->parseLine() ../restler.php:1079 
9 0.1069 1241696 DocParser->setParam() ../restler.php:1111 
10 0.1069 1241696 DocParser->formatClass() ../restler.php:1120 

(!) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 385 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.1102 1228048 Restler->handle() ../restIndex.php:16 
3 0.1233 1461248 Restler->sendData() ../restler.php:366 
4 0.2814 1547080 header () ../restler.php:385 

(!) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 386 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.1102 1228048 Restler->handle() ../restIndex.php:16 
3 0.1233 1461248 Restler->sendData() ../restler.php:366 
4 0.2835 1547048 header () ../restler.php:386 

(!) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 387 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.1102 1228048 Restler->handle() ../restIndex.php:16 
3 0.1233 1461248 Restler->sendData() ../restler.php:366 
4 0.2846 1547064 header () ../restler.php:387 

(!) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 388 
Call Stack 
# Time Memory Function Location 
1 0.0013 631072 {main}() ../restIndex.php:0 
2 0.1102 1228048 Restler->handle() ../restIndex.php:16 
3 0.1233 1461248 Restler->sendData() ../restler.php:366 
4 0.2914 1547072 header () ../restler.php:388 

В конце концов данные, посылают в ответ, но не в формате JSON, поэтому мой Movil приложение не может обработать его больше нет.

Как я уже сказал, служба работает до сих пор. Я не знаю, связаны ли эти уведомления с ошибкой, но они явно кажутся.

Можете ли вы указать любое направление, как я могу отладить эту проблему?

Если это может быть какой-либо помощи вот мой код:

Это мой указательный сценарий, где я устанавливаю Restler:

<?php 

require_once '../../BaseDatos.php'; 
require_once 'restler/restler.php'; 

#set autoloader 
#do not use spl_autoload_register with out parameter 
#it will disable the autoloading of formats 
spl_autoload_register('spl_autoload'); 


$r = new Restler(); 
$r->setSupportedFormats('JsonFormat'); 
$r->addAPIClass('Rest'); 
$r->addAuthenticationClass('Seguridad'); 
$r->handle(); 

И это класс общественного API (я просто показать один метод)

class Rest 
{ 

    /** 
    * @brief Una instancia de la clase BaseDatos 
    * 
    * @var BaseDatos $db 
    */ 
    private $db; 

    /** 
    * \brief Constructor de la clase. 
    * 
    * Inicializa una instancia de la clase BaseDatos. 
    * 
    */ 
    function __construct() { 
     $this->db = BaseDatos::getInstance(); 
    } 
    public function getFuentes($nombreUsuario, $password) { 

     $fuentes = $this->db->getFuentes(); 
     $fuentes = array('fuentes' => $fuentes); 
     return $fuentes; 
    } 

И это метод BaseDatos класс извлечения информации должен быть возвращен:

public function getFuentes() { 
    //SELECT * FROM fuentes 
    $queryString = 'SELECT * FROM ' . TABLA_FUENTES . ' ORDER BY nombreFuente'; 
    $queryResult = $this->query($queryString); 
    if ($this->errno != 0) { 
     //ERRRO. mysql 
     $this->setErrorNoAndMessage(ErrorCode::ERROR_MYSQL, $this->error); 
     return FALSE; 
    } 
    $resultado = array(); 
    while ($row = $queryResult->fetch_assoc()) { 
     $resultado[] = $row; 
    } 

    $this->resetErrorNoAndMessage(); 
    return $resultado; 

} 

ответ

1

Проблема была связана с моими Док-комментариями, которые я недавно добавил. Тег @class, который я добавил в документации класса, создавал конфликт, возможно, потому, что DocParser Restler не обрабатывает этот конкретный тег.

Первого 2 Извещения я включил в моем вопросе случилось, когда DocParser пытался выполнить метод formatClass() в ответ возможно на @class теге, а не к Class декларации в PHP.

Возможно, кто-то с глубоким пониманием этого API может добавить немного света.

Просто удалите этот тег из документов и все снова работает.

+1

Спасибо @ david-casillas за сообщение об этой проблеме. Вы правы '@ class' ожидается в определенном формате, что вызывает проблему. Мы исправим его в следующем выпуске. '@ class' в настоящее время используется для установки свойства другого класса после их инициализации. Прочтите [этот пример] (https://github.com/Luracast/Restler/issues/3) для получения дополнительной информации. – Luracast