La fonction setWithCreate permet de créer des instances multiples d'un objet métier imbriqué.
<?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.
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.
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");
// 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");