2016-07-29 47 views
0

Ich habe dieses ähnliche Thema schon einmal gesehen, aber ohne eine Lösung.Liquibase generiert Changelog XML - Fehler cvc-complex-type.2.3 bei der Migration von SQL Server

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

Das Problem ist ein Fehler bei der Überprüfung, dass nur "Migration" auf SQL Server geschieht mit. Die gleiche Datei kann zum Erstellen des Schemas in PostgreSQL verwendet werden. Warum hat es ein Problem mit SQL Server? Das Änderungsprotokoll wurde von SQL Server generiert, kann jedoch nicht zum Migrieren des Schemas in eine andere Datenbank auf demselben Host verwendet werden.

Bitte helfen Sie !!

Die kurze Version des Fehlers ist dies ...

cvc-complex-type.2.3: Element 'createTable' cannot have character [children], because the type's content type is element-only

Der vollständige Stack-Trace ist dies ...

SEVERE 7/27/16 6:14 PM: liquibase: cvc-complex-type.2.3: Element 'createTable' cannot have character [children], because the type's content type is element-only. liquibase.exception.ChangeLogParseException: Error parsing line 144 column 23 of mssql-confluencetest-changelog.xml: cvc-complex-type.2.3: Element 'createTable' cannot have character [children], because the type's content type is element-only. at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:114) at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17) at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229) at liquibase.Liquibase.update(Liquibase.java:202) at liquibase.Liquibase.update(Liquibase.java:192) at liquibase.integration.commandline.Main.doMigration(Main.java:1126) at liquibase.integration.commandline.Main.run(Main.java:184) at liquibase.integration.commandline.Main.main(Main.java:103) Caused by: org.xml.sax.SAXParseException; lineNumber: 144; columnNumber: 23; cvc-complex-type.2.3: Element 'createTable' cannot have character [children], because the type's content type is element-only. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) at 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) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleEndElement(XMLSchemaValidator.java:2140) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.endElement(XMLSchemaValidator.java:859) at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.scanEndElement(XML11NSDocumentScannerImpl.java:814) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XML11NSDocumentScannerImpl.next(XML11NSDocumentScannerImpl.java:857) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648) at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:106) ... 7 more

Das ist das Problem 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> 

Antwort

0

Möglicherweise haben Sie einige Zeichen in Ihrem Changelog, die außerhalb des Standard-ASCII-Zeichensatzes liegen. Insbesondere habe ich gesehen, dass das passiert, wenn in gespeicherten Prozeduren, die als externe Dateien referenziert werden, Dinge wie "Anführungsstriche" vorkommen. Es kann auch der Fall sein, dass die Zeile/Spalte, auf die im Stack-Trace verwiesen wird, NICHT an der Stelle liegt, an der sich die eigentlichen Problemzeichen befinden.

Überprüfen Sie die Header der Änderungsprotokoll-XML und sehen Sie, was die Codierung ist. Normalerweise ist es UTF-8. Verwenden Sie ein Tool wie Notepad ++, um die Codierung von unterstützenden Dateien zu überprüfen.

+0

Danke für die Antwort! Ich habe dies in Notepad ++ überprüft. An dieser Tabelle sieht im Vergleich zu anderen Dateien in derselben Datei nichts anders aus. Und wenn ich es herausziehe, funktioniert es gut. Das Merkwürdigste ist, dass ich diese Datei ohne Fehler in PostgreSQL migrieren kann. – adrock

+0

Ich habe auch versucht, 'grep -P [\ x80- \ xFF]" ', die mir die Zeilennummern von Nicht-ASCII-Zeichen geben soll. Dies liefert keine Ergebnisse. – adrock

+0

Welche Linie ist Nummer 144? Versuchen Sie, das betreffende Zeichen zu identifizieren. Welche xsd-Datei verwendest du in deinem XML? – orikosaki

0

Ich hatte den gleichen Fehler und reparierte es, indem ich meine * .xml-Datei in mehrere kleinere Dateien aufteilte.

1

Ich habe den gleichen Fehler: mit Java 1.7_55, Centos OS und Liquibase 3.5.3.

Aktualisierung auf Java 1.7_80 löst das Problem.

0

Ich lief gerade in das gleiche Problem.

  • Das Upgrade auf eine höhere Java-Version war keine Option.
  • Die Aufteilung in kleinere Dateien hat nicht funktioniert.
  • Datei wurde ordnungsgemäß UTF-8 codiert/gereinigt nach this answer.

In stellte sich heraus, ich musste nur XML-Version 1,1-1,0 ändern:
<?xml version="1.0" encoding="UTF-8"?>

Lösung auf dem Liquibase forums gefunden.