Как сгенерировать XML-файл из DatabaseChangeLog программно

Я внес изменения в объект DatabaseChangeLog программно. Как я могу сгенерировать файл diffChangeLogFile на основе этого DatabaseChangeLog из Java.

РЕДАКТИРОВАТЬ: вот пример

public DatabaseChangeLog removeDropColumnChangeFromDatabaseChangeLog(
            DatabaseChangeLog databaseChangeLog, String oldName,
            String newName, String tableName) {

        DatabaseChangeLog changeLog = databaseChangeLog;
        Collection<ChangeSet> changeSetsToRemove = new ArrayList<ChangeSet>();

        List<ChangeSet> changeSets = changeLog.getChangeSets();

        // Remove DropColumnChange from ChangeSets using tableName, oldName and
        // newName
        for (ChangeSet cs : changeSets) {
            for (Change change : cs.getChanges()) {
                if (change instanceof DropColumnChange) {
                    DropColumnChange aux2 = (DropColumnChange) change;
                    if (aux2.getTableName().equals(tableName)) {
                        if (aux2.getColumnName().equals(oldName)) {
                            changeSetsToRemove.add(cs);
                        }
                    }
                }
            }
        }
        changeSets.removeAll(changeSetsToRemove);
        DatabaseChangeLog databaseChangeLogWithoutAddColumn = new DatabaseChangeLog();
        for (ChangeSet cs : changeSets) {
            databaseChangeLogWithoutAddColumn.addChangeSet(cs);
        }
        return databaseChangeLogWithoutAddColumn;
    }

этот метод будет иметь объект DatabaseChangeLog в качестве входных данных и удалит из него изменение dropColumn, когда имя таблицы будет равно параметру tableName.

После этой модификации объекта DatabaseChangeLog я хочу сгенерировать xml-файл, который содержит наборы изменений относительно объекта DatabaseChangeLog (xml, который liquibase генерирует после diff для обновления).

Что-то вроде этого:

databaseChange.generateXmlFile (pathToFile);

1 ответ

Решение

В конце концов я обнаружил в исходном коде liquibase, как он преобразует список changeSets в вывод файла xml (мы можем получить список chnageSets из databaseChangeLog)

    /**
     * Prints changeLog that would bring the target database to be the same as
     * the reference database
     */
    public void print(PrintStream out, ChangeLogSerializer changeLogSerializer) throws ParserConfigurationException, IOException, DatabaseException {

        List<ChangeSet> changeSets = generateChangeSets();

        changeLogSerializer.write(changeSets, out);

        out.flush();
    }

Вот пример того, как я сгенерировал вывод файла XML после внесения изменений в объект databaseChangeLog

        // TESTING CHANGELOG GENERATION 
        PrintStream printStreamFile =null;
        try {
            printStreamFile = new PrintStream("pathTofile/changeLogAfterChange.xml");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        XMLChangeLogSerializer changeLogSerializer = new XMLChangeLogSerializer();

        try {
            changeLogSerializer.write(databaseChangeLog.getChangeSets(), printStreamFile);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Я надеюсь, это поможет.

Другие вопросы по тегам