2010-10-14 7 views
0

Dans les objets .NET sérialisés POF, j'ai la classe A contenant la classe B et la classe B possède un attribut X que je veux extraire et utiliser dans un filtre.Cohérence: Navigation gracieuse d'un chemin POF avec des éléments NULL potentiels

Je peux utiliser un SimplePofPath pour naviguer dans le flux POF de A à B et saisir X. Cela fonctionne bien, sauf quand A.B == null.

Quand A ne pas une instance de B où prévu, le SimplePofPath échoue avec le message

méthode getChild() ne peut pas être invoquée sur l'instance SimplePofValue.

Au lieu de cela, je voudrais un IPofNavigator qui fait quelque chose de plus gracieux que jeter une exception quand il ne peut pas traverser son chemin parce que je sérialisé null dans un champ. Cela pourrait, par exemple, renvoyer une valeur "fallback" fournie par l'utilisateur.

Une telle implémentation existe-t-elle? Si non, comment pourrais-je commencer à étendre AbstractPofPath par moi-même? J'ai jeté un oeil à this navigateur personnalisé traitant des collections contenues, mais je ne peux pas comprendre comment commencer à implémenter navigate().

Répondre

0

J'ai été capable de le faire en étendant AbstractPofPath et en implémentant une méthode récursive navigate(PofValue, int) semblable à celle liée. Je l'ai également écrasé en C# et fourni des configurations user-type correspondantes dans le client .NET et les fichiers de configuration du cluster.

Avant l'appel récursif, la méthode vérifie si son paramètre a un typeID égal à PofConstants.V_REFERENCE_NULL, et si c'est le cas, elle renvoie simplement son paramètre au lieu de récursif.

Les dernières minutes de test montrent que cette approche maintient un comportement acceptable pour les objets Filter et Extractor.

Autres pensées: Si je devais équivalents Java de mes classes .NET, je pourrais utiliser ChainedExtractor s. Cependant, le cluster veut savoir comment désérialiser tout dans la chaîne des extracteurs;)

+0

Aimerais voir le code source! – Shannon