WebSphere Enterprise Service Bus, Version 6.2.0 Systèmes d'exploitation: AIX, HP-UX, i5/OS, Linux, Solaris, Windows


Création de plusieurs instances d'objets métier imbriqués

La fonction setWithCreate permet de créer des instances multiples d'un objet métier imbriqué.

Avant de commencer

L'exemple suivant représente un fichier XSD contenant des objets imbriqués se trouvant un niveau (enfant) et deux niveaux (petit-enfant) sous l'objet métier supérieur (parent) :
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:complexType name="Parent">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="child" type="Child" maxOccurs="5"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Child">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="grandChild" type="GrandChild"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="GrandChild">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>
  
</xsd:schema>
Vous remarquerez que l'objet parent peut avoir jusqu'à cinq objets enfant, comme l'indique la valeur maxOccurs.

Pourquoi et quand exécuter cette tâche

Vous pouvez créer une liste avec une règle plus rigoureuse ne permettant pas que des séquences soient absentes d'un tableau. Vous pouvez utiliser la méthode setWithGet et, en même temps, préciser les données qui apparaîtront dans un élément de l'index de liste particulier :
DataObject parent = ...
parent.setString("child[3]/grandchild/name", "Bob");
Dans cet exemple, vous obtenez un tableau de taille trois, mais les valeurs des éléments de l'index de liste child[1] et child[2] ne sont pas définies. Vous voudrez peut-être leur attribuer la valeur null ou la valeur d'une donnée associée. Dans le scénario ci-dessus, une exception sera émise car la valeur des deux premiers éléments du tableau n'est pas définie.
Vous pouvez remédier à cette situation en définissant ces valeurs dans l'index de la liste. Si l'élément de l'index fait référence à un élément existant du tableau et que la valeur de cet élément n'est pas null (c'est-à-dire qu'il contient des données), celui-ci sera utilisé. Si sa valeur est null, il sera créé puis utilisé. Si l'index de la liste est plus grand que la taille de celle-ci, une nouvelle valeur sera créée et ajoutée. L'exemple suivant illustre le fonctionnement dans une liste de taille deux, où l'élément child[1] est désigné comme null et l'élément child[2] contient des données :
DataObject parent = ...
// child[1] = null
// child[2] = existing Child
// Ce code fonctionne car l'élément child[1] est null et sera créé.
parent.setString("child[1]/grandchild/name", "Bob");

// Ce code fonctionne car l'élément child[2] existe et sera utilisé.
parent.setString("child[2]/grandchild/name", "Dan");

// Ce code fonctionne car la liste enfant est de taille 2 et l'ajout
// d'un élément de liste supplémentaire va accroître la taille de la liste.
parent.setString("child[3]/grandchild/name", "Sam");

Résultats

Vous avez remplacé les valeurs des deux éléments existants et ajouté un troisième à l'index de la liste. Néanmoins, si vous ajoutez un autre élément qui n'est pas de taille quatre, ou qui est plus grand que la taille précisée dans maxOccurs, une exception sera émise. La règle plus rigoureuse de cette méthode est démontrée dans l'exemple suivant.
Remarque : Le code qui suit est ajouté au code utilisé ci-dessus :
// Ce code entraîne une exception car la liste est de taille 3
// et vous n'avez pas créé d'élément pour augmenter la taille à 4.
parent.setString("child[5]/grandchild/name", "Billy");

task Rubrique relative à une tâche

Conditions d'utilisation | Commentaires en retour


Icône d'horodatage Dernière mise à jour: 07 juillet 2010


http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/topic//com.ibm.websphere.wesb620.doc/doc/cpro_multipleinstances.html
Copyright IBM Corporation 2005, 2010. All Rights Reserved.
Ce centre d'information est mis en service par la technologie Eclipse (http://www.eclipse.org).