在啟動keyCloak,想要在standAlone模式下切換數據庫,修改standAlone.xml文件時。
在bin/目錄下啟動standAlone模式出現錯誤:
10:07:24,799 INFO [org.jboss.as.controller] (Controller Boot Thread) OPVDX002:無法整齊打印驗證錯誤:null 10:07:24,800 ERROR [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0055: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: WFLYCTL0085: Failed to parse configuration at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:143) at org.jboss.as.server.ServerService.boot(ServerService.java:377) at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:372) at java.lang.Thread.run(Unknown Source) Caused by: javax.xml.stream.XMLStreamException: com.ctc.wstx.exc.WstxParsingException: Received non-all-whitespace CHARACTERS or CDATA event in nextTag(). at [row,col {unknown-source}]: [141,7] at org.jboss.as.connector.subsystems.datasources.DataSourcesExtension$DataSourceSubsystemParser.readElement(DataSourcesExtension.java:650) at org.jboss.as.connector.subsystems.datasources.DataSourcesExtension$DataSourceSubsystemParser.readElement(DataSourcesExtension.java:204) at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:122) at org.jboss.staxmapper.XMLExtendedStreamReaderImpl.handleAny(XMLExtendedStreamReaderImpl.java:69) at org.jboss.as.server.parsing.StandaloneXml_7.parseServerProfile(StandaloneXml_7.java:607) at org.jboss.as.server.parsing.StandaloneXml_7.readServerElement(StandaloneXml_7.java:240) at org.jboss.as.server.parsing.StandaloneXml_7.readElement(StandaloneXml_7.java:137) at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:117) at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:52) at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:122) at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:76) at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:126) ... 3 more Caused by: com.ctc.wstx.exc.WstxParsingException: Received non-all-whitespace CHARACTERS or CDATA event in nextTag(). at [row,col {unknown-source}]: [141,7] at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491) at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475) at com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1224) at org.jboss.staxmapper.XMLExtendedStreamReaderImpl.nextTag(XMLExtendedStreamReaderImpl.java:152) at org.jboss.as.connector.subsystems.datasources.DsParser.parseDataSource_4_0(DsParser.java:1927) at org.jboss.as.connector.subsystems.datasources.DsParser.parseDataSources(DsParser.java:229) at org.jboss.as.connector.subsystems.datasources.DsParser.parse(DsParser.java:189) at org.jboss.as.connector.subsystems.datasources.DataSourcesExtension$DataSourceSubsystemParser.readElement(DataSourcesExtension.java:643) ... 14 more 10:07:24,803 FATAL [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0056: Server boot has failed in an unrecoverable manner; exiting. See previous messages for details. 10:07:24,820 INFO [org.jboss.as] (MSC service thread 1-7) WFLYSRV0050: Keycloak 4.4.0.Final (WildFly Core 5.0.0.Final) stopped
這是standalone.xml的文件配置:
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&tcpRcvBuf=102400000</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver>mysql</driver> <security> <user-name>root</user-name> <password>root</password> </security> <!--增加驗證信息 --> <!-- <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <background-validation>true</background-validation> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> --> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> <driver name="mysql" module="com.mysql"> <!-- <driver-class>com.mysql.jdbc.Driver</driver-class> --> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver>
發現問題:
1.認為是我的url-connection 寫的有問題,不斷地修改。
2.找到文件夾modules\system\layers\base\com\mysql\main 下的module 和mysql-connector-java.5.1.40jar
不斷修改JAR包的版本和modules.xml地配置。
3.詢問同事:一開始以為是字符集編碼的問題,但是后面發現了at [row,col {unknown-source}]: [141,7]這個地方出現了問題。
從此打開了自己的認知大門:發現了自己一開始的問題所在,而我卻忽略他了:
在修改standalone.xml時,在edit-plus出現如下頁面。

問題原因:
從下圖可以看到,因為不同編碼方式的空格占位符不同,比如在ANSI編碼里面,空格占用一個字符 ,但是在UTF-8里面,可能占用的是2個字符。
於是在Edit-plus中編輯的時候,出現以上情況的報錯。 從而造成無法解析xml的情況。

解決途徑:
1.手敲代碼,
2.從其他博客中復制過來的代碼,單行復制!單行復制!單行復制!
總結:今后從其他博客中復制過來的代碼一定要提前檢查各種問題,已經有很多次遇到這種情況:復制他人的代碼,結果不斷報錯。 今后復制粘貼的時候要留個心眼。