org.apache.commons.jocl
クラス JOCLContentHandler

java.lang.Object
  拡張org.xml.sax.helpers.DefaultHandler
      拡張org.apache.commons.jocl.JOCLContentHandler
すべての実装インタフェース:
ContentHandler, DTDHandler, EntityResolver, ErrorHandler

public class JOCLContentHandler
extends DefaultHandler
implements ContentHandler

Java Object Configuration Language のための ContentHandler です。

JOCL は任意の Java Object インスタンスを生成するためのXMLの文法を提供します。 これは全てのXMLドキュメントタイプを定義するのではなく(ルートエレメントがありません)、XMLフラグメントの記述を 各 Object の生成に適用します。

JOCLフラグメント内でオブジェクトを定義する場合には object エレメントを使用します。 以下に簡単な例を示します:

 <object class="java.util.Date"/>
この記述は引数なしのコンストラクタで java.util.Date のインスタンスを生成します。

ルートとなる <object> が処理された後(これはXMLReader から呼ばれる endElement(java.lang.String,java.lang.String,java.lang.String) に該当します)、この生成されたオブジェクトは JOCLContentHandler 内の Object のリストに追加されます。

(size()clear()getType(int)getValue(int)getTypeArray()getValueArray() を参照ください。)

複数の object エレメントをフラグメント内に列挙することができます。 例えば以下の JOCL フラグメントを処理し、:

 <object class="java.util.Date"/>
 <object class="java.util.Date"/>
その後に getTypeArray() メソッドを呼んだ場合、2つの java.util.Date インスタンスが返されます。 配列内の Object の順番は JOCL フラグメント内の <object> エレメントの記述の順番と一致します。

上記のように子エレメントを使用しない場合、 <object> タグは指定されたクラスの引数のないコンストラクタを呼びますが、ネストした <object> タグを使用すればコンストラクタに引数を指定することができます。 例えば、:

 <object class="mypackage.Foo">
   <object class="mypackage.Bar"/>
 </object>
このフラグメントは new mypackage.Foo(new mypackage.Bar()) で生成された mypackage.Foo インスタンスをオブジェクトリストに追加します。

プリミティブ型と String の引数を生成する場合には上記とは別の文法を使用します。 以下にいくつかの例をあげます:

 <byte value="3"/>
 <boolean value="false"/>
 <char value="c"/>
 <double value="3.14159"/>
 <float value="3.14"/>
 <int value="17"/>
 <long value="1700000"/>
 <short value="1"/>
 <string value="The quick brown fox..."/>

ルートレベル(親に <object> を持たない位置)に上記プリミティブ型のフラグメントが合った場合には、 各プリミティブ型に該当するラッパークラスが生成され、Object のリストに追加されます。 しかし、これらのオブジェクトに対する type は適切なプリミティブ型を返します。 <object> を親に持つ状態で記述された場合には指定された Object のコンストラクタのプリミティブ型の引数として扱われます。例えば、:

 <int value="5"/>
 <int value="26"/>
 <int value="100"/>

の処理は3つの Integer インスタンスを値のリストに追加し、 Integer.TYPE を型のリストに追加します。 従って、 mypackage.Foo(java.lang.Integer,java.lang.Integer,java.lang.Integer) というコンストラクタを呼ぶ場合は以下のようになります:

 <object class="mypackage.Foo"/>
   <object class="java.lang.Integer"><int value="5"/></object>
   <object class="java.lang.Integer"><int value="26"/></object>
   <object class="java.lang.Integer"><int value="100"/></object>
 </object>

また、 mypackage.Foo(int,int,int) というコンストラクタを呼ぶ場合は以下のようになります:

 <object class="mypackage.Foo"/>
   <int value="5"/>
   <int value="26"/>
   <int value="100"/>
 </object>

null オブジェクトを生成したい場合には以下のようになります:

 <object class="mypackage.Bar" null="true"/>

以下に単純ですが、全てのパターンを網羅した例を示します:

 <?xml version="1.0"?>
 <arbitrary-root xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
   <string value="Hello World!"/>
   <string/>
   <boolean/>
   <boolean value="true"/>
   <byte value="1"/>
   <short value="1"/>
   <int value="1"/>
   <long value="1"/>
   <float value="1.0"/>
   <double value="1.0"/>
   <object class="java.util.Date"/>
   <object class="java.util.Date">
    <int value="1"/>
    <int value="1"/>
    <int value="1"/>
   </object>
 </arbitrary-root>

正式な JOCL の文法を表す DTD は以下のようになります:

 <!ELEMENT object (object|byte|boolean|char|double|float|int|long|short|string)*>
 <!ATTLIST object
   class CDATA #REQUIRED
   null (true|false) "false">

 <!ELEMENT byte EMPTY>
 <!ATTLIST byte value CDATA #REQUIRED>

 <!ELEMENT boolean EMPTY>
 <!ATTLIST boolean value (true|false) #REQUIRED>

 <!ELEMENT char EMPTY>
 <!ATTLIST char value CDATA #REQUIRED>

 <!ELEMENT double EMPTY>
 <!ATTLIST double value CDATA #REQUIRED>

 <!ELEMENT float EMPTY>
 <!ATTLIST float value CDATA #REQUIRED>

 <!ELEMENT int EMPTY>
 <!ATTLIST int value CDATA #REQUIRED>

 <!ELEMENT long EMPTY>
 <!ATTLIST long value CDATA #REQUIRED>

 <!ELEMENT short EMPTY>
 <!ATTLIST short value CDATA #REQUIRED>

 <!ELEMENT string EMPTY>
 <!ATTLIST string value CDATA #REQUIRED>
 

また、このクラスは文法の一部として JOCL を使用する ContentHandler の基底クラスとして使用することができます。 単純にこのクラスを継承し、新たなタグを処理するために startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)DefaultHandler.characters(char[], int, int) endElement(java.lang.String, java.lang.String, java.lang.String) をオーバーライドし、JOCL で定義されたエレメントとデータを処理するために親クラスのメソッド (例. super.XXX) をコールして下さい。

簡単に InputStreamReaderInputSource からオブジェクトのリストを読み込むことのできる複数の static メソッドが利用可能です。

このクラスは synchronized ではない事に注意してください。

バージョン:
$Id: JOCLContentHandler.java,v 1.1.1.1 2004/02/13 10:02:03 hioki Exp $
作成者:
Rodney Waldhoff
翻訳者:
日置 聡

フィールドの概要
protected  boolean _acceptEmptyNamespaceForAttributes
          true の場合、ネームスペースURIを持たない属性を JOCL ネームスペースの一部として扱います。
protected  boolean _acceptEmptyNamespaceForElements
          true の場合、ネームスペースURIを持たないエレメントを JOCL ネームスペースの一部として扱います。
protected  boolean _acceptJoclPrefixForAttributes
          true の場合、 JOCL_PREFIX を持つがネームスペースURIを持たない属性を JOCL ネームスペースにマッピングします。
protected  boolean _acceptJoclPrefixForElements
          true の場合、 JOCL_PREFIX を持つがネームスペースURIを持たないエレメントを JOCL ネームスペースにマッピングします。
protected  org.apache.commons.jocl.JOCLContentHandler.ConstructorDetails _cur
          現在処理中のオブジェクト。
protected  Locator _locator
          内部で使用する Locator
protected  ArrayList _typeList
          パース処理にて生成された型( Class )のリスト。
protected  ArrayList _valueList
          パース処理にて生成された値( Object )のリスト。
protected static String ATT_CLASS
          "object" エレメントの "class" 属性名。
protected static String ATT_ISNULL
          "object" エレメントの "isnull" 属性名。
protected static String ATT_VALUE
          "value" 属性名。
protected static String ELT_BOOLEAN
          "boolean" エレメント名。
protected static String ELT_BYTE
          "byte" エレメント名。
protected static String ELT_CHAR
          "char" エレメント名。
protected static String ELT_DOUBLE
          "double" エレメント名。
protected static String ELT_FLOAT
          "float" エレメント名。
protected static String ELT_INT
          "int" エレメント名。
protected static String ELT_LONG
          "long" エレメント名。
protected static String ELT_OBJECT
          "object" エレメント名。
protected static String ELT_SHORT
          "short" エレメント名。
protected static String ELT_STRING
          "string" エレメント名。
static String JOCL_NAMESPACE_URI
          JOCL ネームスペース URI、 http://apache.org/xml/xmlns/jakarta/commons/jocl
static String JOCL_PREFIX
          デフォルト JOCL プレフィックス、 jocl:
 
コンストラクタの概要
JOCLContentHandler()
          JOCLContentHandler(true,true,true,true) と同等です。
JOCLContentHandler(boolean emptyEltNS, boolean joclEltPrefix, boolean emptyAttrNS, boolean joclAttrPrefix)
          JOCLContentHandler を生成します。
 
メソッドの概要
protected  void addObject(Class type, Object val)
          指定されたオブジェクトを型/値のリストか、現在生成中ののオブジェクトのコンストラクタの引数のいずれかに追加します。
 void clear()
          リスト内の全ての値と型の数を削除します。
 void clear(int i)
          指定されたインデックスの値/型のペアを削除します。
 void endElement(String uri, String localName, String qname)
           
protected  String getAttributeValue(String localname, Attributes attr)
          getAttributeValue(localname,attr,null) と同等です。
protected  String getAttributeValue(String localname, Attributes attr, String implied)
          JOCL ネームスペース内の指定された localname に該当する属性の値を指定された Attributes の中から返します。
 Class getType(int i)
          指定されたインデックスのオブジェクトの型を返します。
 Object[] getTypeArray()
          型のリストのシャローコピーを返します。
 Object getValue(int i)
          指定されたインデックスのオブジェクトの値を返します。
 Object[] getValueArray()
          値のリストのシャローコピーを返します。
protected  boolean isJoclNamespace(String uri, String localname, String qname)
          指定されたエレメントを定義する属性が(現在の設定で) JOCL ネームスペースに含まれる場合、 true を返します。
static void main(String[] args)
          単純なテストメソッドです。
static JOCLContentHandler parse(File f)
          org.xml.sax.driver プロパティで指定された XMLReader を使用して指定されたファイルから JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(File f, XMLReader reader)
          指定された XMLReader を使用して指定された ファイル から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(InputSource in)
          org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された InputSource から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(InputSource in, XMLReader reader)
          指定された XMLReader を使用して指定された InputSource から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(InputStream in)
          org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された InputStream から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(InputStream in, XMLReader reader)
          指定された XMLReader を使用して指定された InputStream から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(Reader in)
          org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された Reader から JOCL ドキュメントを読み込み、パースします。
static JOCLContentHandler parse(Reader in, XMLReader reader)
          指定された XMLReader を使用して指定された Reader から JOCL ドキュメントを読み込み、パースします。
 void setDocumentLocator(Locator locator)
           
 int size()
          リスト内の値と型の数を返します。
 void startElement(String uri, String localName, String qname, Attributes attr)
           
 
クラス org.xml.sax.helpers.DefaultHandler から継承したメソッド
characters, endDocument, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
インタフェース org.xml.sax.ContentHandler から継承したメソッド
characters, endDocument, endPrefixMapping, ignorableWhitespace, processingInstruction, skippedEntity, startDocument, startPrefixMapping
 

フィールドの詳細

_acceptEmptyNamespaceForAttributes

protected boolean _acceptEmptyNamespaceForAttributes
true の場合、ネームスペースURIを持たない属性を JOCL ネームスペースの一部として扱います。

関連項目:
JOCL_NAMESPACE_URI

_acceptEmptyNamespaceForElements

protected boolean _acceptEmptyNamespaceForElements
true の場合、ネームスペースURIを持たないエレメントを JOCL ネームスペースの一部として扱います。

関連項目:
JOCL_NAMESPACE_URI

_acceptJoclPrefixForAttributes

protected boolean _acceptJoclPrefixForAttributes
true の場合、 JOCL_PREFIX を持つがネームスペースURIを持たない属性を JOCL ネームスペースにマッピングします。

関連項目:
JOCL_PREFIX, JOCL_NAMESPACE_URI

_acceptJoclPrefixForElements

protected boolean _acceptJoclPrefixForElements
true の場合、 JOCL_PREFIX を持つがネームスペースURIを持たないエレメントを JOCL ネームスペースにマッピングします。

関連項目:
JOCL_PREFIX, JOCL_NAMESPACE_URI

_cur

protected org.apache.commons.jocl.JOCLContentHandler.ConstructorDetails _cur
現在処理中のオブジェクト。


_locator

protected Locator _locator
内部で使用する Locator


_typeList

protected ArrayList _typeList
パース処理にて生成された型( Class )のリスト。


_valueList

protected ArrayList _valueList
パース処理にて生成された値( Object )のリスト。


ATT_CLASS

protected static final String ATT_CLASS
"object" エレメントの "class" 属性名。

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

ATT_ISNULL

protected static final String ATT_ISNULL
"object" エレメントの "isnull" 属性名。

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

ATT_VALUE

protected static final String ATT_VALUE
"value" 属性名。

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

ELT_BOOLEAN

protected static final String ELT_BOOLEAN
"boolean" エレメント名。

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

ELT_BYTE

protected static final String ELT_BYTE
"byte" エレメント名。

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

ELT_CHAR

protected static final String ELT_CHAR
"char" エレメント名。

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

ELT_DOUBLE

protected static final String ELT_DOUBLE
"double" エレメント名。

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

ELT_FLOAT

protected static final String ELT_FLOAT
"float" エレメント名。

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

ELT_INT

protected static final String ELT_INT
"int" エレメント名。

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

ELT_LONG

protected static final String ELT_LONG
"long" エレメント名。

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

ELT_OBJECT

protected static final String ELT_OBJECT
"object" エレメント名。

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

ELT_SHORT

protected static final String ELT_SHORT
"short" エレメント名。

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

ELT_STRING

protected static final String ELT_STRING
"string" エレメント名。

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

JOCL_NAMESPACE_URI

public static final String JOCL_NAMESPACE_URI
JOCL ネームスペース URI、 http://apache.org/xml/xmlns/jakarta/commons/jocl

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

JOCL_PREFIX

public static final String JOCL_PREFIX
デフォルト JOCL プレフィックス、 jocl:

関連項目:
定数フィールド値
コンストラクタの詳細

JOCLContentHandler

public JOCLContentHandler()
JOCLContentHandler(true,true,true,true) と同等です。


JOCLContentHandler

public JOCLContentHandler(boolean emptyEltNS,
                          boolean joclEltPrefix,
                          boolean emptyAttrNS,
                          boolean joclAttrPrefix)
JOCLContentHandler を生成します。

パラメータ:
emptyEltNS - true の場合、ネームスペースのない全てのエレメントを JOCL ネームスペースに含まれるとみなします
joclEltPrefix - true の場合、jocl: のプレフィックスを持ち、ネームスペースのないエレメントを JOCL ネームスペースに含まれるとみなします
emptyAttrNS - true の場合、ネームスペースのない全ての属性を JOCL ネームスペースに含まれるとみなします
joclAttrPrefix - true の場合、jocl: のプレフィックスを持ち、ネームスペースのない属性を JOCL ネームスペースに含まれるとみなします
メソッドの詳細

addObject

protected void addObject(Class type,
                         Object val)
指定されたオブジェクトを型/値のリストか、現在生成中ののオブジェクトのコンストラクタの引数のいずれかに追加します。


clear

public void clear()
リスト内の全ての値と型の数を削除します。


clear

public void clear(int i)
指定されたインデックスの値/型のペアを削除します。


endElement

public void endElement(String uri,
                       String localName,
                       String qname)
                throws SAXException
定義:
インタフェース ContentHandler 内の endElement
例外:
SAXException

getAttributeValue

protected String getAttributeValue(String localname,
                                   Attributes attr)
getAttributeValue(localname,attr,null) と同等です。


getAttributeValue

protected String getAttributeValue(String localname,
                                   Attributes attr,
                                   String implied)
JOCL ネームスペース内の指定された localname に該当する属性の値を指定された Attributes の中から返します。 該当する属性が見つからない場合、implied を返します。

パラメータ:
localname - 前置修飾子を含まない検索対象となる属性名
attr - 値を探す対象となる属性一覧
implied - 属性のデフォルトの値
戻り値:
the Attributes の中の JOCL ネームスペース内の指定された localname に該当する属性の値、 該当する属性が見つからない場合、implied

getType

public Class getType(int i)
指定されたインデックスのオブジェクトの型を返します。


getTypeArray

public Object[] getTypeArray()
型のリストのシャローコピーを返します。


getValue

public Object getValue(int i)
指定されたインデックスのオブジェクトの値を返します。


getValueArray

public Object[] getValueArray()
値のリストのシャローコピーを返します。


isJoclNamespace

protected boolean isJoclNamespace(String uri,
                                  String localname,
                                  String qname)
指定されたエレメントを定義する属性が(現在の設定で) JOCL ネームスペースに含まれる場合、 true を返します。

関連項目:
_acceptEmptyNamespaceForElements, _acceptJoclPrefixForElements

main

public static void main(String[] args)
                 throws Exception
単純なテストメソッドです。 標準入力から JOCL を読み込み、生成されたオブジェクトのリストを標準出力に書き出します。 (XMLReader を指定するためには org.xml.sax.driver システムプロパティを使用してください。)

例外:
Exception

parse

public static JOCLContentHandler parse(File f)
                                throws SAXException,
                                       FileNotFoundException,
                                       IOException
org.xml.sax.driver プロパティで指定された XMLReader を使用して指定されたファイルから JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
f - JOCL ドキュメントを含む File
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
FileNotFoundException
IOException

parse

public static JOCLContentHandler parse(File f,
                                       XMLReader reader)
                                throws SAXException,
                                       FileNotFoundException,
                                       IOException
指定された XMLReader を使用して指定された ファイル から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
f - JOCL ドキュメントを含む File
reader - ファイルをパーすする際に使用される XMLReader
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
FileNotFoundException
IOException

parse

public static JOCLContentHandler parse(InputSource in)
                                throws SAXException,
                                       IOException
org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された InputSource から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む InputSource
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

parse

public static JOCLContentHandler parse(InputSource in,
                                       XMLReader reader)
                                throws SAXException,
                                       IOException
指定された XMLReader を使用して指定された InputSource から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む InputSource
reader - ファイルをパーすする際に使用される XMLReader
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

parse

public static JOCLContentHandler parse(InputStream in)
                                throws SAXException,
                                       IOException
org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された InputStream から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む InputStream
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

parse

public static JOCLContentHandler parse(InputStream in,
                                       XMLReader reader)
                                throws SAXException,
                                       IOException
指定された XMLReader を使用して指定された InputStream から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む InputStream
reader - ファイルをパーすする際に使用される XMLReader
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

parse

public static JOCLContentHandler parse(Reader in)
                                throws SAXException,
                                       IOException
org.xml.sax.driver プロパティで指定された XMLReader を使用して指定された Reader から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む Reader
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

parse

public static JOCLContentHandler parse(Reader in,
                                       XMLReader reader)
                                throws SAXException,
                                       IOException
指定された XMLReader を使用して指定された Reader から JOCL ドキュメントを読み込み、パースします。 返される JOCLContentHandler はファイルに記述されたオブジェクトのリストを内部に持ちます。

パラメータ:
in - JOCL ドキュメントを含む Reader
reader - ファイルをパーすする際に使用される XMLReader
戻り値:
JOCL ドキュメントに記述されたオブジェクトの配列を内部に持つ JOCLContentHandler
例外:
SAXException
IOException

setDocumentLocator

public void setDocumentLocator(Locator locator)
定義:
インタフェース ContentHandler 内の setDocumentLocator

size

public int size()
リスト内の値と型の数を返します。

戻り値:
リスト内の値と型の数

startElement

public void startElement(String uri,
                         String localName,
                         String qname,
                         Attributes attr)
                  throws SAXException
定義:
インタフェース ContentHandler 内の startElement
例外:
SAXException


このドキュメントは、Ja-Jakartaにより訳されました。 コメントがある場合は report@jajakarta.orgまでお願いします。
Translated into Japanese by jajakarta.org. The original page is here.
Copyright (c) 2002-2003 - Apache Software Foundation