|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectorg.apache.xerces.impl.XMLErrorReporter
jp.terasoluna.fw.oxm.xsd.xerces.XMLErrorReporterEx
public class XMLErrorReporterEx
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 |
フィールドの詳細 |
---|
private static org.apache.commons.logging.Log log
private java.util.Map<java.lang.String,java.lang.Integer> tagIndex
インデックス無しの要素名でインデックス値を保持する。
指定する要素は上位タグ名も含み、最下位タグに対応する要素のインデックスを取得できる。
private java.util.Stack<java.lang.String> tagStack
フィールド情報生成の際に使用される。
private ErrorMessages errorMessages
protected static final java.lang.String XERCES_RESOURCE_BUNDLE_PREFIX
protected static final java.lang.String ALLOW_EMPTY_SUFFIX
protected static final java.lang.String ERROR_CODE_PREFIX
protected static final java.lang.String ATTRIBUTE_ERROR_CODE
protected static final java.lang.String ELEMENT_ERROR_CODE
protected static final java.lang.String DATATYPE_ERROR_CODE
protected static final java.lang.String UNION_ERROR_CODE
数値型にnullを許容する独自のデータ型の宣言にはunion定義を用いるので、 不正な値が入力された場合、このエラーが発生する
protected static final java.lang.String MAXINCLUSIVE_ERROR_CODE
protected static final java.lang.String MININCLUSIVE_ERROR_CODE
protected static final java.lang.String XML_DATA_ERROR_CODE_PREFIX
protected static final java.lang.String NUMBER_ERROR_CODE
protected static final java.lang.String BOOLEAN_ERROR_CODE
protected static final java.lang.String DATE_ERROR_CODE
protected static final java.lang.String NUMBERMINRANGE_ERROR_CODE
protected static final java.lang.String NUMBERMAXRANGE_ERROR_CODE
protected static final java.lang.String FIELD_SEPARATOR
protected static final java.lang.String ERROR_CODE_SEPARATOR
protected static final java.lang.String DATATYPE_BOOLEAN
protected static final java.util.List DATATYPE_DATE
private ErrorMessage tmpErrorMessage
コンストラクタの詳細 |
---|
public XMLErrorReporterEx(ErrorMessages errorMessages)
errorMessages
- エラーメッセージのリストメソッドの詳細 |
---|
public ErrorMessages getErrorMessages()
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
- パーサ内で発生する実行時例外protected java.lang.String indexResolve(java.lang.String element)
要素名には、配列の有無に関わらず[ ]を付加する。
element
- 要素名
private java.lang.String getField()
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
- 置換文字列protected void errorLog(java.lang.String key, java.lang.Object[] options)
key
- エラーコードoptions
- 置換文字列private java.lang.String getMessage(java.lang.String key, java.lang.Object[] options)
key
- エラーコードoptions
- 置換文字列
public java.util.Stack<java.lang.String> getTagStack()
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |