public class XMLErrorReporterEx
extends org.apache.xerces.impl.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" />
修飾子とタイプ | フィールドと説明 |
---|---|
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データの形式に問題がある場合に出力されるエラーコードのプレフィックス
|
コンストラクタと説明 |
---|
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)
形式チェックで発生したエラー情報を利用して、エラーメッセージを生成する。
|
getErrorHandler, getFeature, getFeatureDefault, getLocale, getMessageFormatter, getPropertyDefault, getRecognizedFeatures, getRecognizedProperties, getSAXErrorHandler, putMessageFormatter, removeMessageFormatter, reportError, reset, setDocumentLocator, setFeature, setLocale, setProperty
protected static final String XERCES_RESOURCE_BUNDLE_PREFIX
protected static final String ALLOW_EMPTY_SUFFIX
protected static final String ERROR_CODE_PREFIX
protected static final String ATTRIBUTE_ERROR_CODE
protected static final String ELEMENT_ERROR_CODE
protected static final String DATATYPE_ERROR_CODE
protected static final String UNION_ERROR_CODE
数値型にnullを許容する独自のデータ型の宣言にはunion定義を用いるので、 不正な値が入力された場合、このエラーが発生する
protected static final String MAXINCLUSIVE_ERROR_CODE
protected static final String MININCLUSIVE_ERROR_CODE
protected static final String XML_DATA_ERROR_CODE_PREFIX
protected static final String NUMBER_ERROR_CODE
protected static final String BOOLEAN_ERROR_CODE
protected static final String DATE_ERROR_CODE
protected static final String NUMBERMINRANGE_ERROR_CODE
protected static final String NUMBERMAXRANGE_ERROR_CODE
protected static final String DATATYPE_BOOLEAN
protected static final List DATATYPE_DATE
public XMLErrorReporterEx(ErrorMessages errorMessages)
errorMessages
- エラーメッセージのリストpublic ErrorMessages getErrorMessages()
public void reportError(org.apache.xerces.xni.XMLLocator location, String domain, String key, Object[] arguments, short severity) throws org.apache.xerces.xni.XNIException
reportError
クラス内 org.apache.xerces.impl.XMLErrorReporter
location
- XMLの位置情報を取得するオブジェクトdomain
- エラードメインkey
- 形式チェックのエラーで発生したエラーコードarguments
- 形式チェックのエラーで発生した置換文字列severity
- エラーレベルorg.apache.xerces.xni.XNIException
- パーサ内で発生する実行時例外protected String indexResolve(String element)
要素名には、配列の有無に関わらず[ ]を付加する。
element
- 要素名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
- 置換文字列protected void errorLog(String key, Object[] options)
key
- エラーコードoptions
- 置換文字列Copyright © 2015. All Rights Reserved.