powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Unitils + DBUnit + replace (sysdate & sequence values)
5 сообщений из 5, страница 1 из 1
Unitils + DBUnit + replace (sysdate & sequence values)
    #38000300
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решал ли кто-нибудь при использовании Unitils задачу, аналогичную описанной здесь ?
Суть в замене псевдозначений реальными значениями последовательностей Oracle, т.е. некоторая предварительная обработка содержимого XMLс данными.
При попытке использовать в Unitils такой же подход, как для DBUtils натыкаемся на проблему несовместимости возвращаемых типов при чтении XML-файла. У типа, возвращаемого методом, который используется в Unitils, нет возможности изменить данные. К сожалению, пока своими силами не удается решить проблему... Поиск пока не помог.
...
Рейтинг: 0 / 0
Unitils + DBUnit + replace (sysdate & sequence values)
    #38000365
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы пишете много про Unitils, но всего одно скомканое предложение о самой проблеме. Что за "несовместимости "? Какая ошибка конкретно?
...
Рейтинг: 0 / 0
Unitils + DBUnit + replace (sysdate & sequence values)
    #38000671
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за сумбурное изложение...

Чуть подробнее:
В DBUnit (без unitils) IDataSet получаем через FlatXmlDataSetBuilder (тип org.dbunit.dataset.xml.FlatXMLDataSet)
В приведенном по ссылке примере было показано, как организовать обработку полученных данных, заменяя нужные псевдозначения реальными. В нашем примере это выглядело так:

Код: java
1.
2.
3.
4.
5.
6.
7.
public IDataSet getDataSet() throws Exception
    {
        IDataSet ds = new FlatXmlDataSetBuilder().build(new FileInputStream("return_coupon.xml"));
        replaceSequence(ds); // подстановка значений sequences в Oracle
        replaceSysdate(ds); // подстановка значений на основе текущей даты sysdate в Oracle
        return ds;
    };



При использовании unitils прописываем аннотацию типа @DataSet({"NewTest.xml"})
При обработке данных из XML в переопределенном DBUnitModule.insertDataSet(MultiSchemaDataSet multiSchemaDataSet, DataSetLoadStrategy dataSetLoadStrategy) данные возвращаются таким образом:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Override
protected void insertDataSet(MultiSchemaDataSet multiSchemaDataSet, DataSetLoadStrategy dataSetLoadStrategy) {
    try {
        for (String schemaName : multiSchemaDataSet.getSchemaNames()) {
            System.out.println("Our!");
            IDataSet schemaDataSet = multiSchemaDataSet.getDataSetForSchema(schemaName);
            replaceSequence(schemaDataSet); // хотим обработать, но не удается!!! разные типы данных, нет возможности изменения
            replaceSysdate(schemaDataSet);  
            dataSetLoadStrategy.execute(getDbUnitDatabaseConnection(schemaName), schemaDataSet);
        }
    } catch (Exception e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } finally {
        closeJdbcConnection();
    }
}



Когда получаем IDataSet schemaDataSet = multiSchemaDataSet.getDataSetForSchema(schemaName); и пытаемся передать в replaceSequence(), в отладчике видно, что используется тип org.dbunit.dataset.ReplacementDataSet.

При попытке изменить элемент данных в процедуре обработки значений последовательностей (на основе примера по ссылке)
Код: java
1.
((DefaultTable) table).setValue(i,cols[j].getColumnName(),theDate );


Получаем ошибку:
java.lang.ClassCastException: org.dbunit.dataset.ReplacementTable cannot be cast to org.dbunit.dataset.DefaultTable

И пока не нашел, как ее обойти.
Может, есть какой-то способ изменить содержимое ReplacementTable, но соответствующего метода setValue для него нет.
...
Рейтинг: 0 / 0
Unitils + DBUnit + replace (sysdate & sequence values)
    #38001119
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.,
Опишите задачу, а не метод её решения.
...
Рейтинг: 0 / 0
Unitils + DBUnit + replace (sysdate & sequence values)
    #38001163
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть XML, в котором описаны данные, загружаемые через DBUnit в таблицы базы данных Oracle. Вместо некоторых значений стоят псевдозначения, которые сначала нужно получить из последовательностей в Oracle и только после этого занести данные в базу. Для DBUnit есть решение, приведенное по указанной в первом посте ссылке. Для Unitils тоже самое сделать не удается в силу особенностей представления читаемых из XML данных. Вопрос - какое наиболее простое решение задачи при использовании unitils?
Если кто-то сталкивался с этой проблемой - буду рад получить совет...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Unitils + DBUnit + replace (sysdate & sequence values)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]