DBUnit を使用して AS400 からデータをエクスポートし、JUnit テスト用に HSQLDB データベースにインポートしようとしていますが、データ型情報がエクスポート/インポートされていないようです。すべてが CDATA としてエクスポートされる (したがってインポートされる) ようです。誰かがこれに対する答えを見つける場所を教えてもらえますか?
サンプルの 1 つを正常にビルドして実行しました。
public static void main(String[] args) throws Exception
{
// database connection
Class driverClass = Class.forName("com.ibm.as400.access.AS400JDBCDriver");
Connection jdbcConnection = DriverManager.getConnection("jdbc:as400://myserver;libraries=MYLIB", "user", "password");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
// partial database export
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("TABLE1");
partialDataSet.addTable("TABLE2");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream("flatpartial_as400.xml"));
FlatDtdDataSet.write(connection.createDataSet(), new FileOutputStream("flatdtd_as400.dtd"));
XmlDataSet.write(partialDataSet, new FileOutputStream("partial_as400.xml"));
これにより、たとえば、次の出力が得られます。
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<TABLE1/>
<TABLE2 ADDRESS_ID="1" ADDRESS_TYPE="1" ADDRESS_DESCRIPTION="Billing Address "/>
<TABLE2 ADDRESS_ID="2" ADDRESS_TYPE="2" ADDRESS_DESCRIPTION="Delivery Address "/>
<TABLE2 ADDRESS_ID="3" ADDRESS_TYPE="3" ADDRESS_DESCRIPTION="Owner Address "/>
<TABLE2 ADDRESS_ID="4" ADDRESS_TYPE="4" ADDRESS_DESCRIPTION="Owner Previous Address "/>
<TABLE2 ADDRESS_ID="5" ADDRESS_TYPE="5" ADDRESS_DESCRIPTION="Store Address "/>
</dataset>
生成される DTD フラグメントは次のとおりです。
<!ELEMENT TABLE2 EMPTY>
<!ATTLIST TABLE2
ADDRESS_ID CDATA #REQUIRED
ADDRESS_TYPE CDATA #REQUIRED
ADDRES_DESCRIPTION CDATA #REQUIRED
>
最初のフィールドは DECIMAL(10,0) のはずですが、CDATA です。明らかに、これはデータの整合性の観点から問題になります。デバッガーでは、タイプ情報が DBUnit パッケージに組み込まれていることがわかります (コード内の ADDRESS_ID フィールドは DECIMAL です)。しかし、その情報はファイルの XML DTD には組み込まれていません。
どんな助けでも大歓迎です...