Vous pouvez envoyer et recevoir des messages SOAP qui incluent des
pièces jointes binaires déclarées comme composants dans votre interface de service.
Dans un message SOAP à plusieurs parties MIME, le corps SOAP constitue la première partie du message et les pièces jointes sont dans les parties suivantes.
Quel est l'avantage d'envoyer ou de recevoir une pièce jointe référencée dans un message SOAP ? Les données binaires qui constituent la pièce jointe (dont la taille est
souvent importante) sont conservées séparément du corps du message SOAP
pour qu'elles n'aient pas besoin d'être analysées comme des données XML. Le
traitement est donc plus efficace que si les données binaires étaient
conservées dans un élément XML.
Types de messages SOAP avec pièces jointes référencées
A partir de la Version 7.0.0.3 de
IBM® Integration Designer, vous avez le choix du mode de génération du message SOAP :
- Messages compatibles WS-I
L'exécution peut générer des messages SOAP conformes à WS-I Attachments Profile Version 1.0 et à WS-I Basic Profile Version 1.1. Dans un message SOAP conforme à ces profils, une seule partie du message est liée au corps SOAP ; pour celles liées en tant que pièces jointes, on utilise le codage des portions content-id (comme décrit dans WS-I Attachments Profile Version 1.0) pour lier la pièce jointe à la partie message.
- Messages non compatibles WS-I
L'exécution peut générer des messages SOAP non conformes aux profils WS-I, mais qui sont compatibles avec les messages générés dans la Version 7.0 ou 7.0.0.2 de IBM Integration Designer. Les messages SOAP utilisent des éléments de niveau supérieur nommés après la partie message avec un attribut href qui retient la pièce jointe content-id, mais le codage des portions content-id (comme décrit dans WS-I Attachments Profile Version 1.0) n'est pas utilisé.
Sélection de la compatibilité
WS-I pour les exportations de services Web
Utilisez
Integration Designer pour configurer une liaison d'exportation. Créez un module, ainsi que son interface et ses opérations associées. Créez ensuite une liaison de
service Web (JAX-WS). La page
Pièces jointes référencées affiche toutes les portions binaires de l'opération créée et vous sélectionnez les parties qui seront des pièces jointes.
Indiquez ensuite, sur la page Specify the WS-I AP 1.0 compliance (Spécifier la compatibilité WS-I AP 1.0) de Integration Designer, l'un des choix suivants :
Remarque : Seules les
portions de message de niveau supérieur (les éléments définis dans le type de port WSDL (WSDL portType) comme portions du message en entrée ou en sortie) dont le type est binaire (base64Binary ou hexBinary) peuvent être envoyées ou reçues comme pièces jointes référencées.
Pour obtenir des informations
détaillées, reportez-vous à la rubrique
"Utilisation des pièces jointes" du centre
de documentation de
Integration Designer.
Pour des messages compatibles WS-I, le content-ID qui est généré dans le message SOAP est la concaténation des éléments suivants :
- La valeur de l'attribut nom de l'élément wsdl:part référencé par mime:content
- Le caractère =
- Une valeur globalement unique, comme un UUID (identificateur unique universel)
- Le caractère @
- Un nom de domaine valide
Traitement entrant des pièces jointes référencées
Lorsqu'un client transmet un message
SOAP avec une pièce jointe à un composant SCA (Service Component Architecture), la
liaison d'exportation de service Web (JAX-WS) commence par supprimer cette pièce
jointe. Elle analyse ensuite la partie SOAP du message et crée un objet métier. Enfin, la
liaison définit le code binaire de la pièce jointe dans l'objet métier.
Figure 1. Mode de traitement d'un message SOAP compatible WS-I avec une pièce jointe référencée par la
liaison d'exportation de service Web (JAX-WS)
Accès aux métadonnées de pièce jointe dans un composant de flux de médiation
Comme illustré dans la Figure 1, lorsque des composants
accèdent à des pièces jointes référencées, les données des pièces jointes apparaissent
sous forme de tableau octal.
Chaque pièce jointe référencée d'un message SOAP contient
également un élément
attachments correspondant dans l'objet SMO. L'élément
attachments inclut le type de contenu de la pièce jointe et le chemin
d'accès à l'élément de corps de message dans lequel la pièce jointe est conservée.
Figure 2. Affichage des pièces jointes référencées dans l'objet SMO
Important : Le
chemin d'accès à l'élément de corps du message n'est pas automatiquement mis à jour si
le message est converti et la pièce jointe, déplacée. Vous pouvez utiliser un flux de
médiation pour mettre à jour l'élément attachments avec le nouveau
chemin d'accès (par exemple, dans le cadre de la conversion ou à l'aide d'un
configurateur d'élément de message distinct).
Pour plus d'informations sur la structure de l'objet SMO, voir "Rubriques connexes".
Mode de construction des messages SOAP sortant
Utilisez
Integration Designer pour configurer une liaison d'importation de service Web (JAX-WS) de sorte qu'elle appelle un
service Web externe.
La liaison d'importation est configurée avec un document WSDL qui décrit le service Web
à appeler et définit les portions du message qui doivent être transmises comme pièces
jointes.
Vous pouvez aussi préciser l'un des choix suivants sur la page
Specify the WS-I AP 1.0 compliance (Spécifier la compatibilité WS-I AP 1.0) de Integration Designer :- Use WS-I AP 1.0 compliant SOAP message (Utiliser un message SOAP compatible WS-I AP 1.0)
Si vous sélectionnez cette option, indiquez aussi quelle partie du message doit être liée au corps SOAP ; toutes les autres sont liées à des pièces jointes ou à des en-têtes. Les messages envoyés par le lien n'inclut pas d'éléments du corps SOAP faisant référence aux pièces jointes ; la relation est exprimée au moyen de l'ID de contenu des pièces jointes incluant le nom de la partie du message.
- Use non WS-I AP 1.0 compliant SOAP message (Utiliser un message SOAP non compatible WS-I AP 1.0)
Si vous sélectionnez cette option, qui est celle par défaut, la première partie du message est liée au corps SOAP ; toutes les autres sont liées aux pièces jointes et en-têtes. Les messages envoyés par la liaison incluent un ou plusieurs éléments du corps SOAP faisant référence aux pièces jointes au moyen d'un attribut href.
Remarque : La portion qui représente une pièce jointe, telle que définie dans le
WSDL, doit être de type simple (base64Binary ou hexBinary). Si une portion est définie par un type complexe (complexType), celle-ci ne peut pas être liée comme pièce jointe.
Traitement sortant des pièces jointes référencées
La liaison d'importation utilise les informations dans le SMO pour déterminer comment les portions de messages binaires de niveau supérieur sont envoyées comme pièces jointes.
Figure 3. Mode d'accès à la pièce jointe référencée de l'objet SMO pour créer le message
SOAP
L'élément attachments
n'est présent dans l'objet SMO que si un composant de flux de médiation est connecté
directement à l'importation ou l'exportation ; il n'est pas transmis entre les autres
types de composant. Si les valeurs sont requises dans un module contenant
d'autres types de composants, un composant de flux de médiation doit être
utilisé pour copier ces valeurs dans un emplacement où elles sont accessibles
dans le module et un autre composant de flux de médiation doit être utilisé
pour définir les valeurs correctes avant un appel sortant par l'intermédiaire
d'une importation de service Web.
La liaison utilise une combinaison des conditions suivantes pour déterminer comment (ou si) le message est envoyé :
- s'il existe une liaison MIME WSDL pour la portion du message binaire de niveau supérieur et, si tel est le cas, comment le type de contenu est défini,
- s'il existe un élément attachments dans le SMO dont la valeur bodyPath fait référence à une portion binaire de haut niveau,
Mode de création des pièces jointes quand un élément attachments se trouve dans le SMO.
Le tableau suivant montre comment une pièce jointe est créée et envoyée si le SMO contient un élément
attachments avec un élément
bodyPath correspondant une partie du nom du message :
Tableau 1. Mode de génération de la pièce jointe| Statut de la liaison MIME WSDL pour la portion de message binaire de haut niveau |
Mode de création et d'envoi du message |
Présent avec l'une des situations suivantes : - Aucun type de contenu défini pour la portion du message
- Multiple types de contenu définis
- Type de contenu avec caractère générique défini
|
La portion du message est envoyée en tant que pièce jointe. Content-Id est définie à la valeur de l'élément attachments le cas échéant ; sinon, une valeur est générée.
Content-Type est défini à la valeur de l'élément attachments le cas échéant ; sinon, il est défini à application/octet-stream.
|
| Présent avec du contenu sans caractère générique pour la portion du message |
La portion du message est envoyée en tant que pièce jointe. Content-Id est définie à la valeur de l'élément attachments le cas échéant ; sinon, une valeur est générée.
Content-Type est défini à la valeur de l'élément attachments le cas échéant ; sinon, il est défini au type défini dans l'élément de contenu MIME WSDL.
|
| Non présent |
La portion du message est envoyée en tant que pièce jointe. Content-Id est définie à la valeur de l'élément attachments le cas échéant ; sinon, une valeur est générée.
Content-Type est défini à la valeur de l'élément attachments le cas échéant ; sinon, il est défini à application/octet-stream.
Remarque : L'envoi de portions de messages en tant que pièces jointes quand elles ne sont pas définies comme telles dans le langage WSDL peut empêcher la conformité avec WS-I Attachments Profile 1.0 et doit donc être si possible évité.
|
Mode de création des pièces jointes quand aucun élément attachments ne se trouve dans le SMO
Le tableau suivant montre comment une pièce jointe est créée et envoyée si le SMO ne contient pas d'élément
attachments avec un élément
bodyPath correspondant à une partie du nom du message :
Tableau 2. Mode de génération de la pièce jointe | Statut de la liaison MIME WSDL pour la portion de message binaire de haut niveau |
Mode de création et d'envoi du message |
Présent avec l'une des situations suivantes : - Aucun type de contenu défini pour la portion du message
- Multiple types de contenu définis
- Type de contenu avec caractère générique défini
|
La portion du message est envoyée en tant que pièce jointe. Content-Id est généré.
Content-Type est défini à application/octet-stream.
|
| Présent avec du contenu sans caractère générique pour la portion du message |
La portion du message est envoyée en tant que pièce jointe. Content-Id est généré.
Content-Type est défini au type
défini dans l'élément de contenu MIME WSDL.
|
| Non présent |
La portion du Message n'est pas envoyée en tant que pièce jointe. |
Important : Comme décrit dans la
"représentation XML de
l'objet SMO," la primitive de médiation de mappage convertit
les messages à l'aide d'une transformation XSLT 1.0. La transformation agit sur
une sérialisation XML de l'objet SMO. La primitive de médiation de Mappage
permet de spécifier la racine de la sérialisation et l'élément racine
du document XML reflète cette racine.
Lorsque vous envoyez des messages SOAP comportant des pièces jointes, l'élément racine choisi
détermine le mode de propagation des pièces jointes.
- Si vous utilisez "/body" comme racine de la mappe XML, toutes les pièces jointes
sont propagées dans la mappe par défaut.
- Si vous utilisez "/" comme racine de la mappe, vous pouvez
contrôler la propagation des pièces jointes.