質問

XMLドキュメントオブジェクトをJavaで作成し、バイト配列にシリアル化することを検討しています(TCP接続を介して送信する前に)。現在、次のようなコードがあります:

public byte [] EncapsulateThingy( ThingyType thingy )
{
    parser.reset(); // parser is a pre-existing DocumentBuilder object
    Document doc = parser.newDocument();
    doc.appendChild( doc.createElement("Thingy") );
    // ...  add nodes to doc to represent thingy
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream( 8192 ); 

    //
    // Missing: Write doc to outputStream with xml version 1.0 and UTF-8 
    // encoding.
    //

    return outputStream.toByteArray();
}

Sun Javaのドキュメントは、DomImplementationLSで始まるXMLのロードと保存に関する一連のインターフェースに関する情報を持っています。これを使用して、上記の欠落している部分を簡単に埋めることができます。しかし、DomImplementationLSを実装するオブジェクトを作成する方法がわかりません。

私の最終的な目標は、非常に単純なオブジェクトをバイト配列にエンコードされたXMLにシリアル化および逆シリアル化することです。そのため、それらをネットワーク経由で送信できます。ソリューションを軽量に保ち、メッセージの高いスループットを処理できるようにすることに興味があります。

送信される正確なXML構造を指定できる限り、代替ソリューションに興味があります。

もちろん、これらのXMLメッセージが消費されたときにデシリアライゼーションを提供する必要がありますが、XMLを読み取るためにオンラインで利用できるドキュメントとtoturialsがたくさんありますが、XMLを書くためにはあまりありません。

パッケージを追加せずにJava 6に含まれるソリューションを希望します。

役に立ちましたか?

解決

これが役立つことを願って:

import java.io.ByteArrayOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.junit.Test;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;

public class DomLsTest {

    @Test
    public void testDomLs() throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        DOMImplementation di = db.getDOMImplementation();
        Document d = di.createDocument("", "foo", null);
        Element e = d.createElement("bar");
        d.getDocumentElement().appendChild(e);
        DOMImplementationLS ls = (DOMImplementationLS) di;
        LSOutput lso = ls.createLSOutput();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        lso.setByteStream(baos);
        LSSerializer lss = ls.createLSSerializer();
        lss.write(d, lso);
        System.out.println(baos.toString());
    }

}

だから、あなたのコードのために、あなたは次のようなことをする必要があるでしょう:

DOMImplementationLS ls = (DOMImplementationLS) parser.getDOMImplementation();
LSOutput lso = ls.createLSOutput();
lso.setByteStream(...);
LSSerializer lss = ls.createSerializer();
lss.write(..., lso);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top