jp.terasoluna.fw.oxm.xsd.xerces
クラス XMLErrorReporterEx

java.lang.Object
  上位を拡張 org.apache.xerces.impl.XMLErrorReporter
      上位を拡張 jp.terasoluna.fw.oxm.xsd.xerces.XMLErrorReporterEx
すべての実装されたインタフェース:
org.apache.xerces.xni.parser.XMLComponent

public class XMLErrorReporterEx
extends org.apache.xerces.impl.XMLErrorReporter

XMLデータのパース時の詳細なエラー情報として、フィールド情報を扱うため、XMLErrorReporterの拡張を行ったクラス。

フィールド情報とは、形式チェックのエラーが発生した箇所を特定するための情報である。
スタックに格納されている要素名にインデックスを付加した文字列をドット(".")で連結し、 フィールド情報を生成する。
要素の数が1つの場合でも、必ずインデックスを付加する。 属性にはインデックスを付加しない。
エラーが発生した場合に生成されるフィールド情報のサンプルを以下に記す。

【XMLデータのサンプル】

   <sample-dto param-d="...">
     <param-a>
       <param-b>
         <param-c>...</param-c>
       </param-b>
     </param-a>
   </sample-dto>
 

上記のXMLデータのparam-c要素に不正な値が入力された場合に生成されるフィールド情報を以下に記す。
フィールド情報:sample-dto[0].param-a[0].param-b[0].param-c[0]
※要素の数が1つでもインデックスが付加されている。

上記のXMLデータのparam-d属性に不正な値が入力された場合に生成されるフィールド情報を以下に記す。
フィールド情報:sample-dto[0].param-a[0].param-b[0].param-d
※属性にはインデックスが付加されていない。

形式チェックで生成されるエラーコード

形式チェックで発生するエラーコードの一覧を以下に記す。

エラーコード 置換文字列 発生する状況
typeMismatch.number {入力された値, データ型} 不正な数値が入力された場合
typeMismatch.boolean {入力された値, データ型} 不正なboolean値が入力された場合
typeMismatch.date {入力された値, データ型} 不正な日付が入力された場合
typeMismatch.numberMaxRange {入力された値, データ型の最大値, データ型} 定義された型の最大値より大きい数値が入力された場合
typeMismatch.numberMinRange {入力された値, データ型の最小値, データ型} 定義された型の最小値より小さい数値が入力された場合

形式チェックサンプル

スキーマ定義ファイルでXMLデータの形式を定義する

【スキーマ定義ファイル設定例】

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="int-param" type="int-param-type"/>
      <xs:complexType name="int-param-type">
        <xs:sequence>
          <xs:element name="param1" type="xs:int" />
          <xs:element name="param2" type="xs:int" />
        </xs:sequence>
      <xs:attribute name="param3" type="xs:int"/>
      </xs:complexType>
    </xs:schema>
 

要素(param2)と属性(param3)に不正な値が格納されたXMLデータを入力する

【入力されるXMLデータ例】

   <int-param param3="30b">
   <param1>100</param1> 
   <param2>20a</param2>
   </int-param>
 

形式チェックでエラーが発生し、エラーメッセージが格納されたインスタンスが生成される。
エラーメッセージの適切なハンドリングを行うこと。

【param2のエラーメッセージが格納されたインスタンス】

    フィールド情報:int-param[0].param2[0]
    エラーコード:typeMismatch.number
    置換文字列:{20a, integer}
 

【param3のエラーメッセージが格納されたインスタンス】

    フィールド情報:int-param[0].param3
    エラーコード:typeMismatch.number
    置換文字列:{30b, integer}
 

null値(空文字)の許容

XMLスキーマの仕様では、数値型の要素の値にnull値を許容することはできない。
数値型の要素の値にnull値を許容する場合は、独自のデータ型を宣言すること。
独自のデータ型を宣言する場合は、末尾にAllowEmptyを付けること。(エラーのハンドリングを行うために必要)
※null値とは、「<param></param>」のように要素の値として空文字が設定されることを指す。

【数値型の要素「param」にnull値を許容する場合のスキーマ定義ファイル設定例】

     <xs:simpleType name="integerAllowEmpty">
       <xs:union>
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="" />
           </xs:restriction>
         </xs:simpleType>
         <xs:simpleType>
           <xs:restriction base="xs:integer" />
         </xs:simpleType>
       </xs:union>
     </xs:simpleType>
     <xs:element name="param" type="integerAllowEmpty" />
 

関連項目:
SchemaValidatorImpl, ErrorMessages, ErrorMessage, XMLSchemaValidatorEx

フィールドの概要
protected static java.lang.String ALLOW_EMPTY_SUFFIX
          nullを許容する場合に定義する独自のデータ型の末尾に付ける文字列
protected static java.lang.String ATTRIBUTE_ERROR_CODE
          形式チェックで属性に不正なデータ型の値が入力された場合に、出力されるエラーコード。
protected static java.lang.String BOOLEAN_ERROR_CODE
          boolean型のフィールドに不正な値が入力された場合のエラーコード
protected static java.lang.String DATATYPE_BOOLEAN
          boolean型としてハンドリングするXMLスキーマのデータ型
protected static java.util.List DATATYPE_DATE
          日付型としてハンドリングするXMLスキーマのデータ型
protected static java.lang.String DATATYPE_ERROR_CODE
          形式チェックで不正なデータ型の値が入力された場合に、出力されるエラーコード
protected static java.lang.String DATE_ERROR_CODE
          date型のフィールドに不正な値が入力された場合のエラーコード
protected static java.lang.String ELEMENT_ERROR_CODE
          形式チェックで要素に不正なデータ型の値が入力された場合に、出力されるエラーコード。
protected static java.lang.String ERROR_CODE_PREFIX
          メッセージバンドルを行なうときに使用するエラーコードのプレフィックス
protected static java.lang.String ERROR_CODE_SEPARATOR
          エラーコードのセパレータ
private  ErrorMessages errorMessages
          形式チェックのエラーメッセージを格納するインスタンス。
protected static java.lang.String FIELD_SEPARATOR
          フィールドのセパレータ
private static org.apache.commons.logging.Log log
          ログクラス。
protected static java.lang.String MAXINCLUSIVE_ERROR_CODE
          形式チェックで数値型の最大値より大きい値が入力された場合に出力されるエラーコード
protected static java.lang.String MININCLUSIVE_ERROR_CODE
          形式チェックで数値型の最小値より小さい値が入力された場合に出力されるエラーコード
protected static java.lang.String NUMBER_ERROR_CODE
          数値型のフィールドに不正な値が入力された場合のエラーコード
protected static java.lang.String NUMBERMAXRANGE_ERROR_CODE
          数値型のフィールドに、定義された数値型の最小値より小さい値が入力された場合のエラーコード
protected static java.lang.String NUMBERMINRANGE_ERROR_CODE
          数値型のフィールドに、定義された数値型の最大値より大きい値が入力された場合のエラーコード
private  java.util.Map<java.lang.String,java.lang.Integer> tagIndex
          XMLの要素ごとに最終インデックスをMap形式で持つインスタンス。
private  java.util.Stack<java.lang.String> tagStack
          解析中の要素情報を保持するスタック。
private  ErrorMessage tmpErrorMessage
          データ型のエラーで生成されるエラーメッセージのフィールド情報に、属性名を追加するため、インスタンスの参照を保存する。
protected static java.lang.String UNION_ERROR_CODE
          形式チェックでunion定義のエラーが発生した場合に、出力されるエラーコード 数値型にnullを許容する独自のデータ型の宣言にはunion定義を用いるので、 不正な値が入力された場合、このエラーが発生する
protected static java.lang.String XERCES_RESOURCE_BUNDLE_PREFIX
          リソースバンドルを行うファイルの接頭辞
protected static java.lang.String XML_DATA_ERROR_CODE_PREFIX
          形式チェックで、XMLデータの形式に問題がある場合に出力されるエラーコードのプレフィックス
 
クラス org.apache.xerces.impl.XMLErrorReporter から継承されたフィールド
CONTINUE_AFTER_FATAL_ERROR, ERROR_HANDLER, fContinueAfterFatalError, fDefaultErrorHandler, fErrorHandler, fLocale, fLocator, fMessageFormatters, SEVERITY_ERROR, SEVERITY_FATAL_ERROR, SEVERITY_WARNING
 
コンストラクタの概要
XMLErrorReporterEx(ErrorMessages errorMessages)
          コンストラクタ
 
メソッドの概要
protected  void addErrorMessage(java.lang.String key, java.lang.String[] options)
          形式チェックで発生したエラーの情報を変換し、独自のエラーメッセージインスタンスを生成する。
protected  void errorLog(java.lang.String key, java.lang.Object[] options)
          形式チェックで発生したエラーの情報をログに出力する
 ErrorMessages getErrorMessages()
          エラーメッセージのリストを返却する
private  java.lang.String getField()
          エラーが発生したフィールド情報を返却する
private  java.lang.String getMessage(java.lang.String key, java.lang.Object[] options)
          Xercesのリソースバンドルを用いて生成したメッセージを返却する。
 java.util.Stack<java.lang.String> getTagStack()
          解析中のフィールド情報を保持するスタックを返却する
protected  java.lang.String indexResolve(java.lang.String element)
          入力された要素名にインデックスを付加して返却する。
 void reportError(org.apache.xerces.xni.XMLLocator location, java.lang.String domain, java.lang.String key, java.lang.Object[] arguments, short severity)
          形式チェックで発生したエラー情報を利用して、エラーメッセージを生成する。
 
クラス org.apache.xerces.impl.XMLErrorReporter から継承されたメソッド
getErrorHandler, getFeature, getFeatureDefault, getLocale, getMessageFormatter, getPropertyDefault, getRecognizedFeatures, getRecognizedProperties, getSAXErrorHandler, putMessageFormatter, removeMessageFormatter, reportError, reset, setDocumentLocator, setFeature, setLocale, setProperty
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

log

private static org.apache.commons.logging.Log log
ログクラス。


tagIndex

private java.util.Map<java.lang.String,java.lang.Integer> tagIndex
XMLの要素ごとに最終インデックスをMap形式で持つインスタンス。

インデックス無しの要素名でインデックス値を保持する。
指定する要素は上位タグ名も含み、最下位タグに対応する要素のインデックスを取得できる。


tagStack

private java.util.Stack<java.lang.String> tagStack
解析中の要素情報を保持するスタック。

フィールド情報生成の際に使用される。


errorMessages

private ErrorMessages errorMessages
形式チェックのエラーメッセージを格納するインスタンス。


XERCES_RESOURCE_BUNDLE_PREFIX

protected static final java.lang.String XERCES_RESOURCE_BUNDLE_PREFIX
リソースバンドルを行うファイルの接頭辞

関連項目:
定数フィールド値

ALLOW_EMPTY_SUFFIX

protected static final java.lang.String ALLOW_EMPTY_SUFFIX
nullを許容する場合に定義する独自のデータ型の末尾に付ける文字列

関連項目:
定数フィールド値

ERROR_CODE_PREFIX

protected static final java.lang.String ERROR_CODE_PREFIX
メッセージバンドルを行なうときに使用するエラーコードのプレフィックス

関連項目:
定数フィールド値

ATTRIBUTE_ERROR_CODE

protected static final java.lang.String ATTRIBUTE_ERROR_CODE
形式チェックで属性に不正なデータ型の値が入力された場合に、出力されるエラーコード。

関連項目:
定数フィールド値

ELEMENT_ERROR_CODE

protected static final java.lang.String ELEMENT_ERROR_CODE
形式チェックで要素に不正なデータ型の値が入力された場合に、出力されるエラーコード。

関連項目:
定数フィールド値

DATATYPE_ERROR_CODE

protected static final java.lang.String DATATYPE_ERROR_CODE
形式チェックで不正なデータ型の値が入力された場合に、出力されるエラーコード

関連項目:
定数フィールド値

UNION_ERROR_CODE

protected static final java.lang.String UNION_ERROR_CODE
形式チェックでunion定義のエラーが発生した場合に、出力されるエラーコード

数値型にnullを許容する独自のデータ型の宣言にはunion定義を用いるので、 不正な値が入力された場合、このエラーが発生する

関連項目:
定数フィールド値

MAXINCLUSIVE_ERROR_CODE

protected static final java.lang.String MAXINCLUSIVE_ERROR_CODE
形式チェックで数値型の最大値より大きい値が入力された場合に出力されるエラーコード

関連項目:
定数フィールド値

MININCLUSIVE_ERROR_CODE

protected static final java.lang.String MININCLUSIVE_ERROR_CODE
形式チェックで数値型の最小値より小さい値が入力された場合に出力されるエラーコード

関連項目:
定数フィールド値

XML_DATA_ERROR_CODE_PREFIX

protected static final java.lang.String XML_DATA_ERROR_CODE_PREFIX
形式チェックで、XMLデータの形式に問題がある場合に出力されるエラーコードのプレフィックス

関連項目:
定数フィールド値

NUMBER_ERROR_CODE

protected static final java.lang.String NUMBER_ERROR_CODE
数値型のフィールドに不正な値が入力された場合のエラーコード

関連項目:
定数フィールド値

BOOLEAN_ERROR_CODE

protected static final java.lang.String BOOLEAN_ERROR_CODE
boolean型のフィールドに不正な値が入力された場合のエラーコード

関連項目:
定数フィールド値

DATE_ERROR_CODE

protected static final java.lang.String DATE_ERROR_CODE
date型のフィールドに不正な値が入力された場合のエラーコード

関連項目:
定数フィールド値

NUMBERMINRANGE_ERROR_CODE

protected static final java.lang.String NUMBERMINRANGE_ERROR_CODE
数値型のフィールドに、定義された数値型の最大値より大きい値が入力された場合のエラーコード

関連項目:
定数フィールド値

NUMBERMAXRANGE_ERROR_CODE

protected static final java.lang.String NUMBERMAXRANGE_ERROR_CODE
数値型のフィールドに、定義された数値型の最小値より小さい値が入力された場合のエラーコード

関連項目:
定数フィールド値

FIELD_SEPARATOR

protected static final java.lang.String FIELD_SEPARATOR
フィールドのセパレータ

関連項目:
定数フィールド値

ERROR_CODE_SEPARATOR

protected static final java.lang.String ERROR_CODE_SEPARATOR
エラーコードのセパレータ

関連項目:
定数フィールド値

DATATYPE_BOOLEAN

protected static final java.lang.String DATATYPE_BOOLEAN
boolean型としてハンドリングするXMLスキーマのデータ型

関連項目:
定数フィールド値

DATATYPE_DATE

protected static final java.util.List DATATYPE_DATE
日付型としてハンドリングするXMLスキーマのデータ型


tmpErrorMessage

private ErrorMessage tmpErrorMessage
データ型のエラーで生成されるエラーメッセージのフィールド情報に、属性名を追加するため、インスタンスの参照を保存する。

コンストラクタの詳細

XMLErrorReporterEx

public XMLErrorReporterEx(ErrorMessages errorMessages)
コンストラクタ

パラメータ:
errorMessages - エラーメッセージのリスト
メソッドの詳細

getErrorMessages

public ErrorMessages getErrorMessages()
エラーメッセージのリストを返却する

戻り値:
エラーメッセージのリスト

reportError

public void reportError(org.apache.xerces.xni.XMLLocator location,
                        java.lang.String domain,
                        java.lang.String key,
                        java.lang.Object[] arguments,
                        short severity)
                 throws org.apache.xerces.xni.XNIException
形式チェックで発生したエラー情報を利用して、エラーメッセージを生成する。

オーバーライド:
クラス org.apache.xerces.impl.XMLErrorReporter 内の reportError
パラメータ:
location - XMLの位置情報を取得するオブジェクト
domain - エラードメイン
key - 形式チェックのエラーで発生したエラーコード
arguments - 形式チェックのエラーで発生した置換文字列
severity - エラーレベル
例外:
org.apache.xerces.xni.XNIException - パーサ内で発生する実行時例外

indexResolve

protected java.lang.String indexResolve(java.lang.String element)
入力された要素名にインデックスを付加して返却する。

要素名には、配列の有無に関わらず[ ]を付加する。

パラメータ:
element - 要素名
戻り値:
インデックスの値が付加された要素名

getField

private java.lang.String getField()
エラーが発生したフィールド情報を返却する

戻り値:
エラーが発生したフィールド情報

addErrorMessage

protected void addErrorMessage(java.lang.String key,
                               java.lang.String[] options)
形式チェックで発生したエラーの情報を変換し、独自のエラーメッセージインスタンスを生成する。

Xercesで発生したデータ型のエラーに関してのみ、独自のエラーメッセージを生成する。
それ以外のエラーが発生した場合は、例外をスローする。

Xercesでデータ型のエラーが発生した場合、要素・属性に関するエラーも発生する。
例えば、ある要素で最大値エラーが発生した場合、データ型のエラーと要素エラーが発生する。
ある属性でデータ型のエラーが発生した場合、データ型のエラーと属性のエラーが発生する。

要素・属性のエラーは、データ型のエラーとほぼ同じ内容のエラー情報を持つので、エラーメッセージは生成しない。

データ型のエラーの一覧を以下に記す。
Xercesのエラーコード 独自のエラーコード 独自の置換文字列 発生する状況
cvc-datatype-valid.1.2.1 typeMismatch.number
typeMismatch.boolean
typeMismatch.date
{不正な値, データ型} 不正な値が入力された場合
cvc-maxInclusive-valid typeMismatch.numberMaxRange {不正な値, データ型の最大値, データ型} 数値型の最大値より大きい値が入力された場合
cvc-minInclusive-valid typeMismatch.numberMinRange {不正な値, データ型の最小値, データ型} 数値型の最小値より小さい値が入力された場合
cvc-datatype-valid.1.2.3 typeMismatch.numberMinRange {不正な値, データ型} null値を許容したフィールドに、不正な値が入力された場合

要素・属性のエラーの一覧を下記に示す。

Xercesで発生したエラーコード 発生する状況
cvc-type.3.1.3 要素に不正な値が入力された場合
cvc-attribute.3 属性に不正な値が入力された場合

属性のエラーが発生した場合、置換文字列として格納されている属性名を、エラーメッセージのフィールド情報に付加する。

パラメータ:
key - エラーコード
options - 置換文字列

errorLog

protected void errorLog(java.lang.String key,
                        java.lang.Object[] options)
形式チェックで発生したエラーの情報をログに出力する

パラメータ:
key - エラーコード
options - 置換文字列

getMessage

private java.lang.String getMessage(java.lang.String key,
                                    java.lang.Object[] options)
Xercesのリソースバンドルを用いて生成したメッセージを返却する。

パラメータ:
key - エラーコード
options - 置換文字列
戻り値:
エラーメッセージ

getTagStack

public java.util.Stack<java.lang.String> getTagStack()
解析中のフィールド情報を保持するスタックを返却する

戻り値:
解析中のフィールド情報を保持するスタック