谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

S2DaoでDerby + XML (INSERT編)

次は、insertを試してみましょう。


ArticleDao_insert.sql

INSERT INTO ARTICLE (data)
VALUES
(
	XMLPARSE (DOCUMENT CAST (/*dto.data*/'' AS CLOB) PRESERVE WHITESPACE)
)


S2Daoから呼び出すと、やはりエラーが発生しますが、よく原因が分かりません。
ここでも同じように、自前で作ったクライアントから呼び出してみます。

	private static void insert(Connection conn) throws SQLException
	{
		PreparedStatement stmt = conn
				.prepareStatement("INSERT INTO ARTICLE (data) VALUES ( XMLPARSE (DOCUMENT CAST ('<TEST/>' AS CLOB) PRESERVE WHITESPACE))");
		stmt.execute();
	}


これを動かしてみたら、エラーが分かりました。

Caused by: java.sql.SQLException: Encountered unexpected error while processing XML: org/apache/xml/serializer/OutputPropertiesFactory

serializer.jarにクラスパスが通っていないのが問題のように見えます。
改めて、serializer.jarにもクラスパスを通した所、正常に動きました。


ぷちハマりしましたが、
ようやく、S2DaoからDerbyのXMLを読み書きできるようになりました。


それにしても、
せっかくのXMLを、Stringでしか読み書きできないのは残念ですねー。
DerbyのSQLXMLへの正式対応を期待しつつ、今はStringで我慢することにします。


# 暫定対応として、S2ContainerのValueType実装として
XMLシリアライズ/デシリアライズを行なうような
# ValueTypeを作っても良いかも知れませんね。