Pour chaque mappage de données distinct entre un message SCA (Service Component Architecture) et un message de protocole HTTP, un gestionnaire de données ou une liaison de données HTTP doit être configuré. Les gestionnaires de données, qui fournissent une interface indépendante des liaisons pouvant être réutilisée avec différentes liaisons de transport, représentent l'approche recommandée ; les liaisons de données sont spécifiques à une liaison de transport particulière. Trois classes de liaisons de données propres à HTTP sont fournies ; vous pouvez également créer des liaisons ou des gestionnaires de données personnalisés.
<xsd:schema elementFormDefault="qualified" targetNamespace="http://com.ibm.websphere.http.data.bindings/schema" xmlns:tns="http://com.ibm.websphere.http.data.bindings/schema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="HTTPBaseBody"> <xsd:sequence/> </xsd:complexType> <xsd:complexType name="HTTPBytesBody"> <xsd:complexContent> <xsd:extension base="tns:HTTPBaseBody"> <xsd:sequence> <xsd:element name="value" type="xsd:hexBinary"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>
HTTPStreamDataBinding est la principale interface de gestion des messages HTTP personnalisés. Cette interface est conçue pour permettre le traitement de charges utiles importantes. Toutefois, pour que ce type d'implémentation fonctionne, cette liaison de données doit renvoyer les informations de contrôle et les en-têtes avant que le message ne soit inséré dans le flux.
Les méthodes et leur ordre d'exécution (indiqué ci-dessous) doivent être implémentés par la liaison de données personnalisée.
Vous devez appeler setDataObject(...) dans convertFromNativeData(...) pour définir la valeur de dataObject, qui est convertie du format de données natif en propriété privée "pDataObject".
public void setDataObject(DataObject dataObject) throws DataBindingException { pDataObject = dataObject; } public void setControlParameters(HTTPControl arg0) { this.pCtrl = arg0; } public void setHeaders(HTTPHeaders arg0) { this.pHeaders = arg0; } /* * Ajouter l'en-tête http "IsBusinessException" dans pHeaders. * Deux étapes : * 1. Supprimer d'abord tous les en-têtes portant le nom IsBusinessException (insensible à la casse). * Cette opération garantit qu'un seul en-tête est présent. * 2. Ajouter le nouvel en-tête "IsBusinessException" */ public void setBusinessException(boolean isBusinessException) { //Supprimer d'abord tous les en-têtes portant le nom IsBusinessException (insensible à la casse). //Cette opération garantit qu'un seul en-tête est présent. //Ajouter le nouvel en-tête "IsBusinessException", exemple de code : HTTPHeader header=HeadersFactory.eINSTANCE.createHTTPHeader(); header.setName("IsBusinessException"); header.setValue(Boolean.toString(isBusinessException)); this.pHeaders.getHeader().add(header); } public HTTPControl getControlParameters() { return pCtrl; } public HTTPHeaders getHeaders() { return pHeaders; } public DataObject getDataObject() throws DataBindingException { return pDataObject; } /* * Extraire l'en-tête "IsBusinessException" de pHeaders, renvoyer sa valeur booléenne */ public boolean isBusinessException() { String headerValue = getHeaderValue(pHeaders,"IsBusinessException"); boolean result=Boolean.parseBoolean(headerValue); return result; } public void convertToNativeData() throws DataBindingException { DataObject dataObject = getDataObject(); this.nativeData=realConvertWorkFromSDOToNativeData(dataObject); } public void convertFromNativeData(HTTPInputStream arg0){ //Lire les données de HTTPInpurtStream //Les convertir en objet de données (DataObject) DataObject dataobject=realConvertWorkFromNativeDataToSDO(arg0); setDataObject(dataobject); } public void write(HTTPOutputStream output) throws IOException { if (nativeData != null) output.write(nativeData); }