JAX-RPC-Handler für den Zugriff auf SDO-Nachrichten implementieren
JAX-RPC-Handler werden während der Verarbeitung von Anforderungs- und Antwortnachrichten aufgerufen. Für Nachrichten, die mit dem Protokoll SOAP ausgetauscht werden, wird jedem JAX-RPC-Handler ein SOAP-spezifisches MessageContext-Objekt übergeben. Für andere Protokolle übergeben die IBM Web-Services zur Laufzeit ein MessageContext-Objekt, das eine SDO-Ansicht der Nachricht enthält.Service Data Objects (SDO) ist ein offener Standard, der Anwendungen ermöglicht, Daten aus anderen Datenquellen einheitlich als Datengraphen zu bearbeiten.
Wenn der JAX-RPC-Handler nur Nachrichtenkontexteigenschaften bearbeitet, muss er die jeweilige Unterklasse des übergebenen MessageContext-Objekts nicht kennen, weil die Methoden für Kontexteigenschaften von der Schnittstelle MessageContext selbst definiert werden. Wenn der Handler Informationen bearbeiten muss, die in der Nachricht enthalten sind, muss er so codiert sein, dass er die erforderlichen Unterklassen verarbeiten kann. Ihre JAX-RPC-Handler sollten prüfen, ob das MessageContext-Objekt eine Instanz der erforderlichen Unterklasse ist.
- Ein JAX-RPC-Client oder abgehender SIB-Aufruf ruft einen Service mit der EJB-Bindung auf.
- Ein JAX-RPC-Client wird mit einer nicht gebundenen WSDL entwickelt und einem Ziel im Service Integration Bus zugeordnet.
Die Klasse SDOMessageContext stellt Methoden für das Abrufen und Setzen der com.ibm.websphere.sdo.SDOMessage-Instanz für die zu bearbeitende Nachricht bereit. Das SDOMessage-Objekt enthält eine Methode für den Zugriff auf das SDO-DataGraph-Objekt, das den Nachrichteninhalt in Form von SDO-DataObjects enthält.
Ein JAX-RPC-Handler kann den Inhalt des SDO-DataGraph-Objekts ändern, aber das Format oder Schema der Nachricht nicht.
Im folgenden Beispiel sehen Sie Code, der für den Zugriff auf das SDO-DataGraph-Objekt aus dem MessageContext-Objekt in der Methode handleRequest eines JAX-RPC-Handler verwendet wird:
public boolean handleRequest(MessageContext messageContext) {
// MessageContext in SDOMessageContext konvertieren
if( messageContext instanceof SDOMessageContext) {
SDOMessageContext smc = (SDOMessageContext)messageContext;
// Nachricht abrufen
SDOMessage message = smc.getSDOMessage();
// Stammobjekt im SDO-DataGraph abrufen
DataGraph graph = message.getDataGraph();
DataObject content = graph.getRootObject();
// Nachrichteninhalt bearbeiten...
}
return true;
}