2010-11-18 11 views
4

Javaでhow-to-serialize-deserialize-simple-classes-to-xml-and-back(C#)で行われていることをアーカイブしようとしています。可能であれば、クラスごとにシリアライズ/デシリアライズメソッドを記述しないでください。例えばWoodstox StAX 2でXMLのクラスをシリアライズ/デシリアライズする方法

、シリアル化の一部:

私は1 1で問題に取り組むためにしようとしているが、あなたに私が何をしようとしている感を与える可能性があるとして
XMLOutputFactory xof = null; 
    XMLStreamWriter2 writer = null; 

    try { 
     resp.setContentType("text/plain"); 
     xof = XMLOutputFactory.newInstance(); 
     writer = (XMLStreamWriter2) // 
     xof.createXMLStreamWriter(resp.getOutputStream()); 

     writer.writeStartDocument("1.0"); 
     writer.writeStartElement("data"); 
     // 
     // Magic happens here. 
     // 
     writer.writeEndElement(); 
     writer.writeEndDocument(); 
    } catch (XMLStreamException e) { 
     e.printStackTrace(); 
     resp.sendError(1, "Problem 1 occured."); 
    } finally { 
     try { 
      writer.flush(); 
      writer.close(); 
     } catch (XMLStreamException e) { 
      e.printStackTrace(); 
      resp.sendError(2, "Problem 2 occured."); 
     } 
    } 

この質問の一部ではありません、 。逆シリアル化するときに、入力が有効かどうかを確認したいと思います。最終的には、シリアル化された形式でXSLT変換を使用したいと考えています。

答えて

4

JAXBはJavaオブジェクトをXMLにシリアル化する方法です。以下は、あなたが始めるのに役立ちます。

JAXB実装

この標準のいくつかの実装があります。

Woodstox StAXの2

JAXBはStAXのを含む多くの入力/出力フォーマットを受け入れます。

検証

XMLはUnmarshallerのを使用してオブジェクトに変換され、そしてオブジェクトがマーシャラーでXMLに変換されます。 javax.xml.validation.Schemaのインスタンスを設定して、これらの操作中に入力を検証できます。

また、例えば次のことをチェックし、JAXBと直接持つjavax.xml.validation APIを使用することができます。

XSLT

のjavax。 xml.transformライブラリは、JavaでXSLT変換を実行するために使用されます。 JAXBは、JAXBSourceとJAXBResultを使用してこれらのライブラリと連携するように設計されています。詳細情報

チェックアウト私のブログ:包括的な受け入れ答えに加えて

+1

あなたは、その分野の素晴らしい知識を持っています。 – Margus

+2

ありがとうMargus、私はXMLバインディング・ソリューションをかなりの年(EclipseLink MOXy)でリードしてきました。私はJAXB(http://jcp.org/ja/jsr/detail?id=222)とSDO(http://jcp.org/ja/jsr/detail)の2つのJava関連標準のアクティブなメンバーです。 ?id = 235)。他のエンタープライズJavaスタックとの統合が進んでいるので、Javaの標準的なソリューションをお勧めします。たとえば、JAXBは、JAX-WS(XML Webサービス)とJAX-RS(RESTful Webサービス)の両方に対する標準のバインディングレイヤです。追加情報が必要な場合はお知らせください。 –

+0

@BlaiseDoughanあなたが言及したように、バリデーションを作成して解析する2つのステップを伴わずにJAXBアンマーシャリングを使用しているときにXML全体をDTDに対して検証するためにSchemaインスタンスを設定するにはどうすればよいですか?これを指すポインタは参考になります – Ajay

0

を、それは注目に値しますそのWoodstox(または任意のStax2実装)実際に入力と出力の両方を検証できます。サンプルコードはthis blog entryを参照してください。 1つの利点は、Relax NG(JAXBがデフォルトで使用するJAXPパーサーによってAFAIKをサポートしていない)またはDTDに対しても検証できることです。

また、Stax2パーサー(WoodstoxやAaltoなど)を使用して「mini-JAXB」(完全なJAXB機能のサブセット)を実装するJackson-xml-databinder(Jackson JSONプロセッサのスピンオフ)という新しいプロジェクトがあります。主な利点は、より強力なデータバインディング部分とJAXB実装よりも優れたパフォーマンスです。欠点は成熟しておらず、すべてのXML固有の側面をサポートしていないということです。 JSON形式とXML形式の両方がサポートされる場合にはおそらく最も役に立ちます。

関連する問題