Failed to specialize base type
org.apache.shardingsphere.elasticjob.infra.yaml.config.YamlConfiguration<org.apache.shardingsphere.elasticjob.api.JobExtraConfiguration>
as org.apache.shardingsphere.elasticjob.tracing.yaml.YamlTracingConfiguration
elasticjob-lite-ui-backend bug:
- 版本:shardingsphere-elasticjob-lite-ui-backend-3.0.0-RC1
- 错误信息:作业配置序列化异常,jackson序列化失败
- 错误位置:JobConfigController -> get api/jobs/config/{jobName}, 从zk读取配置后,使用YamlEngine.unmarshal后得到JobConfigurationPOJO, POJO中的jobExtraConfigurations属性泛型为接口Collection<YamlConfiguration<JobExtraConfiguration>>,而unmarshal后得到的泛型类为:Collection<YamlTracingConfiguration<YamlDataSourceConfiguration>>, 而YamlDataSourceConfiguration并不是JobExtraConfiguration的子类 ,导致序列化异常,通过前后端调试发现jobExtraConfigurations在作业配置时并没有使用,所以返回时临时移除该属性,然后在更新的时候把更新前的属性值再重新设置回去。
// JobConfigController /** * Get job configuration. * * @param jobName job name * @return job configuration */ @GetMapping(value = "/{jobName:.+}") public ResponseResult<JobConfigurationPOJO> getJobConfig(@PathVariable("jobName") final String jobName) { JobConfigurationPOJO data = jobAPIService.getJobConfigurationAPI().getJobConfiguration(jobName); // fix serialize exception data.getJobExtraConfigurations().clear(); // return ResponseResultUtil.build(data); } /** * Update job configuration. * * @param jobConfiguration job configuration */ @PutMapping public ResponseResult<Boolean> updateJobConfig(@RequestBody final JobConfigurationPOJO jobConfiguration) { // for missing jobExtraConfiguration JobConfigurationPOJO old = jobAPIService.getJobConfigurationAPI().getJobConfiguration(jobConfiguration.getJobName()); jobConfiguration.setJobExtraConfigurations(old.getJobExtraConfigurations()); // jobAPIService.getJobConfigurationAPI().updateJobConfiguration(jobConfiguration); return ResponseResultUtil.build(Boolean.TRUE); } // JobConfigurationPOJO private Collection<YamlConfiguration<JobExtraConfiguration>> jobExtraConfigurations = new LinkedList<>();
修复版Gitee: shardingsphere-elasticjob-ui.git,点击右侧发行版,下载jar包,操作方式见发行版说明。