Start · Sprachen · PHP · Referenz · Yar_Client_Packager_Exception

Yar_Client_Packager_Exception

Klasse

Wird ausgelöst, wenn beim Serialisieren/Deserialisieren (Packaging) von Daten im Yar-RPC-Client ein Fehler auftritt.

seit PHP 1.0.0 Kategorie: error

Signatur

class Yar_Client_Packager_Exception extends Yar_Client_Exception

Beschreibung

Yar_Client_Packager_Exception ist eine Ausnahme-Klasse aus der PHP-Erweiterung Yar (Yet Another RPC Framework). Sie wird geworfen, wenn der Yar-Client beim Verpacken (Serialisieren) der Anfragedaten oder beim Entpacken (Deserialisieren) der Antwortdaten auf einen Fehler stößt.

Yar unterstützt verschiedene Serialisierungsformate (z. B. msgpack, json, php). Wenn ein gewählter Packager nicht verfügbar ist, die Daten ein nicht serialisierbares Format besitzen oder die Antwort nicht korrekt deserialisiert werden kann, wird diese Exception geworfen.

Sie erbt von Yar_Client_Exception und damit transitiv von Yar_Exception und der Standard-PHP-Klasse Exception. Im Fehlerbehandlungs-Code sollte man daher gezielt auf Yar_Client_Packager_Exception fangen, um Packaging-Fehler von anderen Yar-Fehlern (z. B. Netzwerkfehlern) zu unterscheiden.

Typische Ursachen sind: ein nicht installierter msgpack-Packager, inkompatible Packager-Konfiguration zwischen Client und Server, oder der Versuch, nicht serialisierbare Werte (z. B. Ressourcen) zu übertragen.

Beispiele

Packaging-Fehler gezielt abfangen

<?php
try {
    $client = new Yar_Client('http://example.com/rpc_server.php');
    // Packager auf msgpack setzen (muss serverseitig ebenfalls unterstützt werden)
    $client->SetOpt(YAR_OPT_PACKAGER, 'msgpack');
    $result = $client->add(1, 2);
    echo "Ergebnis: " . $result;
} catch (Yar_Client_Packager_Exception $e) {
    // Spezifischer Fehler beim Serialisieren/Deserialisieren
    echo "Packaging-Fehler: " . $e->getMessage() . PHP_EOL;
    echo "Fehlercode: " . $e->getCode() . PHP_EOL;
} catch (Yar_Client_Exception $e) {
    // Andere Yar-Client-Fehler (z. B. Verbindungsfehler)
    echo "Yar-Client-Fehler: " . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo "Allgemeiner Fehler: " . $e->getMessage() . PHP_EOL;
}
Packaging-Fehler: packager msgpack is not supported

Fallback auf Standard-Packager bei Packaging-Fehler

<?php
function callRpc(string $method, array $args, string $packager = 'msgpack'): mixed
{
    $client = new Yar_Client('http://example.com/rpc_server.php');
    try {
        $client->SetOpt(YAR_OPT_PACKAGER, $packager);
        return $client->$method(...$args);
    } catch (Yar_Client_Packager_Exception $e) {
        if ($packager !== 'php') {
            // Fallback auf den Standard-PHP-Packager
            error_log('Packaging fehlgeschlagen mit ' . $packager . ', Fallback auf php: ' . $e->getMessage());
            return callRpc($method, $args, 'php');
        }
        throw $e;
    }
}

try {
    $result = callRpc('multiply', [3, 4]);
    echo "Ergebnis: " . $result;
} catch (Yar_Client_Packager_Exception $e) {
    echo "Auch Fallback-Packager fehlgeschlagen: " . $e->getMessage();
}
Ergebnis: 12

// Wichtig · Fallstricke

Voraussetzung: Die Yar-Erweiterung muss in PHP installiert und aktiviert sein (pecl install yar). Für msgpack-Unterstützung ist zusätzlich die msgpack-Erweiterung erforderlich.

Fehlercode: Der Fehlercode (getCode()) entspricht den Yar-internen Fehlerkonstanten, z. B. YAR_ERR_PACKAGER. Dies kann zur programmatischen Unterscheidung von Fehlerursachen genutzt werden.

Client-Server-Kompatibilität: Client und Server müssen denselben Packager verwenden, da die serialisierten Daten sonst nicht interpretiert werden können. Eine Inkompatibilität führt unweigerlich zu dieser Exception.