4

Javaの how-to-serialize-deserialize-simple-classes-to-xml-and-back (C#) で行われたことをアーカイブしようとしています。できれば、クラスごとにシリアライズ・デシリアライズのメソッドを書くのは避けたいです。

たとえば、シリアル化の一部:

    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.");
        }
    }

問題を 1 つずつ解決しようとしているので、この質問の一部ではありませんが、私がやろうとしていることの感覚をあなたに与えるかもしれません。逆シリアル化するときに、入力が有効かどうかも確認したいと思います。最終的には、シリアル化された形式で XSLT 変換を使用したいと考えています。

4

2 に答える 2

4

JAXB は、Java オブジェクトを XML にシリアライズする方法です。以下は、開始するのに役立ちます。

JAXB 実装

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

ウッドストック StAX 2

JAXB は、StAX を含む多くの入出力形式を受け入れます。

検証

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

javax.xml.validation API を JAXB で直接使用することもできます。以下の例を確認してください。

XSLT

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

詳細については

私のブログをチェックしてください:

于 2010-11-18T10:00:40.210 に答える
0

受け入れられた包括的な回答に加えて、Woodstox (または任意の Stax2 実装) が実際に入力と出力の両方を検証できることは注目に値します。サンプル コードについては、このブログ エントリを参照してください。利点の 1 つは、Relax NG (JAXB がデフォルトで使用する JAXP パーサーでは AFAIK をサポートしていません) または DTD に対しても検証できることです。

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

于 2011-01-05T22:02:08.010 に答える