WebRowSetImpl
いろいろ調べてWebRowSetReader/Writer以前に、WebRowSetImplつまりSunのRI実装は駄目駄目だということが解った。
自作のWebRowSetReaderをテストしているのだが、生成されたXMLのカレント行に相当するXMLを要素を読み込み、行を挿入しようとすると、
java.sql.SQLException: 行の挿入に失敗 at com.sun.rowset.CachedRowSetImpl.insertRow(CachedRowSetImpl.java:5444)
と、例外が出るのだが詳細情報にアクセスすることができないので原因を調べることができない。
試しに実装クラスにcom.sun.rowset.WebRowSetImplではなく、Oracle JDBCドライバで提供されている実装クラスoracle.jdbc.rowset.OracleWebRowSetに変えて同様にテストを実行してみると今度は
java.sql.SQLException: 行のすべての列が設定されていません at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:229) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:403) at oracle.jdbc.rowset.OracleCachedRowSet.insertRow(OracleCachedRowSet.java:1978)
と例外が変わる。内部の実装が違うので一概には言えないが、仮に原因が同じだとしてOracleの実装は例外が10倍は具体的だ。
暫くはOracleの実装を使ってテストしたほうが良いかもしれない。
同じ「非接続型データベースアクセスコンポーネント」として、.NETで相当するのはADO.NETのDataTableおよびDataSetということになるのだが、その完成度は段違いだ。