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を作っても良いかも知れませんね。