Start · Sprachen · PHP · Referenz · SoapFault

SoapFault

Klasse

Repräsentiert einen SOAP-Fehler und wird beim Auftreten von SOAP-Fehlern ausgelöst oder manuell erzeugt.

seit PHP 5.0.0 Kategorie: http

Signatur

class SoapFault extends RuntimeException

Beschreibung

SoapFault ist eine spezialisierte Exception-Klasse, die SOAP-Fehler (Fault-Nachrichten gemäß SOAP-Spezifikation) kapselt. Sie wird automatisch vom SoapClient geworfen, wenn der Server einen SOAP Fault zurückliefert, und kann auch manuell im SoapServer-Kontext geworfen werden, um dem Client einen strukturierten Fehler zu melden.

Ein SOAP Fault enthält immer einen Faultcode und eine Faultstring-Nachricht. Optional können auch ein Faultactor (wer den Fehler verursacht hat), Detail-Informationen sowie der Fehler-Namensraum und Header-Fehler mitgeliefert werden. Diese Felder entsprechen den SOAP-Spezifikationselementen für Fault-Nachrichten.

Bei der serverseitigen Nutzung sollte man innerhalb des Handlers eines SoapServer-Objekts eine SoapFault-Exception werfen, die dann automatisch in eine korrekte SOAP-Fault-Antwort umgewandelt wird. Clientseitig werden eingehende Fault-Antworten automatisch in SoapFault-Exceptions umgewandelt, sofern der Client im normalen (nicht WSDL-losen) Modus betrieben wird.

Da SoapFault von RuntimeException erbt, kann sie mit dem Standard-try/catch-Mechanismus behandelt werden. Öffentliche Eigenschaften wie faultcode, faultstring, faultactor und detail geben direkten Zugriff auf die SOAP-Fault-Felder.

Parameter

Name Typ Default Beschreibung
$faultcode Pflicht string Der SOAP-Fehlercode, z. B. 'Client', 'Server', 'VersionMismatch' oder 'MustUnderstand' (bei SOAP 1.1) bzw. entsprechende Werte bei SOAP 1.2.
$faultstring Pflicht string Eine menschenlesbare Fehlermeldung, die den SOAP-Fehler beschreibt. Entspricht dem <faultstring>-Element in der SOAP-Antwort.
$faultactor string|null null Optionaler URI, der angibt, welcher Akteur (Node) im SOAP-Verarbeitungspfad den Fehler verursacht hat. Entspricht dem <faultactor>-Element.
$detail mixed null Optionale applikationsspezifische Fehlerdetails. Kann ein String, ein Objekt oder ein Array sein und wird in das <detail>-Element der SOAP-Fault-Antwort eingebettet.
$faultname string|null null Ein optionaler Name für den Fehler, der bei der Zuordnung zu Fault-Definitionen in einer WSDL-Datei verwendet wird.
$headerfault mixed null Optionale Fehlerinformationen, die in einem SOAP-Header-Fault zurückgegeben werden sollen, wenn der Fehler beim Verarbeiten eines SOAP-Headers auftritt.

Beispiele

SoapFault auf der Serverseite werfen

<?php
// Serverseitiger Handler, der bei einem Fehler einen SOAP Fault sendet
function getUserData(int $userId): array
{
    if ($userId <= 0) {
        throw new SoapFault(
            'Client',
            'Ungültige Benutzer-ID: Die ID muss größer als 0 sein.',
            null,
            ['invalidValue' => $userId]
        );
    }
    // ... Daten laden und zurückgeben
    return ['id' => $userId, 'name' => 'Max Mustermann'];
}

$server = new SoapServer('service.wsdl');
$server->addFunction('getUserData');
$server->handle();
?>

SoapFault auf der Clientseite abfangen

<?php
$client = new SoapClient('https://example.com/service.wsdl', [
    'exceptions' => true,
]);

try {
    $result = $client->getUserData(-5);
    print_r($result);
} catch (SoapFault $e) {
    echo 'SOAP-Fehlercode:    ' . $e->faultcode   . PHP_EOL;
    echo 'SOAP-Fehlermeldung: ' . $e->faultstring . PHP_EOL;

    if (!empty($e->detail)) {
        echo 'Detail: ';
        print_r($e->detail);
    }
}
?>
SOAP-Fehlercode: Client SOAP-Fehlermeldung: Ungültige Benutzer-ID: Die ID muss größer als 0 sein. Detail: stdClass Object ( [invalidValue] => -5 )

SoapFault manuell erzeugen und Eigenschaften auslesen

<?php
$fault = new SoapFault(
    'Server',
    'Interner Serverfehler',
    'urn:beispiel:servicenode',
    'Datenbankverbindung fehlgeschlagen'
);

echo $fault->faultcode   . PHP_EOL; // Server
echo $fault->faultstring . PHP_EOL; // Interner Serverfehler
echo $fault->faultactor  . PHP_EOL; // urn:beispiel:servicenode
echo $fault->detail      . PHP_EOL; // Datenbankverbindung fehlgeschlagen

// getMessage() ist durch RuntimeException verfügbar
echo $fault->getMessage() . PHP_EOL; // Interner Serverfehler
?>
Server Interner Serverfehler urn:beispiel:servicenode Datenbankverbindung fehlgeschlagen Interner Serverfehler

// Wichtig · Fallstricke

Exceptions-Modus beachten: SoapFault wird vom SoapClient nur dann geworfen, wenn die Option 'exceptions' => true (Standard) gesetzt ist. Bei 'exceptions' => false gibt der Client stattdessen ein SoapFault-Objekt als Rückgabewert zurück; dies sollte mit is_soap_fault() geprüft werden.

Öffentliche Eigenschaften: Die Eigenschaften faultcode, faultstring, faultactor und detail sind öffentlich und direkt zugänglich. faultstring wird zusätzlich als Exception-Message gesetzt, sodass getMessage() denselben Wert liefert.

SOAP 1.1 vs. 1.2: Die erlaubten Werte für faultcode unterscheiden sich je nach SOAP-Version. Bei SOAP 1.2 heißen die Codes z. B. 'Sender' und 'Receiver' statt 'Client' und 'Server'.

Keine sensiblen Daten im Detail: Das detail-Feld wird im Klartext an den Client übertragen. Es sollten keine internen Stack-Traces, Datenbankstrukturdetails oder andere sicherheitsrelevante Informationen darin platziert werden.