canal 数据行解析错误

来源:互联网 发布:环刀法压实度软件 编辑:程序博客网 时间:2024/06/08 11:25

maven使用canal构建的项目,包数据行解析错误:如下

Caused by: com.alibaba.otter.canal.parse.exception.CanalParseException: parse row data failed.
Caused by: com.googlecode.aviator.exception.ExpressionRuntimeException: Execute expression error
at com.googlecode.aviator.ClassExpression.execute(ClassExpression.java:59)
at com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter.filter(AviaterRegexFilter.java:74)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parseRowsEvent(LogEventConvert.java:309)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:106)
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:62)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser.parseAndProfilingIfNecessary(AbstractEventParser.java:323)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3$1.sink(AbstractEventParser.java:176)
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:121)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:209)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalAccessError: tried to access method com.google.common.collect.MapMaker.softValues()Lcom/google/common/collect/MapMaker; from class com.alibaba.otter.canal.filter.PatternUtils
at com.alibaba.otter.canal.filter.PatternUtils.<clinit>(PatternUtils.java:24)
at com.alibaba.otter.canal.filter.aviater.RegexFunction.call(RegexFunction.java:24)
at Script_1500257423238_0.execute0(Unknown Source)
at com.googlecode.aviator.ClassExpression.execute(ClassExpression.java:53)
... 9 more
]


一开始考虑是jar包不完整错误,后来发现是因为canal引用的guava一个被废弃的方法导致的:

具体如下:

   canal版本1.20

   maven中自动依赖的guava版本19.0

解决方案:

  将maven自动依赖的guava版本降为18.0 。在pom中选择性的加入如下代码,其中 xxxx 部分为 依赖guava 的jar包。pom中寻找依赖guava的jar包,可以在 pom.xml中右击选择maven->show dependencies  找到guava即可。

<dependency>    <groupId>xxxxx</groupId>    <artifactId>xxxxx</artifactId>    <version>xxxxxT</version>    <exclusions>        <exclusion>            <artifactId>guava</artifactId>            <groupId>com.google.guava</groupId>        </exclusion>    </exclusions></dependency><dependency>    <groupId>com.google.guava</groupId>    <artifactId>guava</artifactId>    <version>18.0</version></dependency>