Как отправить DateTime или какую-либо временную метку из PHP в Java, используя двоичный протокол удаленного взаимодействия Hessian? - PullRequest
1 голос
/ 06 июля 2011

Есть служба Java, которую мне нужно вызвать из PHP, которая выглядит примерно так:

getProductsForMode(java.util.Calendar date, int modeId)

У меня проблемы с отображением моего класса дат PHP в класс java.util.Calendar. Я пробовал пару разных подходов, но все безрезультатно:

Подход № 1 (оборачивание объекта DateTime в CalendarHandle, который отображается на Java CalendarHandle):

class CalendarHandle
{
  public $type;
  public $date;

  function __construct($date=null)
  {
    $this->date = $date;
  }
}

$this->hessianClient = new HessianClient(_HESSIAN_ENDPOINT, $hessianOptions);
$config = &HessianConfig::globalConfig();
$config->typeMap->mapRemoteType('com.caucho.hessian.io.CalendarHandle', 'CalendarHandle');

$time = new CalendarHandle(new DateTime($dateEvaluated));
$products = $this->hessianClient->getProductsForMode($time, 1234);

Ошибка:

[06-Jul-2011 11:16:52] PHP Fatal ошибка: необработанное исключение 'HttpError' с сообщением 'HttpError: неправильно сформировано HTTP заголовок 'в /Users/jordanb/Sites/proposal-framework/trunk/plugins/srHessianClientPlugin/hessianphp/Http.php:265

Подход № 2: Отображение даты / времени в java.util.Calendar

$this->hessianClient = new HessianClient(_HESSIAN_ENDPOINT, $hessianOptions);
$config = &HessianConfig::globalConfig();
$config->typeMap->mapRemoteType('java.util.Calendar', 'DateTime');

$time = new DateTime($dateEvaluated);
$products = $this->hessianClient->getProductsForMode($time, 1234);

Ошибка:

[06-Jul-2011 11:28:50] Неустранимая ошибка PHP: необработанное исключение 'HessianError' с сообщением 'Hessian Parser, неправильный ответ: ожидается r' в / Users / jordanb / Sites / offer-framework / trunk / плагинов / srHessianClientPlugin / hessianphp / Protocol.php: 350 * * одна тысяча двадцать один

Кто-нибудь успешно отправлял DateTime или какую-то временную метку из PHP в Java, используя Hessian? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Использовать метку времени Unix. Это лучшая ставка.

PHP:

$ts = time();

Передайте $ts в Java как-нибудь.

Java:

long ts = getTimeFromPhp();
Date dt = new Date(ts); 

Или вы можете использовать Календарь:

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(ts);
1 голос
/ 06 июля 2011

Было бы целесообразно просто использовать функцию php time () (которая возвращает int и отправлять это как long в Java? В Java вы можете просто передать long в новую Date (long Date).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...