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 String ALLOW_EMPTY_SUFFIX
          nullを許容する場合に定義する独自のデータ型の末尾に付ける文字列
protected static String ATTRIBUTE_ERROR_CODE
          形式チェックで属性に不正なデータ型の値が入力された場合に、出力されるエラーコード。
protected static String BOOLEAN_ERROR_CODE
          boolean型のフィールドに不正な値が入力された場合のエラーコード
protected static String DATATYPE_BOOLEAN
          boolean型としてハンドリングするXMLスキーマのデータ型
protected static List DATATYPE_DATE
          日付型としてハンドリングするXMLスキーマのデータ型
protected static String DATATYPE_ERROR_CODE
          形式チェックで不正なデータ型の値が入力された場合に、出力されるエラーコード
protected static String DATE_ERROR_CODE
          date型のフィールドに不正な値が入力された場合のエラーコード
protected static String ELEMENT_ERROR_CODE
          形式チェックで要素に不正なデータ型の値が入力された場合に、出力されるエラーコード。
protected static String ERROR_CODE_PREFIX
          メッセージバンドルを行なうときに使用するエラーコードのプレフィックス
protected static String ERROR_CODE_SEPARATOR
          エラーコードのセパレータ
protected static String FIELD_SEPARATOR
          フィールドのセパレータ
protected static String MAXINCLUSIVE_ERROR_CODE
          形式チェックで数値型の最大値より大きい値が入力された場合に出力されるエラーコード
protected static String MININCLUSIVE_ERROR_CODE
          形式チェックで数値型の最小値より小さい値が入力された場合に出力されるエラーコード
protected static String NUMBER_ERROR_CODE
          数値型のフィールドに不正な値が入力された場合のエラーコード
protected static String NUMBERMAXRANGE_ERROR_CODE
          数値型のフィールドに、定義された数値型の最小値より小さい値が入力された場合のエラーコード
protected static String NUMBERMINRANGE_ERROR_CODE
          数値型のフィールドに、定義された数値型の最大値より大きい値が入力された場合のエラーコード
protected static String UNION_ERROR_CODE
          形式チェックでunion定義のエラーが発生した場合に、出力されるエラーコード 数値型にnullを許容する独自のデータ型の宣言にはunion定義を用いるので、 不正な値が入力された場合、このエラーが発生する
protected static String XERCES_RESOURCE_BUNDLE_PREFIX
          リソースバンドルを行うファイルの接頭辞
protected static 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(String key, String[] options)
          形式チェックで発生したエラーの情報を変換し、独自のエラーメッセージインスタンスを生成する。
protected  void errorLog(String key, Object[] options)
          形式チェックで発生したエラーの情報をログに出力する
 ErrorMessages getErrorMessages()
          エラーメッセージのリストを返却する
 Stack<String> getTagStack()
          解析中のフィールド情報を保持するスタックを返却する
protected  String indexResolve(String element)
          入力された要素名にインデックスを付加して返却する。
 void reportError(org.apache.xerces.xni.XMLLocator location, String domain, String key, 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
 

フィールドの詳細

XERCES_RESOURCE_BUNDLE_PREFIX

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

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

ALLOW_EMPTY_SUFFIX

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

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

ERROR_CODE_PREFIX

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

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

ATTRIBUTE_ERROR_CODE

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

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

ELEMENT_ERROR_CODE

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

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

DATATYPE_ERROR_CODE

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

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

UNION_ERROR_CODE

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

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

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

MAXINCLUSIVE_ERROR_CODE

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

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

MININCLUSIVE_ERROR_CODE

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

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

XML_DATA_ERROR_CODE_PREFIX

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

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

NUMBER_ERROR_CODE

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

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

BOOLEAN_ERROR_CODE

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

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

DATE_ERROR_CODE

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

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

NUMBERMINRANGE_ERROR_CODE

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

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

NUMBERMAXRANGE_ERROR_CODE

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

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

FIELD_SEPARATOR

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

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

ERROR_CODE_SEPARATOR

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

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

DATATYPE_BOOLEAN

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

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

DATATYPE_DATE

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

コンストラクタの詳細

XMLErrorReporterEx

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

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

getErrorMessages

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

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

reportError

public void reportError(org.apache.xerces.xni.XMLLocator location,
                        String domain,
                        String key,
                        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 String indexResolve(String element)
入力された要素名にインデックスを付加して返却する。

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

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

addErrorMessage

protected void addErrorMessage(String key,
                               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(String key,
                        Object[] options)
形式チェックで発生したエラーの情報をログに出力する

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

getTagStack

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

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


Copyright © 2012. All Rights Reserved.