1

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 には組み込まれていません。

どんな助けでも大歓迎です...

4

1 に答える 1