I have a PEPService with a child LeafNode.
When I publish something to the leaf node, the subscribers of PEPService did not receive the event notification.
Debugging the code, I saw the leafNode.getParent() was returning null. This because the Node.getParent() method only returns the parent if the node.parentIdentifier attribute is not null.
Looking where it sets the parentIdentifier, I saw it was only in the constructor, where the parent is null for leafNodes. The parent is actually set in Node.changeParent().
However in Node.changeParent() only the node.parent attribute is set. The node.parentIdentifier is not set.
The fix I did was to set the parentIdentifier in Node.changeParent() as well.
The code
protected void changeParent(CollectionNode newParent) {
if (parent == newParent) {
return;
}
if (parent != null) {
// Remove this node from the current parent node
parent.removeChildNode(this);
parentIdentifier = null;
}
// Set the new parent of this node
parent = newParent;
if (parent != null) {
// Add this node to the new parent node
parent.addChildNode(this);
parentIdentifier = parent.getUniqueIdentifier();
}
if (savedToDB) {
PubSubPersistenceProviderManager.getInstance().getProvider().updateNode(this);
}
}