6.2 DOMパーサに関する注意事項
DOMパーサに関する注意事項を次の表に示します。
項番 |
注意事項 |
---|---|
1 |
マルチスレッドプログラミングをする場合,DocumentBuilderFactoryクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のDocumentBuilderFactoryインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次のどちらかの方法を使用してください。
|
2 |
マルチスレッドプログラミングをする場合,DocumentBuilderクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のDocumentBuilderインスタンスを使用してはいけません。スレッド間の競合を避けるため,次の方法を使用してください。
|
3 |
マルチスレッドプログラミングをする場合,DOMツリーはスレッドセーフではありません。したがって,parseメソッドによって生成された同一の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メソッドを次のように使用してください。
|
8 |
BOM(Byte Order Mark)付きのUTF-16で保存されたXML文書をparse(InputSource is)メソッドで解析する場合,InputSourceにsetEncodingメソッドを適用するときは引数に"UTF-16"を指定してください。 |
9 |
内部エンティティを定義する文字列中に,477文字以上の要素名が含まれていると,java.lang.IndexOutOfBoundsException例外が発生する場合があります。 |