Hitachi

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


6.4 StAXに関する注意事項

StAXに関する注意事項を次の表に示します。

表6‒8 StAXに関する注意事項

項番

注意事項

1

StAX1.0仕様書には,動作が明確に定義されていないメソッドがあります。動作が明確に定義されていないメソッドの動作は,実装に依存します。引数を事前に確認するなどして,未規定の動作がないように対処してください。

動作が未規定の場合の動作例を次に示します。

例1:Javadocの例外欄に示されていない種別の例外が発生する。

引数にnullを指定した場合の動作が規定されていないため,NullPointerExceptionが発生する。

例2:不当な順番でメソッドを呼び出した場合の動作が規定されていないため,例外が発生する。

XMLStreamWriterインタフェースのwriteStartDocumentメソッドを呼び出す前にwriteEndDocumentメソッドを呼び出すと,XMLStreamExceptionが発生する。

例3:矛盾が生じるような引数でメソッド呼び出しをした場合,その引数が無視される。

XMLEventFactoryインタフェースのcreateStartElement, createEndElementメソッドに引数として指定する要素名が異なると,createEndElementメソッドに指定した引数が無視される。

2

XMLStreamReaderインタフェースのメソッドの一部は,Javadocでの説明と各APIの説明との間に差異があります。XML Processorは,APIの説明に従って動作します。

説明に差異のあるメソッドと差異の内容を次に示します。

IllegalStateException例外が発生しない(Javadocでは説明なし)
  • getCharacterEncodingScheme()

  • getEncoding ()

  • getVersion()

  • getNamespaceURI()

  • getNamespaceURI(String prefix)

  • getPrefix()

  • standaloneSet()

  • isStandalone()

Javadocとは異なる例外が発生する(JavadocではIllegalStateException例外が発生)
  • getElementText()

  • nextTag()

  • next()

3

[条件]

XMLInputFactoryのcreateXMLStreamReader(String systemId, InputStream stream)メソッドの引数systemIdと引数streamが異なるXML文書を指す場合です。

[標準仕様]

動作の規定なし。

[XML Processorの動作]

引数streamが有効になります。

ただし,引数streamがnullの場合は,引数systemIdが有効になります。

4

[条件]

XMLInputFactoryのcreateXMLStreamReader(String systemId, Reader reader)メソッドの引数systemIdと引数readerが異なるXML文書を指す場合です。

[標準仕様]

動作の規定なし。

[XML Processorの動作]

引数readerが有効になります。

ただし,引数readerがnullの場合は,引数systemIdが有効になります。

5

[条件]

XML文書の属性宣言と名前空間宣言に対して,javax.xml.stream.XMLStreamReaderインタフェースのgetEventType()メソッドを実行する場合です。

[標準仕様]

XMLStreamReaderのJavadocには,属性と名前空間のパースに関する説明がありますが,パースによってイベントが発生するかどうかについての明確な規定はありません。

[XML Processorの動作]

ATTRIBUTEイベント型やNAMESPACEイベント型が戻されることはありません。

START_ELEMENTイベント型が戻されたときに,属性および名前空間を処理してください。

6

[条件]

XMLStreamReaderインタフェースのメソッドうち,次に示すメソッドの引数indexに,属性数または名前空間宣言数を超えた値を指定する場合です。

  • getAttributeLocalName(int index)

  • getAttributeName(int index)

  • getAttributeNamespace(int index)

  • getAttributePrefix(int index)

  • getAttributeType(int index)

  • getAttributeValue(int index)

  • getNamespaceURI(int index)

  • isAttributeSpecified(int index)

[標準仕様]

動作の規定なし。

[XML Processorの動作]

isAttributeSpecified(int index)メソッドは,戻り値がfalseになります。

それ以外のメソッドは,戻り値がnullになります。

7

[条件]

COMMENTイベント型に対しXMLStreamReaderインタフェースのgetTextCharacters(int sourceStart, char[] target, int targetStart, int length)メソッドを実行する場合です。

[標準仕様]

Javadocの説明とXMLStreamReaderの説明との間で次の差異があります。

  • Javadoc

    CHARACTERS,SPACE,またはCDATAに関連づけられたテキストを取得。

  • XMLStreamReader

    getTextCharacters メソッドはCOMMENTイベント型に対して有効。

[XML Processorの動作]

COMMENTイベントに関連づけられたテキストを取得します。

8

[条件]

次のすべての条件に該当する場合です。

  1. XMLStreamWriterインタフェースのgetPrefix(String uri)メソッドを実行する。

  2. 1.の引数uriの名前空間が複数の接頭辞にバインドされている。

[標準仕様]

動作の規定なし。

[XML Processorの動作]

バインドされている接頭辞のうちの1つが戻り値となります。

9

[条件]

次のすべての条件に該当する場合です。

  1. XMLStreamWriterインタフェースのsetPrefix(String prefix, String uri)メソッドを実行する。

  2. 1.の引数prefixの接頭辞がすでに異なる名前空間にバインドされている。

[標準仕様]

動作の規定なし。

[XML Processorの動作]

setPrefixで指定されたURIでバインド先の接頭辞を再設定します。

10

[条件]

次のすべての条件に該当する場合です。

  • XML文書がUTF-16BEまたはUTF-16LEでエンコードされている。

  • XML宣言のエンコーディング指定がUTF-16である。

  • XMLStreamReaderのgetEncodingメソッド,またはStartDocumentのgetCharacterEncodingSchemeメソッドを使用してXML文書のエンコーディングを取得する。

[標準仕様]

XML文書自身またはXML宣言のエンコーディングのどちらを返すのかが,規定されていません。

[XML Processorの動作]

XML宣言に指定したエンコーディングではなく,XML文書自身のエンコーディング(UTF-16BEまたはUTF-16LE)を返します。

11

[条件]

XMLEventFactoryクラスのcreateStartElementおよびcreateEndElement, createAttributeメソッドの引数に,名前空間URIを指定する場合です。

[標準仕様]

引数に指定した名前空間URIが名前空間宣言として出力XML文書に書き出されるのかどうか,規定されていません。

[XML Processorの動作]

引数に指定した名前空間URIは,名前空間宣言として出力XML文書に書き出しません。

createNamespaceメソッドを使用して,名前空間宣言を明示的に作成してください。

12

[条件]

XMLStreamReaderインタフェースを使用して,外部エンティティをパースする場合です。

[標準仕様]

外部エンティティを展開するかどうかが規定されていません。

[XML Processorの動作]

EntityReferenceイベントは生成しません。

エンティティ参照を展開したものに対するイベント(CHARACTERS, START_ELEMENTなど)を生成します。

13

XMLEventFactoryクラスのcreateAttribute(String prefix, String namespaceURI, String localName, String value)メソッドの引数prefixには,""を指定できません。

14

XMLEventFactoryクラスのcreateIgnorableSpace(String content)メソッドの引数contentには,空白以外の文字列を指定しないでください。

15

XMLInputFactoryクラスのjavax.xml.stream.isSupportingExternalEntitiesプロパティのデフォルト値はtrueです。

16

次に示すXMLInputFactoryクラスのプロパティにnullを指定するには,setEventAllocatorメソッド,setXMLReporterメソッド,またはsetXMLResolverメソッドを使用します。setPropertyメソッドは使用しないでください。

  • javax.xml.stream.allocator

  • javax.xml.stream.reporter

  • javax.xml.stream.resolver

17

次に示すXMLInputFactoryクラスのプロパティの指定は,javax.xml.stream.supportDTDプロパティの値にfalseが設定されていても影響されません。

  • javax.xml.stream.isReplacingEntityReferences

  • javax.xml.stream.isSupportingExternalEntities

18

[条件]

XMLEventWriterクラスのadd(XMLEventReader reader)メソッドで,入力XMLに次の要素や属性が含まれる場合,出力XMLと入力XMLとで形式が異なります。

  • 空要素(例:<element1/>)

  • XML宣言のencoding属性

  • XML宣言のstandalone属性

[XML Processorの動作]

  • 空要素の場合は開始タグと終了タグだけが出力される(例:<element1></element1>)。

  • XML宣言は<?xml version="1.0" ?>が出力される。

19

XMLEventFactoryクラスのcreateStartElementメソッドで生成したStartElementイベントに対するgetNamespaceContext()メソッドの戻り値は,nullになります。

20

ISO-10646-UCS-4エンコーディングは使用できません。

21

バージョンが1.1のXML文書は使用できません。

22

StAXでは,次の部分に補助文字を指定できません。

  • DTD内の公開識別子

  • DTD内のシステム識別子

  • 内部解析対象実体

  • 属性値

  • コメント

  • CData

23

Charactersイベントは,分割して報告される場合があります。

StAXパーサは,1つの文字列データを複数の文字列(チャンク)に分割して,複数のCharactersイベントとしてアプリケーションに報告することもできます。そのため,アプリケーション側では,Charactersイベントが連続して発生することを意識する必要があります。

24

[条件]

START_ELEMENT/END_ELEMENT以外のイベント型に対して,XMLStreamReaderインタフェースのgetName()メソッドを実行する場合です。

[XML Processorの動作]

IllegalArgumentException例外が発生します。IllegalStateException例外は発生しません。

25

[条件]

接頭辞を持たない要素に対して,XMLStreamReaderインタフェースのgetPrefix()メソッドまたはgetAttributePrefix(int index)メソッドを実行する場合です。

[XML Processorの動作]

戻り値は,""(XMLConstants.DEFAULT_NS_PREFIX)となります。

26

[条件]

名前空間を持つ属性に対して,XMLStreamReaderインタフェースのgetAttributeValue(String namespaceURI,String localName)メソッドで引数namespaceURIにnullを,引数localNameに属性のローカル名を指定する場合です。

[XML Processorの動作]

戻り値は,nullとなります。属性値は取得されません。

27

[条件]

END_DOCUMENTイベント型またはENTITY_REFERENCEイベント型に対して,XMLStreamReaderインタフェースのgetEncoding()メソッドまたはgetVersion()メソッドを実行する場合です。

[XML Processorの動作]

END_DOCUMENTイベント型の場合,NullPointerException例外が発生します。

ENTITY_REFERENCEイベント型の場合,戻り値がnullとなります。

28

[条件]

XMLStreamReaderインタフェースのisAttributeSpecified(int index)メソッドを実行する場合です。

[XML Processorの動作]

次のように戻り値が異なります。

  • XML文書内に明示的に指定された属性の場合:true

  • DTD内で暗黙的に指定されたデフォルト属性の場合:false

29

[条件]

ENTITY_REFERENCEイベント型に対して,XMLStreamReaderインタフェースのhasName()メソッドを実行する場合です。

[XML Processorの動作]

戻り値はtrueとなります。

30

[条件]

DTDイベント型に対して,XMLStreamReaderインタフェースのgetText()メソッドを実行する場合です。

[XML Processorの動作]

「DOCTYPE宣言の文字列値」を返します。DTD内部サブセットがある場合も同様です。「DTD内部サブセットの文字列値」は返されません。

31

[条件]

内部エンティティ参照を含む要素のコンテンツに対して,XMLStreamReaderインタフェースのgetElementText()メソッドを実行する場合です。

[XML Processorの動作]

戻り値は,内部エンティティ参照の置換テキストが2回連結された文字列となります。

32

[条件]

次のどちらかに該当する場合です。

  • ENTITY宣言が存在しないXML文書をXMLStreamReaderインタフェースを使用して読み取り,DTDイベント型でXMLStreamReaderインタフェースのgetProperty("javax.xml.stream.notations")メソッドを実行する。

  • NOTATION宣言が存在しないXML文書をXMLStreamReaderインタフェースを使用して読み取り,DTDイベント型でXMLStreamReaderインタフェースのgetProperty("javax.xml.stream.entities")メソッドを実行する。

[XML Processorの動作]

戻り値は,要素のないjava.util.Listとなります。

33

[条件]

次のすべての条件に該当する場合です。

  1. パラメタエンティティ定義の中にDTD宣言を記述する。

  2. DOCTYPE宣言で1.のパラメタエンティティを使用する。

  3. 1.および2.のXML文書をStAXでパースする。

  4. XMLStreamReaderのgetTextメソッド,またはjavax.xml.stream.events.DTDインタフェースを使用してDTD宣言のテキストを取得する。

[XML Processorの動作]

取得したDTD宣言のテキストが不当になります。

34

[条件]

XML宣言の擬似属性の属性値に不当な文字列を指定した場合です。

[XML Processorの動作]

com.cosminexus.stax.xml.stream.internal.xni.XNIException例外が発生します。

また,メッセージ中の{}内に詳細文字列が出力されない場合があります。

(例)

com.cosminexus.stax.xml.stream.internal.xni.XNIException:

The standalone document declaration value must be "yes" or "no", not "{0}".

35

[条件]

次に示す,どれかのメソッドを実行した場合です。

  • XMLStreamException.getLocation()メソッド

  • XMLEvent.getLocation()メソッド

  • XMLStreamReader.getLocation()メソッド

[XML Processorの動作]

例外が発生した場所を特定するための近似値として,Location情報を取得します。

36

[条件]

次のすべての条件に該当する場合です。

  1. XML文書に「:」で始まる要素名が含まれる。

  2. StAXパーサの名前空間が有効になっている。

  3. 2.のStAXパーサで1.のXML文書をパースする。

[標準仕様]

パースエラーが発生します。

[XML Processorの動作]

パースは正常終了します。

37

[条件]

XMLEventFactoryクラスのcreateStartDocument(String encoding, String version, boolean standalone)メソッドのstandaloneパラメタにtrueを設定する場合です。

[標準仕様]

standaloneの状態がtrueのXML文書が生成されます。

[XML Processorの動作]

standalone宣言が生成されません。

38

[条件]

次のすべての条件に該当する場合です。

  • version宣言が存在しないXML文書をXMLEventReaderでパースする。

  • StartDocumentインタフェースのgetVersionメソッドを実行する。

[標準仕様]

デフォルト値の1.0を返します。

[XML Processorの動作]

nullを返します。

39

[条件]

XML文書内の次の部分に対して,XMLEventReaderクラスのnextEvent()メソッド実行をする場合です。

  • 空白文字列

  • CDATAセクション

  • 記法宣言

[XML Processorの動作]

  • 空白文字列は,CHARACTERSイベント型となります。SPACEイベント型にはなりません。

  • CDATAセクションは,CHARACTERSイベント型となります。CDATAイベント型にはなりません。

  • 記法宣言に対するNOTATION_DECLARATIONイベントは発生しません。

40

[条件]

XML文書内の次の部分に対して,XMLStreamReaderインタフェースのgetEventType()メソッドを実行する場合です。

  • 空白文字列

  • CDATAセクション

[XML Processorの動作]

空白文字列もCDATAセクションもCHARACTERSイベント型となるため,CHARACTERSイベント型として処理してください。

41

[条件]

次のすべての条件に該当する場合です。

  1. namespaceURIが接頭辞にバインドされていない。

  2. XMLStreamWriterインタフェースの次に示すメソッドの引数namespaceURIに,1.を指定する。

    writeAttribute(String prefix, String namespaceURI, String localName, String value)

[XML Processorの動作]

属性だけが出力されます。名前空間宣言(xmlns:prefix="namespaceURI")は出力されません。

42

次に示すjavax.xml.stream.eventsパッケージに含まれるインタフェースでは,writeAsEncodedUnicode(Writer writer)メソッドは使用できません。

  • Attribute

  • Characters

  • Comment

  • DTD

  • EndDocument

  • EndElement

  • EntityDeclaration

  • EntityReference

  • Namespace

  • NotationDeclaration

  • ProcessingInstruction

  • StartDocument

  • StartElement

  • XMLEvent

43

javax.xml.stream.utilパッケージに含まれるXMLEventAllocatorインタフェースのallocate(XMLStreamReader reader, XMLEventConsumer consumer)メソッドは,使用できません。

44

マルチスレッドプログラミングの場合,XMLInputFactoryクラスはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLInputFactoryインスタンスにアクセスしないように注意してください。

スレッド間の競合を避けるため,次のどちらかの方法を採用してください。

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

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

45

マルチスレッドプログラミングの場合,XMLOutputFactoryクラスはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLOutputFactoryインスタンスにアクセスしないように注意してください。

スレッド間の競合を避けるため,次のどちらかの方法を採用してください。

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

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

46

マルチスレッドプログラミングの場合,XMLEventFactoryクラスはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLEventFactoryインスタンスにアクセスしないように注意してください。

スレッド間の競合を避けるため,次のどちらかの方法を採用してください。

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

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

47

マルチスレッドプログラミングの場合,XMLStreamReaderインタフェースはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLStreamReaderインスタンスを使用しないように注意してください。

スレッド間の競合を避けるため,スレッドごとに1つのXMLStreamReaderインスタンスを持つ必要があります。

48

マルチスレッドプログラミングの場合,XMLStreamWriterインタフェースはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLStreamWriterインスタンスを使用しないように注意してください。

スレッド間の競合を避けるため,スレッドごとに1つのXMLStreamWriterインスタンスを持つ必要があります。

49

マルチスレッドプログラミングの場合,XMLEventReaderクラスはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLEventReaderインスタンスを使用しないように注意してください。

スレッド間の競合を避けるため,スレッドごとに1つのXMLEventReaderインスタンスを持つ必要があります。

50

マルチスレッドプログラミングの場合,XMLEventWriterクラスはスレッドセーフではありません。そのため,複数のスレッドが同時に同じXMLEventWriterインスタンスを使用しないように注意してください。

スレッド間の競合を避けるため,スレッドごとに1つのXMLEventWriterインスタンスを持つ必要があります。

51

javax.xml.stream.XMLResolverインタフェースのresolveEntityメソッドの引数namespaceは,常にnullになります。

52

javax.xml.stream.XMLResolverインタフェースのresolveEntityメソッドの戻り値のうち,XMLStreamReader型およびXMLEventReader型のオブジェクトはサポートしていません。

[標準仕様]

このリソースの戻り値の型は,次のどれかです。

  • java.io.InputStream

  • javax.xml.stream.XMLStreamReader

  • java.xml.stream.XMLEventReader

53

次に示すイベントに対するgetLocation()メソッドの戻り値はnullです。

  • javax.xml.stream.events.Attribute

  • javax.xml.stream.events.Namespace

  • javax.xml.stream.events.NotationDeclaration

  • javax.xml.stream.events.EntityDeclaration

54

XMLOutputFactoryクラスのうち,次に示すメソッドの引数resultにシステム識別子を指定していないStAXResultは,指定できません。

  • createXMLEventWriter(Result result)

  • createXMLStreamWriter(Result result)

55

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティにtrueを指定する。

  • XMLStreamWriterインタフェースのうち,次に示すどれかのメソッドを実行する。

    writeAttribute(prefix, namespaceURI, localName, value)

    writeStartElement(prefix, localName, namespaceURI)

    writeEmptyElement(prefix, localName, namespaceURI)

  • 引数namespaceURIがデフォルトの名前空間URIと等しい。

  • 引数prefixが「""」でもnullでもない。

[標準仕様]

接頭辞は書き込まれません。

[XML Processorの動作]

接頭辞が書き込まれます。

56

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティにtrueを指定する。

  • XMLStreamWriterインタフェースのうち,次に示すどれかのメソッドを実行する。

    writeAttribute(prefix, namespaceURI, localName, value)

    writeStartElement(prefix, localName, namespaceURI)

    writeEmptyElement(prefix, localName, namespaceURI)

  • 引数namespaceURIバインドがあり,異なる接頭辞にバインドしている。

[標準仕様]

接頭辞がランダムに生成されます。

(例)

xmlns:{generated}="namespaceURI" {generated}:localName="value"

<{generated}:localName xmlns:{generated}="namespaceURI">

[XML Processorの動作]

ランダムな接頭辞は生成されません。

(例)

xmlns:prefix="namespaceURI" prefix:localName="value"

<prefix:localName xmlns:prefix="namespaceURI">

57

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティを指定しない,またはfalseを指定する。

  • XMLStreamWriterインタフェースのwriteAttribute(prefix, namespaceURI, localName, value)メソッドを実行する。

  • 引数namespaceURIはバインドがない。

  • 引数prefixは「""」でもnullでもない。

[標準仕様]

名前空間宣言が生成されます。

[XML Processorの動作]

名前空間宣言が生成されません。

58

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティを指定しない,またはfalseを指定する。

  • XMLStreamWriterインタフェースのうち,次に示すどれかのメソッドを実行する。

    writeAttribute(prefix, namespaceURI, localName, value)

    writeStartElement(prefix, localName, namespaceURI)

    writeEmptyElement(prefix, localName, namespaceURI)

  • 引数namespaceURIバインドがあり,異なる接頭辞にバインドしている。

[標準仕様]

XMLStreamException例外が発生します。

[XML Processorの動作]

エラーにはなりません。次のように書き込まれます。

  • prefix:localName="value"

  • <prefix:localName>

59

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティを指定しない,またはfalseを指定する。

  • XMLStreamWriterインタフェースの次のどれかのメソッドを実行する。

    writeAttribute(prefix, namespaceURI, localName, value)

    writeStartElement(prefix, localName, namespaceURI)

    writeEmptyElement(prefix, localName, namespaceURI)

  • 引数namespaceURIがデフォルトの名前空間URIと等しい。

  • 引数prefixが「""」でもnullでもない。

[標準仕様]

接頭辞は書き込まれません。

[XML Processorの動作]

次に示す接頭辞が書き込まれます。

  • prefix:localName="value"

  • <prefix:localName>

60

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティを指定しない,またはfalseを指定する。

  • XMLStreamWriterインタフェースのwriteAttribute(prefix, namespaceURI, localName, value)メソッドを実行する。

  • 引数namespaceURIがデフォルトの名前空間URIと等しい。

  • 引数prefixが「""」またはnullである。

[標準仕様]

接頭辞は書き込まれません。

[XML Processorの動作]

XMLStreamException例外が発生します。

61

[条件]

次のすべての条件に該当する場合です。

  • javax.xml.stream.isRepairingNamespacesプロパティにtrueを指定する。

  • XMLStreamWriterインタフェースのwriteEmptyElement(prefix, localName, namespaceURI)メソッドを実行する。

  • 引数prefixが「""」である。

[標準仕様]

prefix == "" || null の場合,デフォルトの名前空間として処理されます。接頭辞は生成または書き込まれません。

namespaceURI がバインドされていない場合は,xmlns宣言が生成または書き込まれます。

[XML Processorの動作]

接頭辞はランダムに生成されます。デフォルトの名前空間としては処理されません。

62

[条件]

XMLInputFactoryクラスのうち,次に示すメソッドの引数encodingに"ISO-10646-UCS-2"が,引数streamにencoding擬似属性"ISO-10646-UCS-2"が指定されたXML文書を指定する場合です。

  • createXMLEventReader(stream, encoding)

  • createXMLStreamReader(stream, encoding)

[XML Processorの動作]

com.cosminexus.stax.xml.stream.internal.xni.XNIException例外が発生します。

[回避策]

encoding指定のない,createXMLEventReaderメソッドまたはcreateXMLStreamReaderメソッドで処理してください。

63

[条件]

次のすべての条件に該当する場合です。

  1. StartElementイベントのgetNamespaceContext()メソッドでNamespaceContextを取得する。

  2. 1.で取得したNamespaceContextに対して,接頭辞xmlや接頭辞xmlnsの名前空間URIを取得する。

[標準仕様]

  • 接頭辞xmlはhttp://www.w3.org/XML/1998/namespaceにバインドされています。

  • 接頭辞xmlnsはhttp://www.w3.org/2000/xmlns/にバインドされています。

[XML Processorの動作]

名前空間コンテキストに接頭辞xmlや接頭辞xmlnsの情報はありません。

64

XMLEventReaderでXML文書を読み込む場合,standalone属性の有無とは関係なく,StartDocumentイベントのstandaloneSet()メソッドの戻り値はtrueになります。

[標準仕様]

XML文書のエンコーディング宣言でstandalone属性が設定されていた場合だけ,戻り値がtrueになります。

65

DTDイベントのgetEntities()メソッドおよびgetNotations()メソッドは,常にnullを返します。

[回避策]

javax.xml.stream.entitiesプロパティおよびjavax.xml.stream.notationsプロパティを使用することで,これらの情報にアクセスできます。詳細は,XMLStreamReaderのJavadocを参照してください。

66

[条件]

XMLInputFactoryクラスのcreateXMLEventReader(Source source)メソッドまたはcreateXMLStreamReader(Source source)メソッドに対して,システム識別子が指定されていない型を指定する場合です。該当する型を次に示します。

  • DOMSource

  • SAXSource

  • StAXSource

[XML Processorの動作]

XMLStreamException例外が発生します。

67

DTDイベントのgetProcessedDTD()メソッドの戻り値は,常にnullです。

68

EndelementイベントのgetNamespaces()メソッドの戻り値は,常に空のIteratorです。

[XML Processorの動作]

範囲外になった名前空間のIteratorを返します。

69

[条件]

次のすべての条件に該当する場合です。

  1. XML文書中の文字データの中に,CDATAセクション終了区切り子("]]>")が単独で含まれる。

    (例)

    <?xml version="1.0" encoding="UTF-8" ?>

    <root>te]]>xt</root>

  2. 1.の文字データをXMLStreamReaderまたはXMLEventReaderインタフェースで読み取り,next()メソッドなどで次の構文解析イベントを取得する。

[標準仕様]

XMLStreamReaderインタフェースまたはXMLEventReaderインタフェースからXMLStreamException例外が発生します。

[XML Processorの動作]

XMLStreamReaderインタフェースの場合

XMLStreamReaderインタフェースのイベント型がCHARACTERSのときに実行できるgetTextXXXX()メソッドの実行結果に「]]>」が含まれます。

getText()メソッドを実行すると「]]>」を含む文字列が返されます。

getTextCharacters()メソッドを実行すると,’]’’]’’>’を含む配列が返されます。

getTextCharacters(int sourceStart, char[] target, int targetStart, int length)メソッドを実行すると,char配列targetには’]’’]’’>’が含まれます。

getTextLength()メソッドを実行すると,「]]>」を含む文字列の長さが返されます。

XMLEventReaderインタフェースの場合

nextEvent()メソッドで返されるCharactersオブジェクトに対してgetData()メソッドを実行すると,「]]>」を含む文字列が返されます。

70

XMLOutputFactoryクラスのcreateXMLEventWriter(OutputStream stream)メソッドやcreateXMLStreamWriter(OutputStream stream)メソッドで出力エンコーディングを指定しない場合,XMLEventWriterやXMLStreamWriterはシステムのデフォルト文字コードで出力されます。

71

XMLEventFactoryクラスのcreateStartDocument()メソッドの実行結果は,createStartDocument(String encoding, ...)メソッドの引数encodingにUTF-8を指定した場合と同じです。

72

[条件]

次のすべての条件に該当する場合です。

  • XMLOutputFactoryクラスのcreateXMLEventWriterメソッドやcreateXMLStreamWriterメソッドで指定する出力エンコーディングが,UTF-8またはUTF-16以外である。

  • 作成されたXMLEventWriterやXMLStreamWriterで,2バイトコードを含むXML文書を出力する。

  • 出力するXML文書のエンコーディングの指定が次に示すどちらかの条件に該当する。

    XMLOutputFactoryクラスのcreateXMLEventWriterメソッドで指定する出力エンコーディングとXMLEventFactoryクラスのcreateStartDocumentメソッドで指定する出力XML宣言のencoding擬似属性が一致していない。

    XMLStreamWriterインタフェースのwriteStartDocumentメソッドの引数encodingを指定していない。

[XML Processorの動作]

出力エンコーディングがUTF-8およびUTF-16以外の,encoding擬似属性のない不正なXML文書を出力します。

[回避策]

XMLOutputFactoryクラスのcreateXMLEventWriterメソッドやcreateXMLStreamWriterメソッドのencoding指定には,UTF-8を指定してください。

73

[条件]

次のすべての条件に該当する場合です。

  1. XMLOutputFactoryのjavax.xml.stream.isRepairingNamespacesプロパティにBoolean.FALSEを設定する。

  2. 1.のXMLOutputFactoryから,XMLStreamWriterまたはXMLEventWriterを作成する。

  3. 2.のXMLStreamWriterまたはXMLEventWriterからStAXResultを作成する。

[XML Processorの動作]

上記の条件で作成したStAXResultを次に示すメソッドのどちらかの引数に指定して,名前空間宣言を含むXML文書を処理すると,XMLStreamException例外が発生します。

  • javax.xml.validation.Validatorクラスのvalidate(Source source, Result result)メソッド

  • javax.xml.transform.Transformerクラスのtransform(Source source, Result result)メソッド

    注※ ただし,このメソッドはスタイルシートを使わない恒等変換の場合だけ該当します。

[回避策]

XMLOutputFactoryのjavax.xml.stream.isRepairingNamespacesプロパティにはBoolean.TRUEを設定してください。