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

java.lang.Object
  上位を拡張 jp.terasoluna.fw.oxm.xsd.xerces.SchemaValidatorImpl
すべての実装されたインタフェース:
SchemaValidator

public class SchemaValidatorImpl
extends java.lang.Object
implements SchemaValidator

XMLデータの形式チェックを行うSchemaValidator実装クラス。

形式チェックにはスキーマ定義ファイルを使用する。 本クラスはシングルトンとして使用すること。

スキーマ定義ファイルは変換を行うオブジェクトのクラスと 同じパッケージ、 同じ名前、拡張子”.xsd”で配置すること。
例)XML変換対象のオブジェクトが「sample.SampleBean」クラスの場合、 スキーマ定義ファイルはクラスパス上の「sample/SampleBean.xsd」 ファイルとなる。

XMLのパースにはDOMパーサが必要となる。 TERASOLUNAでは詳細なエラー情報を取得するために、 拡張したXML11ConfigurationExXMLErrorReporterExを利用する。


名前空間の設定

本クラスは、スキーマ定義に名前空間を使用することができる。 名前空間を使用する場合、namespace属性にtrueを設定する必要がある。 デフォルトはfalseで、名前空間を使用しない設定になっている。 名前空間を使用する場合、スキーマ定義ファイルのキャッシュを行うことができる。 名前空間を使用するためには、以下の設定が必要である。


【名前空間のプロパティファイル(nemaspace.properties)の設定例】
例)XML変換対象のオブジェクトが「sample.SampleBean」クラス、名前空間が 「http://xxx.co.jp/sample/samplebean」の場合、 プロパティファイルに下記の設定を行う。

jp.terasoluna.sample2.dto.SumParam.Namespace = http://xxx.co.jp/sample/samplebean


名前空間を使用しない場合のスキーマファイル設定例

【形式チェック対象のXMLデータ】

   <sample-dto>
     <user-id>15</user-id>
     <user-name>user1</user-name>
     <item>
       <id>100</id>
       <name>item1</name>
       <price>1000</price>
     </item>
     <item>
       <id>101</id>
       <name>item2</name>
       <price>2000</price>
     </item>
   </sample-dto>
 

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

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     <xs:element name="sample-dto" type="sample-dto-type"/>
     <xs:complexType name="sample-dto-type">
       <xs:sequence>
         <xs:element name="user-id" type="xs:int" />
         <xs:element name="user-name" type="xs:string" />
         <xs:element name="item" type="item-type" minOccurs="0" maxOccurs="unbounded" />
       </xs:sequence>
     </xs:complexType>
     <xs:complexType name="item-type">
       <xs:sequence>
          <xs:element name="id" type="xs:int" />
         <xs:element name="name" type="xs:string" />
         <xs:element name="price" type="xs:int" />
       </xs:sequence>
     </xs:complexType>
   </xs:schema>
 


名前空間を使用する場合のスキーマファイル設定例

【形式チェック対象のXMLデータサンプル】 <sample-dto xmlns="http://xxx.co.jp/sample/samplebean"> <user-id>15</user-id> <user-name>user1</user-name> <item> <id>100</id> <name>item1</name> <price>1000</price> </item> <item> <id>101</id> <name>item2</name> <price>2000</price> </item> </sample-dto> 【スキーマ定義ファイルの設定サンプル】 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xxx.co.jp/sample/samplebean" targetNamespace="http://xxx.co.jp/sample/samplebean" elementFormDefault="qualified"> <xs:element name="sample-dto" type="tns:sample-dto-type"/> <xs:complexType name="sample-dto-type"> <xs:sequence> <xs:element name="user-id" type="xs:int"/> <xs:element name="user-name" type="xs:string"/> <xs:element name="item" type="tns:item-type" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="item-type"> <xs:sequence> <xs:element name="id" type="xs:int"/> <xs:element name="name" type="xs:string"/> <xs:element name="price" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:schema>

関連項目:
XML11ConfigurationEx, ErrorMessages, XMLErrorReporterEx, XMLServletRequestDataBinder, XMLGrammarPoolImpl

フィールドの概要
protected  boolean cache
          スキーマ定義のキャッシュ使用設定。
protected  org.apache.xerces.xni.grammars.XMLGrammarPool grammarPool
          名前空間の文法プール。
private static org.apache.commons.logging.Log log
          ログクラス。
private static java.lang.String NAME_SPACE_SUFFIX
          プロパティファイルからネームスペース名を取得するキーの接尾辞。
protected  boolean namespace
          名前空間の使用設定。
protected  boolean namespaceCheck
          名前空間のチェック設定。
protected  java.util.Properties namespaceProperties
          クラス名と名前空間のマッピングを定義したプロパティ。
protected  java.lang.String namespacePropertyFileName
          クラス名と名前空間のマッピングを定義したプロパティファイル名。
static java.lang.String NESTED_FOLDER_SEPARATOR
          フォルダのセパレータ。
static java.lang.String NESTED_PACKAGE_SEPARATOR
          パッケージのセパレータ。
static java.lang.String XSD_FILE_SUFFIX
          スキーマ定義ファイルのサフィックス。
 
コンストラクタの概要
SchemaValidatorImpl()
           
 
メソッドの概要
protected  void checkNamespaceProperties()
          名前空間が重複していないかのチェックを行う。
protected  org.apache.xerces.parsers.DOMParser createDomParser(java.lang.Object object)
          DOMパーサを生成する。
protected  org.apache.xerces.xni.parser.XMLParserConfiguration createXmlParserConfiguration()
          XMLParserConfigurationを生成する。
protected  java.lang.String getNamespaceName(java.lang.Object object)
          プロパティファイルから名前空間を取得する。
protected  java.lang.String getSchemaFilePath(java.lang.Object object)
          スキーマファイルのパスを取得する。
protected  java.net.URL getUrl(java.lang.Object object)
          URLを取得する。
 void initNamespaceProperties()
          初期化時に名前空間をプロパティに設定する。
protected  void loadNamespaceProperties()
          名前空間が定義されたプロパティファイルを読み込み、属性にセットする。
 void setCache(boolean cache)
          スキーマ定義のキャッシュ使用設定を行う。
protected  void setCommonParserFeature(org.apache.xerces.parsers.DOMParser parser)
          パーサ共通のFeatureを設定する
protected  void setCommonParserProperty(org.apache.xerces.parsers.DOMParser parser, ErrorMessages errorMessages)
          パーサ共通のPropertyを設定する。
 void setNamespace(boolean namespace)
          名前空間の使用設定を行う。
 void setNamespaceCheck(boolean namespaceCheck)
          名前空間のチェック設定を行う。
 void setNamespaceProperties(java.util.Properties namespaceProperties)
          クラス名と名前空間のマッピングを定義したプロパティを設定する
 void setNamespacePropertyFileName(java.lang.String namespacePropertyFileName)
          クラス名と名前空間のマッピングを定義したプロパティファイル名を設定する。
 org.w3c.dom.Document validate(java.io.InputStream in, java.lang.Object object, ErrorMessages errorMessages)
          XMLデータの形式チェックを行うメソッド。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

log

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


NESTED_PACKAGE_SEPARATOR

public static final java.lang.String NESTED_PACKAGE_SEPARATOR
パッケージのセパレータ。

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

NESTED_FOLDER_SEPARATOR

public static final java.lang.String NESTED_FOLDER_SEPARATOR
フォルダのセパレータ。

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

XSD_FILE_SUFFIX

public static final java.lang.String XSD_FILE_SUFFIX
スキーマ定義ファイルのサフィックス。

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

NAME_SPACE_SUFFIX

private static final java.lang.String NAME_SPACE_SUFFIX
プロパティファイルからネームスペース名を取得するキーの接尾辞。

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

namespacePropertyFileName

protected java.lang.String namespacePropertyFileName
クラス名と名前空間のマッピングを定義したプロパティファイル名。


cache

protected boolean cache
スキーマ定義のキャッシュ使用設定。 ※名前空間を使用する場合のみ、キャッシュが行なわれる。


namespace

protected boolean namespace
名前空間の使用設定。


grammarPool

protected org.apache.xerces.xni.grammars.XMLGrammarPool grammarPool
名前空間の文法プール。


namespaceProperties

protected java.util.Properties namespaceProperties
クラス名と名前空間のマッピングを定義したプロパティ。


namespaceCheck

protected boolean namespaceCheck
名前空間のチェック設定。

コンストラクタの詳細

SchemaValidatorImpl

public SchemaValidatorImpl()
メソッドの詳細

setCache

public void setCache(boolean cache)
スキーマ定義のキャッシュ使用設定を行う。

パラメータ:
cache - スキーマ定義ファイルのキャッシュを行う場合、true

setNamespace

public void setNamespace(boolean namespace)
名前空間の使用設定を行う。

パラメータ:
namespace - 名前空間を使用する場合、true

setNamespaceCheck

public void setNamespaceCheck(boolean namespaceCheck)
名前空間のチェック設定を行う。

パラメータ:
namespaceCheck - 名前空間をチェックする場合、true

setNamespaceProperties

public void setNamespaceProperties(java.util.Properties namespaceProperties)
クラス名と名前空間のマッピングを定義したプロパティを設定する

パラメータ:
namespaceProperties - クラス名と名前空間のマッピングを定義したプロパティ

setNamespacePropertyFileName

public void setNamespacePropertyFileName(java.lang.String namespacePropertyFileName)
クラス名と名前空間のマッピングを定義したプロパティファイル名を設定する。

パラメータ:
namespacePropertyFileName - クラス名と名前空間のマッピングを定義したプロパティファイル名

initNamespaceProperties

public void initNamespaceProperties()
初期化時に名前空間をプロパティに設定する。


loadNamespaceProperties

protected void loadNamespaceProperties()
名前空間が定義されたプロパティファイルを読み込み、属性にセットする。


checkNamespaceProperties

protected void checkNamespaceProperties()
名前空間が重複していないかのチェックを行う。


validate

public org.w3c.dom.Document validate(java.io.InputStream in,
                                     java.lang.Object object,
                                     ErrorMessages errorMessages)
XMLデータの形式チェックを行うメソッド。

XMLデータをDOMツリーに変換する際に、XMLスキーマによる 形式チェック(妥当性検証)を実行する。
形式チェックには、スキーマ定義ファイルを用いる。

正常に形式チェックが終了した場合、DOMツリーを返却する。
ユーザの入力が原因と考えられるデータ型のエラーが発生した場合、引数のerrorMessagesにエラー情報を格納して、nullを返却する。
それ以外のエラーに関しては、OXMappingExceptionのサブクラスにラップしてスローする。

定義:
インタフェース SchemaValidator 内の validate
パラメータ:
in - XMLデータ
object - 変換対象のオブジェクト
errorMessages - エラーメッセージが格納されるインスタンス
戻り値:
DOMツリー

createDomParser

protected org.apache.xerces.parsers.DOMParser createDomParser(java.lang.Object object)
                                                       throws org.xml.sax.SAXNotRecognizedException,
                                                              org.xml.sax.SAXNotSupportedException
DOMパーサを生成する。

パラメータ:
object - パース対象のオブジェクト
戻り値:
DOMパーサ
例外:
org.xml.sax.SAXNotSupportedException - 認識できないキーが設定された場合にスローされる例外
org.xml.sax.SAXNotRecognizedException - サポートされていない値が設定された場合にスローされる例外

createXmlParserConfiguration

protected org.apache.xerces.xni.parser.XMLParserConfiguration createXmlParserConfiguration()
XMLParserConfigurationを生成する。 名前空間とキャッシュの使用を有効にしている場合、 スキーマファイルのキャッシュを利用する。

戻り値:
XMLParserConfiguration XMLパーサの設定を保持するオブジェクト

setCommonParserProperty

protected void setCommonParserProperty(org.apache.xerces.parsers.DOMParser parser,
                                       ErrorMessages errorMessages)
                                throws org.xml.sax.SAXNotRecognizedException,
                                       org.xml.sax.SAXNotSupportedException
パーサ共通のPropertyを設定する。

パラメータ:
parser - DOMパーサ
errorMessages - エラー
例外:
org.xml.sax.SAXNotRecognizedException - 認識できないキーが設定された場合にスローされる例外
org.xml.sax.SAXNotSupportedException - サポートされていない値が設定された場合にスローされる例外

setCommonParserFeature

protected void setCommonParserFeature(org.apache.xerces.parsers.DOMParser parser)
                               throws org.xml.sax.SAXNotRecognizedException,
                                      org.xml.sax.SAXNotSupportedException
パーサ共通のFeatureを設定する

パラメータ:
parser - DOMパーサ
例外:
org.xml.sax.SAXNotRecognizedException - 認識できないキーが設定された場合にスローされる例外
org.xml.sax.SAXNotSupportedException - サポートされていない値が設定された場合にスローされる例外

getUrl

protected java.net.URL getUrl(java.lang.Object object)
URLを取得する。

引数のオブジェクトと同一のクラスパスから、定義ファイルを取得する

パラメータ:
object - オブジェクト
戻り値:
リソースのURLインスタンス

getSchemaFilePath

protected java.lang.String getSchemaFilePath(java.lang.Object object)
スキーマファイルのパスを取得する。

パラメータ:
object - スキーマチェック対象のオブジェクト
戻り値:
スキーマファイルのパス

getNamespaceName

protected java.lang.String getNamespaceName(java.lang.Object object)
プロパティファイルから名前空間を取得する。 名前空間を使用しない場合、nullを返す。 必要な名前空間が設定されていない場合、実行時例外を投げる。

パラメータ:
object - オブジェクト
戻り値:
リソースのURLインスタンス