Java DomImplementationLS
-
03-07-2019 - |
質問
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);
所属していません StackOverflow