Nifi自定义Processor出现WebSocket ControllerService代理类转换错误如何解决
异常原因
这个异常是NiFi的NAR类加载隔离机制导致的:NiFi的每个扩展组件包(NAR)都有独立的类加载器,你自定义Processor的NAR包和WebSocketService接口所在的官方WebSocket NAR包由不同类加载器加载。即使两个类的全限定名完全一致,不同类加载器加载的类也会被JVM判定为不同类型,因此ControllerService的代理对象无法强转成你代码中引用的WebSocketService类型。官方内置的PutWebSocket组件和WebSocket服务接口属于同一类加载上下文,因此不会出现该问题。
解决步骤
- 调整自定义Processor的Maven依赖配置:将
nifi-websocket-services-api依赖的scope设置为provided,避免重复打包WebSocket相关类到自定义NAR中。 - 修改自定义NAR的打包插件配置:在
nar-maven-plugin的配置项中添加<parentNar>标签,指定父NAR为官方的org.apache.nifi:nifi-websocket-services-nar,让你的自定义NAR继承父NAR的类加载器,共用同一套WebSocket类定义。 - 重新打包自定义Processor,清理NiFi的旧扩展缓存后重启服务,再进行功能测试即可。
内容的提问来源于stack exchange,提问作者Hari N
相关产品推荐
相关产品推荐

