public interface Marshaller
Marshaller クラスは、Java コンテンツツリーを直列化して XML データに戻すプロセスの制御を担います。このクラスは、基本的な整列化メソッドを提供します。
下のすべてのコードフラグメントでは、次のセットアップコードを前提とします。
JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" ); Unmarshaller u = jc.createUnmarshaller(); Object element = u.unmarshal( new File( "foo.xml" ) ); Marshaller m = jc.createMarshaller();
ファイルに整列化します。
OutputStream os = new FileOutputStream( "nosferatu.xml" ); m.marshal( element, os );
SAX ContentHandler に整列化します。
// assume MyContentHandler instanceof ContentHandler m.marshal( element, new MyContentHandler() );
DOM Node に整列化します。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); m.marshal( element, doc );
java.io.OutputStream に整列化します。
m.marshal( element, System.out );
java.io.Writer に整列化します。
m.marshal( element, new PrintWriter( System.out ) );
javax.xml.transform.SAXResult に整列化します。
// assume MyContentHandler instanceof ContentHandler SAXResult result = new SAXResult( new MyContentHandler() ); m.marshal( element, result );
javax.xml.transform.DOMResult に整列化します。
DOMResult result = new DOMResult(); m.marshal( element, result );
javax.xml.transform.StreamResult に整列化します。
StreamResult result = new StreamResult( System.out ); m.marshal( element, result );
javax.xml.stream.XMLStreamWriter に整列化します。
XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter( ... ); m.marshal( element, xmlStreamWriter );
javax.xml.stream.XMLEventWriter に整列化します。
XMLEventWriter xmlEventWriter = XMLOutputFactory.newInstance().createXMLEventWriter( ... ); m.marshal( element, xmlEventWriter );
オーバーロードされた Marshaller.marshal(java.lang.Object, ...) メソッドの最初のパラメータは、JAXBIntrospector.isElement(java.lang.Object)
によって計算された JAXB 要素である必要があります。これを満たさない場合、Marshaller.marshal メソッドはMarshalException
をスローする必要があります。JAXB 要素でないインスタンスの整列化を可能にするために、2 つのメカニズムが存在します。1 つの方法は、JAXBElement
の値としてインスタンスをラップし、ラッパー要素を Marshaller.marshal メソッドへの最初のパラメータとして渡すことです。Java からスキーマへのバインディングの場合は、インスタンスのクラスを @XmlRootElement
で単に注釈することもできます。
エンコーディング
デフォルトでは、XML データを java.io.OutputStream または java.io.Writer に生成する場合、Marshaller は UTF-8 エンコーディングを使用します。これらの整列化操作中に使用される出力エンコーディングを変更するには、setProperty
API を使用します。クライアントアプリケーションは、W3C XML 1.0 Recommendation で定義され、使用している Java プラットフォームがサポートしている有効な文字エンコーディング名を提供することを期待されます。
検証と整形式
クライアントアプリケーションは、整列化 API のいずれかを呼び出す前に、Java コンテンツツリーを検証することを求められません。さらに、Java コンテンツツリーを整列化して XML データに戻すために、Java コンテンツツリーの元となるスキーマに関してその Java コンテンツツリーが有効でなければならないという要件はありません。JAXB プロバイダごとにさまざまなレベルで無効な Java コンテンツツリーの整列化処理が今後サポートされるようになりますが、すべての JAXB プロバイダは有効なコンテンツツリーを XML データに整列化して戻せるようにする必要があります。JAXB プロバイダは、コンテンツが無効なために整列化操作を完了できない場合、MarshalException をスローする必要があります。JAXB プロバイダによっては無効なコンテンツの整列化を完全に許可していますが、最初の検証エラーで失敗するものもあります。
整列化操作でスキーマ検証が明示的に有効にされていない場合であっても、操作中に特定の検証イベントが検出される可能性があります。検証イベントは、登録されているイベントハンドラに報告されます。整列化 API のいずれかを呼び出す前に、クライアントアプリケーションがイベントハンドラの登録を済ませていない場合、イベントはデフォルトイベントハンドラに転送されます。デフォルトイベントハンドラは、最初のエラーまたは致命的なエラーの発生後に整列化操作を終了させます。JAXB 2.0 以降のバージョンでは、
DefaultValidationEventHandler
は使用されなくなりました。
すべての JAXB プロバイダは、次のプロパティーセットをサポートする必要があります。プロバイダによっては、追加のプロパティーをサポートする可能性があります。
- jaxb.encoding - 値は java.lang.String である必要があります
- XML データを整列化するときに使用される出力エンコーディングです。このプロパティーが指定されない場合、Marshaller はデフォルトで「UTF-8」を使用します。
- jaxb.formatted.output - 値は java.lang.Boolean である必要があります
- このプロパティーは、Marshaller が改行とインデントを使用して結果として得られる XML データを書式設定するかどうかを制御します。このプロパティーの値が true の場合、人が判読できるインデント処理された XML データとなり、false の場合、書式設定されない XML データになります。このプロパティーが指定されない場合、Marshaller はデフォルトで false (書式設定されない) になります。
- jaxb.schemaLocation - 値は Java.lang.String である必要があります
- このプロパティーにより、生成 XML データの xsi:schemaLocation 属性をクライアントアプリケーションが指定することができます。schemaLocation 属性値の形式については、「W3C XML Schema Part 0: Primer」のセクション 5.6 に非規定的な形式でわかりやすく説明され、「W3C XML Schema Part 1: Structures」のセクション 2.6 に規定されています。
- jaxb.noNamespaceSchemaLocation - 値は Java.lang.String である必要があります
- このプロパティーにより、生成 XML データの xsi:noNamespaceSchemaLocation 属性をクライアントアプリケーションが指定することができます。schemaLocation 属性値の形式については、「W3C XML Schema Part 0: Primer」のセクション 5.6 に非規定的な形式でわかりやすく説明され、「W3C XML Schema Part 1: Structures」のセクション 2.6 に規定されています。
- jaxb.fragment - 値は java.lang.Boolean である必要があります
- このプロパティーは、文書レベルのイベントが Marshaller によって生成されるかどうかを決定します。このプロパティーが指定されない場合、デフォルトは false になります。このプロパティーに true が設定された場合、使用する整列化 API に応じて次のように異なる意味を持ちます。
marshal(Object,ContentHandler)
- Marshaller はContentHandler.startDocument()
とContentHandler.endDocument()
を呼び出しません。marshal(Object,Node)
- プロパティーはこの API に影響を与えません。marshal(Object,OutputStream)
- Marshaller は XML 宣言を生成しません。marshal(Object,Writer)
- Marshaller は XML 宣言を生成しません。marshal(Object,Result)
- Result オブジェクトの種類に依存します。Node、ContentHandler、Stream API のセマンティクスを参照してくださいmarshal(Object,XMLEventWriter)
- Marshaller はXMLStreamConstants.START_DOCUMENT
およびXMLStreamConstants.END_DOCUMENT
イベントを生成しません。marshal(Object,XMLStreamWriter)
- Marshaller はXMLStreamConstants.START_DOCUMENT
およびXMLStreamConstants.END_DOCUMENT
イベントを生成しません。
Marshaller
は、2 つのスタイルのコールバックメカニズムを提供します。これらにより、非整列化プロセスの重要な時点でのアプリケーション固有の処理が可能になります。「クラス定義された」イベントコールバックでは、JAXB マップクラスに置かれるアプリケーション固有のコードが整列化中にトリガーされます。「外部リスナー」は、型のイベントコールバックを介するのではなく、単一のコールバックメソッドでの整列化イベントの集中処理を可能にします。クラス定義されたイベントコールバックメソッドにより、任意の JAXB マップクラスは次のメソッドシグニチャーを持つメソッドを定義することによって、固有のコールバックメソッドを指定できます。
コールバックメソッドがクラスの public 以外のメソッドおよびフィールドの両方またはどちらか一方へのアクセスを必要とする場合は、クラス定義イベントコールバックメソッドを使用する必要があります。// Invoked by Marshaller after it has created an instance of this object. boolean beforeMarshal(Marshaller); // Invoked by Marshaller after it has marshalled all properties of this object. void afterMmarshal(Marshaller);外部リスナーコールバックメカニズムでは、
setListener(Listener)
にMarshaller.Listener
インスタンスを登録できます。外部リスナーはすべてのコールバックイベントを受け取るため、クラスごとに定義されるコールバックメソッドよりも、より集中的な処理が可能になります。「クラス定義された」イベントコールバックメソッドと外部リスナーイベントコールバックメソッドはそれぞれ独立しており、1 つのイベントに対し両方を呼び出すことができます。両方のリスナーコールバックメソッドが存在する場合の呼び出し順序は、
Marshaller.Listener.beforeMarshal(Object)
およびMarshaller.Listener.afterMarshal(Object)
で定義されます。例外をスローしたイベントコールバックメソッドは、現在の整列化プロセスを終了させます。
JAXBContext
、Validator
、Unmarshaller
修飾子と型 | インタフェースと説明 |
---|---|
static class |
Marshaller.Listener
Marshaller にこのクラスの実装のインスタンスを登録し、整列化イベントを外部的に待機します。 |
修飾子と型 | フィールドと説明 |
---|---|
static String |
JAXB_ENCODING
整列化された XML データの出力エンコーディングを指定するために使用されるプロパティーの名前です。
|
static String |
JAXB_FORMATTED_OUTPUT
整列化された XML データを改行とインデントを使用して書式設定するかどうかを指定するために使用されるプロパティーの名前です。
|
static String |
JAXB_FRAGMENT
marshaller が文書レベルのイベント (つまり、startDocument または endDocument の呼び出し) を生成するかどうかを指定するために使用されるプロパティーの名前です。
|
static String |
JAXB_NO_NAMESPACE_SCHEMA_LOCATION
整列化された XML 出力に設定する xsi:noNamespaceSchemaLocation 属性値を指定するために使用されるプロパティーの名前です。
|
static String |
JAXB_SCHEMA_LOCATION
整列化された XML 出力に設定する xsi:schemaLocation 属性値を指定するために使用されるプロパティーの名前です。
|
修飾子と型 | メソッドと説明 |
---|---|
<A extends XmlAdapter> |
getAdapter(Class<A> type)
指定した型に関連付けられているアダプタを取得します。
|
AttachmentMarshaller |
getAttachmentMarshaller() |
ValidationEventHandler |
getEventHandler()
現在のイベントハンドラ、または、それが設定されていない場合はデフォルトイベントハンドラを返します。
|
Marshaller.Listener |
getListener()
この
Marshaller に登録された Marshaller.Listener を返します。 |
Node |
getNode(Object contentTree)
コンテンツツリーの DOM ツリービューを取得します (オプション)。
|
Object |
getProperty(String name)
Marshaller の基本となる実装の特定のプロパティーを取得します。
|
Schema |
getSchema()
整列化時の検証に使用される JAXP 1.3
Schema オブジェクトを取得します。 |
void |
marshal(Object jaxbElement, ContentHandler handler)
jaxbElement をルートとするコンテンツツリーを SAX2 イベントに整列化します。
|
void |
marshal(Object jaxbElement, File output)
jaxbElement をルートとするコンテンツツリーをファイルに整列化します。
|
void |
marshal(Object jaxbElement, Node node)
jaxbElement をルートとするコンテンツツリーを DOM ツリーに整列化します。
|
void |
marshal(Object jaxbElement, OutputStream os)
jaxbElement をルートとするコンテンツツリーを出力ストリームに整列化します。
|
void |
marshal(Object jaxbElement, Result result)
jaxbElement をルートとするコンテンツツリーを、指定された javax.xml.transform.Result に整列化します。
|
void |
marshal(Object jaxbElement, Writer writer)
jaxbElement をルートとするコンテンツツリーを Writer に整列化します。
|
void |
marshal(Object jaxbElement, XMLEventWriter writer)
jaxbElement をルートとするコンテンツツリーを
XMLEventWriter に整列化します。 |
void |
marshal(Object jaxbElement, XMLStreamWriter writer)
jaxbElement をルートとするコンテンツツリーを
XMLStreamWriter に整列化します。 |
<A extends XmlAdapter> |
setAdapter(Class<A> type, A adapter)
XmlAdapter の構成済みのインスタンスをこのマーシャラに関連付けます。 |
void |
setAdapter(XmlAdapter adapter)
XmlAdapter の構成済みのインスタンスをこのマーシャラに関連付けます。 |
void |
setAttachmentMarshaller(AttachmentMarshaller am)
XML 文書内のバイナリデータを、XML バイナリの最適化された添付として転送可能にするコンテキストを関連付けます。
|
void |
setEventHandler(ValidationEventHandler handler)
アプリケーションが検証イベントハンドラを登録することができます。
|
void |
setListener(Marshaller.Listener listener)
この
Marshaller に整列化イベントコールバックMarshaller.Listener を登録します。 |
void |
setProperty(String name, Object value)
Marshaller の基本となる実装の特定のプロパティーを設定します。
|
void |
setSchema(Schema schema)
後の整列化操作の検証に使用する、JAXP 1.3
Schema オブジェクトを指定します。 |
static final String JAXB_ENCODING
static final String JAXB_FORMATTED_OUTPUT
static final String JAXB_SCHEMA_LOCATION
static final String JAXB_NO_NAMESPACE_SCHEMA_LOCATION
void marshal(Object jaxbElement, Result result) throws JAXBException
すべての JAXB プロバイダは、DOMResult
、SAXResult
、および StreamResult
を最低限サポートする必要があります。加えて、Result のその他の派生クラスをサポートすることもできます。
jaxbElement
- 整列化するコンテンツツリーのルート。result
- XML はこの Result に送信されるJAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, OutputStream os) throws JAXBException
jaxbElement
- 整列化するコンテンツツリーのルート。os
- XML はこのストリームに追加される。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, File output) throws JAXBException
jaxbElement
- 整列化するコンテンツツリーのルート。output
- 書き込まれるファイル。このファイルがすでに存在する場合は上書きされる。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, Writer writer) throws JAXBException
jaxbElement
- 整列化するコンテンツツリーのルート。writer
- XML はこのライターに送信される。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, ContentHandler handler) throws JAXBException
jaxbElement
- 整列化するコンテンツツリーのルート。handler
- XML はこのハンドラに SAX2 イベントとして送信される。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, Node node) throws JAXBException
jaxbElement
- 整列化するコンテンツツリー。node
- DOM ノードがこのノードの子として追加される。このパラメータは、子 (Document
、DocumentFragment
、または Element
) を受け入れるノードにする必要があるJAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が jaxbElement (または jaxbElement から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, XMLStreamWriter writer) throws JAXBException
XMLStreamWriter
に整列化します。jaxbElement
- 整列化するコンテンツツリー。writer
- XML はこのライターに送信される。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合void marshal(Object jaxbElement, XMLEventWriter writer) throws JAXBException
XMLEventWriter
に整列化します。jaxbElement
- 整列化する jaxbElement をルートとするコンテンツツリー。writer
- XML はこのライターに送信される。JAXBException
- 整列化の実行中に予想外の問題が発生した場合。MarshalException
- ValidationEventHandler
の handleEvent メソッドから false が返されるか、Marshaller が obj (または obj から到達可能なオブジェクト) を整列化できない場合。「JAXB 要素の整列化」を参照。IllegalArgumentException
- いずれかのメソッドパラメータが null の場合Node getNode(Object contentTree) throws JAXBException
marshal(Object, org.w3c.dom.Node)
を使用します。contentTree
- - XML コンテンツの JAXB Java 表現UnsupportedOperationException
- JAXB プロバイダ実装がコンテンツツリーの DOM ビューをサポートしていない場合IllegalArgumentException
- いずれかのメソッドパラメータが null の場合JAXBException
- 予想外の問題が発生した場合void setProperty(String name, Object value) throws PropertyException
name
- 設定するプロパティーの名前。この値は、定数フィールドの 1 つかユーザーが指定した文字列を使用して指定できる。value
- 設定するプロパティーの値PropertyException
- 指定したプロパティーまたは値の処理中にエラーが発生した場合IllegalArgumentException
- name パラメータが null の場合Object getProperty(String name) throws PropertyException
name
- 取得するプロパティーの名前PropertyException
- 指定したプロパティーまたは値プロパティー名の取得中にエラーが発生した場合IllegalArgumentException
- name パラメータが null の場合void setEventHandler(ValidationEventHandler handler) throws JAXBException
検証イベントハンドラは、いずれかの整列化 API を呼び出している途中で検証エラーが発生した場合に JAXB プロバイダによって呼び出されます。整列化メソッドのいずれかを呼び出す前に、クライアントアプリケーションが検証イベントハンドラを登録していない場合、検証イベントはデフォルトイベントハンドラによって処理されます。デフォルトイベントハンドラは、最初のエラーまたは致命的なエラーの発生後に整列化操作を終了させます。
このメソッドを null パラメータとともに呼び出した場合、Marshaller はデフォルトのデフォルトイベントハンドラに戻されます。
handler
- 検証イベントハンドラJAXBException
- イベントハンドラの設定中にエラーが発生した場合ValidationEventHandler getEventHandler() throws JAXBException
JAXBException
- 現在のイベントハンドラの取得中にエラーが発生した場合void setAdapter(XmlAdapter adapter)
XmlAdapter
の構成済みのインスタンスをこのマーシャラに関連付けます。
これは setAdapter(adapter.getClass(),adapter);
を呼び出す簡易メソッドです。
IllegalArgumentException
- adapter パラメータが null の場合。UnsupportedOperationException
- JAXB 1.0 実装に対して呼び出された場合。setAdapter(Class,XmlAdapter)
<A extends XmlAdapter> void setAdapter(Class<A> type, A adapter)
XmlAdapter
の構成済みのインスタンスをこのマーシャラに関連付けます。
すべての Marshaller は、内部的に Map
<Class
,XmlAdapter
> を保持しており、フィールドまたはメソッドが XmlJavaTypeAdapter
で注釈されたクラスを整列化するために使用します。
このメソッドにより、アプリケーションは XmlAdapter
の構成済みのインスタンスを使用できます。アダプタのインスタンスが与えられない場合、Marshaller はそれのデフォルトコンストラクタを呼び出してインスタンスを作成します。
type
- アダプタの型。XmlJavaTypeAdapter.value()
がこの型を参照する場合は、指定したインスタンスが使用される。adapter
- 使用するアダプタのインスタンス。null の場合、この型に対して現在設定されているアダプタの登録が解除される。IllegalArgumentException
- type パラメータが null の場合。UnsupportedOperationException
- JAXB 1.0 実装に対して呼び出された場合。<A extends XmlAdapter> A getAdapter(Class<A> type)
setAdapter(javax.xml.bind.annotation.adapters.XmlAdapter)
メソッドの逆の操作です。IllegalArgumentException
- type パラメータが null の場合。UnsupportedOperationException
- JAXB 1.0 実装に対して呼び出された場合。void setAttachmentMarshaller(AttachmentMarshaller am)
XML 文書内のバイナリデータを、XML バイナリの最適化された添付として転送可能にするコンテキストを関連付けます。添付は、XML 文書コンテンツモデルから、XML 文書内に保存されたコンテンツ ID URI (cid) 参照によって参照されます。
IllegalStateException
- 整列化操作中に、このメソッドを同時に呼び出そうとした場合。AttachmentMarshaller getAttachmentMarshaller()
void setSchema(Schema schema)
Schema
オブジェクトを指定します。このメソッドに null を渡すと、検証は無効になります。
このメソッドにより、呼び出し側は整列化の実行時に、整列化される XML を検証できます。
このプロパティーは最初に null に設定されます。
schema
- 整列化操作の検証に使用するスキーマオブジェクト。検証を無効にする場合は nullUnsupportedOperationException
- JAXB 1.0 マップクラスを参照する JAXBContext から作成された Marshaller に対してこのメソッドが呼び出された場合にスローされる可能性があるSchema getSchema()
Schema
オブジェクトを取得します。Marshaller にスキーマが設定されていない場合、このメソッドは、整列化時に検証を実行しないことを示す、null を返します。UnsupportedOperationException
- JAXB 1.0 マップクラスを参照する JAXBContext から作成された Marshaller に対してこのメソッドが呼び出された場合にスローされる可能性があるvoid setListener(Marshaller.Listener listener)
この Marshaller
に整列化イベントコールバックMarshaller.Listener
を登録します。
各 Marshaller に Listener は 1 つだけです。Listener を設定すると、前に設定されていた Listener と置き換わります。Listener に null を設定することにより、現在の Listener の登録を解除できます。
listener
- Marshaller.Listener
を実装するクラスのインスタンスMarshaller.Listener getListener()
この Marshaller
に登録された Marshaller.Listener
を返します。
Marshaller.Listener
、またはこの Marshaller に登録されている Listener がない場合 null
。 バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.