WSIFOperation - Kontext
Obwohl WSDL keinen Kontext definiert, muss bei bestimmten Verwendungen von Web Services Invocation Framework (WSIF) ein Kontext an den Port, der den Service aufruft, übergeben werden.
Für einen SOAP-over-HTTP-Port können beispielsweise ein HTTP-Benutzername und ein Kennwort erforderlich sein. Diese Informationen sind spezifisch für den Aufruf, jedoch nicht für einen Parameter des Service. Im Allgemeinen wird Kontext als Gruppe von Name/Wert-Paaren definiert. Da Web-Services jedoch dazu neigen, die Datentypen mit XML-Schematypen zu definieren, stellt WSIF die Name/Wert-Paare des Kontexts auf dieselbe Weise dar wie die Klasse WSIFMessage, d. h. über eine Gruppe benannter Komponenten, von denen jede einer Instanz eines XML-Schematyps entspricht.
Kontextinformationen können mit den Methoden setContext und getContext der Schnittstelle WSIFOperation an die Bindung übergeben werden. Die Portimplementierung kann diesen Kontext verwenden, um z. B. einen SOAP-Header zu aktualisieren. Für die Verwendung des Kontextes durch einen Port gibt es keine Definition.
Der Parameter der Methoden setContext und getContext ist ein WSIFMessage-Interface mit benannten Teilen, die die Kontextinformationen definieren. Die Klasse WSIFConstants definiert Konstanten für die Komponentennamen, die in einem WSIFMessage-Interface des Kontextes festgelegt werden können.
Das folgende Codefragment zeigt, wie Benutzername und Kennwort für die HTTP-Basisauthentifizierung festgelegt werden:
// Einen Header für die Basisauthentifizierung festlegen
WSIFMessage headers = new WSIFDefaultMessage();
headers.setObjectPart( WSIFConstants.CONTEXT_HTTP_USER, "Benutzername" );
headers.setObjectPart( WSIFConstants.CONTEXT_HTTP_PSWD, "Kennwort" );
operation.setContext( headers );
Das Interface WSIFOperation ignoriert Kontextteile, die es nicht unterstützt. Der vorherige Code beispielsweise wird vom WSIF-Java™-Provider ignoriert.
Die WSIFConstants-Klasse umfasst die folgenden Konstanten, die für Namen von Kontextkomponenten verwendet werden können:
- CONTEXT_HTTP_USER
- CONTEXT_HTTP_PSWD
- CONTEXT_SOAP_HEADERS
Die HTTP-Header-Werte müssen vom Typ String und der SOAP-Header-Wert vom Typ java.util.List sein, der wiederum Einträge vom Typ org.w3c.dom.Element enthalten muss.