Sequence がある DataObject に対して作業をする場合、データが設定される順序を知ることが重要です。そのため、値が設定される順序に注意する必要があります。
順序付けされていない DataObject では、ランダムな順序での設定アクセスができます。これは、すべてのキーが同じ値に設定される Map のように機能します。キーが設定された順序は問題ではなく、マップ内のデータは同じものであり、XML へも完全に同じようにシリアライズされます。
DataObject が順序付けされている場合、データが設定された順序は、List へのデータの追加と同様に、Sequence 内に記録されます。これは、データへの 2 とおりのアクセス方法を提供します。名前/値のペアによるアクセス (DataObject API) と、設定された順序によるアクセス (Sequence API) です。DataObject set(...) API または Sequence add(...) API を使用して、構造を保存できます。この順序付けは、XML がシリアライズされる方法に影響を及ぼします。
例として、以下の <all/> タグを考えてみます。set メソッドが以下の順序で呼び出された場合、シリアライズされると、以下の XML が生成されます。
DataObject all = ... all.set("element1", "foo"); all.set("element2", "bar"); <?xml version="1.0" encoding="UTF-8"?> <p:All xsi:type="p:All" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:p="http://All"> <element1>foo</element1> <element2>bar</element2> </p:All>
代わりに、set メソッドが逆の順序で呼び出された場合は、このビジネス・オブジェクトがシリアライズされると、以下の XML が生成されます。
DataObject all = ... all.set("element2", "bar"); all.set("element1", "foo"); <?xml version="1.0" encoding="UTF-8"?> <p:All xsi:type="p:All" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:p="http://All"> <element2>bar</element2> <element1>foo</element1> </p:All>
Sequence の順序を変更する必要がある場合、Sequence クラスにはユーザーが Sequence の順序を変更できるよう、基本的な add、remove、および move メソッドがあります。