Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus XML Processor ユーザーズガイド


6.2 DOMパーサに関する注意事項

DOMパーサに関する注意事項を次の表に示します。

表6‒6 DOMパーサに関する注意事項

項番

注意事項

1

マルチスレッドプログラミングをする場合,DocumentBuilderFactoryクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のDocumentBuilderFactoryインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次のどちらかの方法を使用してください。

  • 各スレッドに1つのDocumentBuilderFactoryインスタンスを持つ。

  • 各スレッドが排他的にDocumentBuilderFactoryインスタンスにアクセスする。

2

マルチスレッドプログラミングをする場合,DocumentBuilderクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のDocumentBuilderインスタンスを使用してはいけません。スレッド間の競合を避けるため,次の方法を使用してください。

  • 各スレッドに1つのDocumentBuilderインスタンスを持つ。

3

マルチスレッドプログラミングをする場合,DOMツリーはスレッドセーフではありません。したがって,parseメソッドによって生成された同一のDOMツリーに対して,複数のスレッドが同時にアクセスしてはいけません。更新系メソッドだけではなく,参照系メソッドでも同時にアクセスしてはいけません。スレッド間の競合を避けるため,次の方法を使用してください。

  • 各スレッドが排他的にDOMツリーにアクセスする。

4

マルチスレッドプログラミングをする場合,org.w3c.dom,org.w3c.dom.bootstrap,org.w3c.dom.lsパッケージで規定されたオブジェクトはスレッドセーフではありません。したがって,複数のスレッドが同時にこれらのオブジェクトにアクセスしてはいけません。更新系メソッドだけではなく,参照系メソッドでも同時にアクセスしてはいけません。スレッド間の競合を避けるため,次の方法を使用してください。

  • 各スレッドが排他的にこれらのオブジェクトにアクセスする。

5

DocumentインタフェースのcreateAttributeメソッドまたはcreateAttributeNSメソッドを使用してAttrノードを生成する場合は,AttrインタフェースのsetValueメソッドで値を設定してください。値が設定されていない状態で,NodeインタフェースのgetChildNodesメソッドでNodeListを取得した場合,そのNodeListの動作は保証しません。

6

NodeインタフェースのinsertBeforeメソッドやappendChildメソッドを使用して,すでにElementノードを持つDocumentノードに対して要素を追加する場合,NodeインタフェースのreplaceChildメソッドを使用した場合と同じ結果になります。

7

DocumentBuilderクラスの「InputStreamやInputSourceを引数とするparseメソッド」でエラーが発生したとき,エラーハンドラへ渡されるSAXParseExceptionにgetSystemIdメソッドを適用するとnullが返される場合があります。エラー発生元のシステム識別子を返すようにする場合は,parseメソッドを次のように使用してください。

  • parse(InputStream is, String systemId)メソッドで,システム識別子を引数systemIdに指定する。

  • parse(InputSource is)メソッドで,システム識別子を設定したInputSourceを引数isに指定する。

8

BOM(Byte Order Mark)付きのUTF-16で保存されたXML文書をparse(InputSource is)メソッドで解析する場合,InputSourceにsetEncodingメソッドを適用するときは引数に"UTF-16"を指定してください。

9

内部エンティティを定義する文字列中に,477文字以上の要素名が含まれていると,java.lang.IndexOutOfBoundsException例外が発生する場合があります。