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 afterMarshal(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, 2014, Oracle and/or its affiliates. All rights reserved.