首页 文章

当用于迁移SQL Server时,Liquibase生成了更改日志XML - ERROR cvc-complex-type.2.3

提问于
浏览
0

我以前见过这个类似的话题,但没有解决方案 .

http://forum.liquibase.org/topic/liquibase-validation-can-we-turn-it-off

问题是仅在SQL Server上使用“迁移”发生的验证错误 . 可以使用相同的文件在PostgreSQL中创建模式 . 为什么SQL Server有问题?更改日志是从SQL Server生成的,但不能用于将架构迁移到同一主机上的其他数据库 .

请帮忙!!

这个错误的简短版本是......

cvc-complex-type.2.3:元素'createTable'不能有字符[children],因为类型的内容类型只是元素

完整的堆栈跟踪是这个......

SEVERE 7/27/16 6:14 PM:liquibase:cvc-complex-type.2.3:元素'createTable'不能有字符[children],因为类型的内容类型只是元素 . liquibase.exception.ChangeLogParseException:解析mssql-confluencetest-changelog.xml的第144行第23行时出错:cvc-complex-type.2.3:元素'createTable'不能包含字符[children],因为类型的内容类型仅为元素 . 在liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:114)在liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17)在liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229 )liquibase.Liquibase.update(Liquibase.java:202)at liquibase.Liquibase.update(Liquibase.java:192)liquibase.integration.commandline.Main.doMigration(Main.java:1126)liquibase.integration.commandline .Main.run(Main.java:184)at liquibase.integration.commandline.Main.main(Main.java:103)引起:org.xml.sax.SAXParseException; lineNumber:144; columnNumber:23; cvc-complex-type.2.3:元素'createTable'不能有字符[children],因为类型的内容类型只是元素 . 在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)在com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437)at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325)at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator $ XSIErrorReporter.reportError(XMLSchemaValidator . java:458)at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3237)at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator . elementLocallyValidComplexType(XMLSchemaValidator.java:3200)at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.elementLocallyValidType(XMLSchemaValidator.java:3160)at com .sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processElementContent(XMLSchemaValidator.java:3062)在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java: 2140)在com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:859)在com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanEndElement(XML11NSDocumentScannerImpl . Java的:814)在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973)在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next( XMLDocumentScannerImpl.java:606)在com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(XML11NSDocumentScannerImpl.java:857)在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument( XMLDocumentFragmentScannerImpl.java:510)at com.sun.org.apache.xerces.internal.parsers.XML11Configuratio n.parse(XML11Configuration.java:848)位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)的com.sun.org.apache.xerces.internal.parsers . XMLParser.parse(XMLParser.java:141)位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)的com.sun.org.apache.xerces.internal.jaxp . SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java:648)at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:106)... 7更多

这是XML的问题......

<changeSet author="amartin (generated)" id="1469664903727-11" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
<createTable tableName="AO_5FB9D7_AOHIP_CHAT_LINK">
    <column name="ADDON_TOKEN_EXPIRY" type="datetime"/>
    <column name="API_URL" type="nvarchar(255)"/>
    <column name="CONNECT_DESCRIPTOR" type="ntext"/>
    <column defaultValueNumeric="0" name="GROUP_ID" type="int"/>
    <column name="GROUP_NAME" type="nvarchar(255)"/>
    <column autoIncrement="true" name="ID" type="int">
        <constraints primaryKey="true" primaryKeyName="pk_AO_5FB9D7_AOHIP_CHAT_LINK_ID"/>
    </column>
    <column name="OAUTH_ID" type="nvarchar(255)"/>
    <column name="SECRET_KEY" type="nvarchar(255)"/>
    <column name="SYSTEM_PASSWORD" type="nvarchar(255)"/>
    <column name="SYSTEM_TOKEN_EXPIRY" type="datetime"/>
    <column name="SYSTEM_USER" type="nvarchar(255)"/>
    <column name="SYSTEM_USER_TOKEN" type="nvarchar(255)"/>
    <column name="TOKEN" type="nvarchar(255)"/>
</createTable>
</changeSet>

4 回答

  • 1

    您的更改日志中可能有一些字符超出标准ASCII字符集 . 特别是,当在外部文件引用的存储过程中存在诸如“曲线引号”之类的东西时,我已经看到了这种情况 . 也可能是堆栈跟踪中引用的行/列不是实际问题字符所在的位置 .

    检查changelog XML的标头,看看编码是什么 . 通常它是UTF-8 . 使用记事本之类的工具检查任何支持文件的编码 .

  • 0

    我有同样的错误,并通过将我的* .xml文件拆分为几个较小的文件来修复它 .

  • 0

    我有同样的错误:使用java 1.7_55,CentosOS和liquibase 3.5.3 .

    更新到java 1.7_80解决了这个问题 .

  • 1

    我刚遇到同样的问题 .

    • 无法升级到更高版本的Java版本 .

    • 拆分成较小的文件不起作用 .

    • 文件根据this answer进行了正确的UTF-8编码/清理 .

    原来我只需要将XML版本从1.1更改为1.0:
    <?xml version="1.0" encoding="UTF-8"?>

    Liquibase forums找到解决方案 .

相关问题