This topic applies only to the IBM Business Process Manager Advanced configuration.

Pièces jointes référencées : composants de message de niveau supérieur

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 :
  • 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, vous indiquez aussi quelle partie du message doit être liée au corps SOAP.
    Remarque : Cette option ne peut être utilisée que si le fichier WSDL correspondant est également compatible WS-I.

    Un fichier WSDL généré par Integration Designer Version 7.0.0.3 est compatibles avec WS-I. Toutefois, vous ne pouvez pas sélectionner cette option, si vous importez un fichier WSDL qui n'est pas compatible avec WS-I.

  • 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.

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)
Illustration représentant un message SOAP avec une pièce jointe référencée convertie en objet métier qui inclue la pièce jointe.

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
Illustration de la manière dont les données de la pièce jointe sont représenté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
Illustration d'une pièce jointe référencée dans un objet SMO et sa relation avec le message SOAP sortant

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.