Gemfire '@type' не работает - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь использовать gemfire rest api с собственным клиентом gemfire.Что у меня работает:

  1. crud для моего объекта через собственный клиент
  2. извлечение и удаление того же объекта через rest api

Когда я пытаюсьвыполнить создание / обновление через rest api с помощью @type и затем попытаться получить его через собственный клиент gemfire. Я получаю

"com.gemstone.gemfire.pdx.internal.PdxInstanceImpl, к которому невозможно привести...

Я проверил документы: https://gemfire.docs.pivotal.io/95/geode/rest_apps/rest_prereqs.html и:

Для обеспечения совместимости между клиентами GemFire ​​Java (или собственными клиентами GemFire) и клиентами REST,должны соблюдаться следующие правила:

  1. Все Java-классы GemFire ​​и собственные клиентские классы, работающие с данными, доступ к которым также осуществляется через интерфейс REST, должны быть сериализованы в PDX либо с помощью автосериализации PDX, либо с помощью реализации PdxSerializable.
  2. Java-клиенты GemFire ​​и собственные клиенты могут извлекать данные с поддержкой REST либо в виде PdxInstance, либо в качестве фактического объекта с помощью метода PdxInstance.getObject. Если вы используете последний метод, высначала необходимо объявить тип объекта (@type) в полезной нагрузке запроса POST или PUT при создании объекта в REST;и во-вторых, у клиента Java должен быть фактический класс домена в его CLASSPATH.

Я вижу, что в моем случае работает автосериализация PDX.Поэтому я выполняю запрос на создание / обновление.Но @type не обрабатывается, как я ожидал.

У меня есть версия gemfire 8.2.0

Мое единственное решение - реализовать PdxSerializable?

Базовый примериз того, что я делаю:

Мой объект Person имеет поля: id, name.Он расположен по адресу com.package.

  1. Я сохраняю свой объект с помощью собственного клиента gemfire.
  2. Я выполняю Http PUT запрос /gemfire-api/v1/{region}/{key} с полезной нагрузкой: '{ "@type":"com.package.Person", "id":"someId", "name":"name" }'
  3. Я пытаюсь получить его с помощью HTTP GET - успешно
  4. Я пытаюсь получить его с помощью собственного клиента gemfire и привести его к объекту Person с getObject() - у меня ошибка
...