Согласованность: изящная навигация по пути POF с потенциальными нулевыми элементами - PullRequest
0 голосов
/ 14 октября 2010

В POF-сериализованных объектах .NET у меня есть класс A, содержащий класс B, а у класса B есть атрибут X, который я хочу извлечь и использовать в фильтре.

Я могу использовать SimplePofPathдля навигации по потоку POF от A к B и захвата X. Это работает хорошо, за исключением случаев, когда A.B == null.

Когда у A нет экземпляра B, где ожидается, SimplePofPath завершается неудачно с сообщением

Метод getChild () не может быть вызван для экземпляра SimplePofValue.

Вместо этого я хотел бы IPofNavigator, который делает что-то более изящное, чем генерирует исключение, когдаон не может пройти путь, потому что я сериализировал null в поле.Это может быть, скажем, возвращение предоставленного пользователем «запасного» значения.

Существует ли такая реализация?Если нет, то как мне начать самостоятельно расширять AbstractPofPath?Я взглянул на этот пользовательский навигатор, работающий с содержащимися коллекциями, но не могу понять, как начать реализацию navigate().

1 Ответ

0 голосов
/ 15 октября 2010

Я смог сделать это, расширив AbstractPofPath и реализовав рекурсивный метод navigate(PofValue, int), очень похожий на связанный. Я также вставил его в C # и предоставил соответствующие конфигурации user-type в клиентских и кластерных файлах конфигурации .NET.

Перед рекурсивным вызовом метод проверяет, имеет ли его параметр typeID, равный PofConstants.V_REFERENCE_NULL, и если это так, он просто возвращает свой параметр вместо рекурсивного.

Последние несколько минут тестирования показывают, что этот подход поддерживает поведение, приемлемое для Filter и Extractor объектов.

Дальнейшие мысли: Если бы у меня были Java-эквиваленты моих классов .NET, я мог бы использовать ChainedExtractor s. Однако кластер хочет знать, как десериализовать все в цепочке экстракторов;)

...