Signatur
Beschreibung
ZookeeperMarshallingException ist eine spezialisierte Ausnahme der ZooKeeper-PHP-Erweiterung, die geworfen wird, wenn beim Serialisieren (Marshalling) oder Deserialisieren (Unmarshalling) von Daten ein Fehler auftritt. Sie ist eine Unterklasse von ZookeeperException und damit Teil der ZooKeeper-Fehlerhierarchie.
Marshalling-Fehler können auftreten, wenn Daten, die an ZooKeeper übergeben oder von ZooKeeper empfangen werden, nicht korrekt in das erwartete Format konvertiert werden können. Dies betrifft z. B. das Lesen oder Schreiben von Knoten-Daten (ZNodes) sowie ACL-Strukturen.
In der Praxis sollte diese Ausnahme zusammen mit anderen ZooKeeper-Ausnahmen in einem try/catch-Block abgefangen werden, um robuste ZooKeeper-Interaktionen zu gewährleisten. Da sie von ZookeeperException erbt, kann sie auch gemeinsam mit anderen spezifischen ZooKeeper-Fehlern behandelt werden.
- Geworfen bei ungültigen oder nicht serialisierbaren Datenstrukturen.
- Kann bei lesenden und schreibenden ZooKeeper-Operationen auftreten.
- Erbt alle Methoden von
ExceptionundZookeeperException.
Beispiele
Abfangen von ZookeeperMarshallingException beim Lesen eines ZNodes
<?php
try {
$zk = new Zookeeper('localhost:2181');
$data = $zk->get('/mein/pfad');
echo "Daten: " . $data;
} catch (ZookeeperMarshallingException $e) {
echo "Marshalling-Fehler: " . $e->getMessage() . PHP_EOL;
echo "Code: " . $e->getCode() . PHP_EOL;
} catch (ZookeeperException $e) {
echo "Allgemeiner ZooKeeper-Fehler: " . $e->getMessage() . PHP_EOL;
}
Hierarchisches Abfangen mehrerer ZooKeeper-Ausnahmen
<?php
function schreibeZNode(Zookeeper $zk, string $pfad, string $daten): void {
try {
$zk->set($pfad, $daten);
echo "Daten erfolgreich geschrieben." . PHP_EOL;
} catch (ZookeeperMarshallingException $e) {
// Spezifischer Marshalling-Fehler
error_log('ZooKeeper Marshalling-Fehler [' . $e->getCode() . ']: ' . $e->getMessage());
throw $e;
} catch (ZookeeperConnectionException $e) {
// Verbindungsfehler separat behandeln
error_log('ZooKeeper Verbindungsfehler: ' . $e->getMessage());
throw $e;
} catch (ZookeeperException $e) {
// Alle anderen ZooKeeper-Fehler
error_log('ZooKeeper Fehler: ' . $e->getMessage());
throw $e;
}
}
$zk = new Zookeeper('localhost:2181');
schreibeZNode($zk, '/test/knoten', 'Hallo Welt');
// Wichtig · Fallstricke
Hinweis zur Erweiterung: ZookeeperMarshallingException ist Teil der PHP-Erweiterung php-zookeeper, die separat installiert werden muss (z. B. über PECL: pecl install zookeeper). Die Klasse steht nicht in einem Standard-PHP-Install zur Verfügung.
Da es sich um eine interne Ausnahme der Erweiterung handelt, können die genauen Auslöser je nach eingesetzter Version der ZooKeeper-Bibliothek und der PHP-Erweiterung variieren. Es empfiehlt sich, stets sowohl ZookeeperMarshallingException als auch den übergeordneten ZookeeperException-Typ abzufangen, um alle Fehlerfälle zu behandeln.