我用的是阿里巴巴的Rsocket。我有带代码的代理服务:
public interface ExampleService {
Mono<String> getMessage();
}和实现:
@RSocketService(serviceInterface = ExampleService.class, encoding = "json")
@Service
@RequiredArgsConstructor
public class ExampleServiceImpl implements ExampleService {
@Override
public Mono<String> getMessage() {
return Mono.just(response);
}
}和客户端服务(其他spring应用程序):
public interface ExampleService {
Mono<String> getMessage();
}
@Configuration
public class RSocketConfig {
@Bean
public ExampleService exampleService(@Autowired UpstreamManager upstreamManager) {
return RSocketRemoteServiceBuilder
.client(ExampleService.class)
.service("com.example.rsocket.ExampleService")
.upstreamManager(upstreamManager)
.acceptEncodingType(RSocketMimeType.Json)
.build();
}
}当我在控制器中注入ExampleService的Bean并使用getMessage()方法时,我得到了异常:
Caused by: java.lang.ClassCastException: class reactor.core.publisher.MonoContextWrite cannot be cast to class java.lang.Integer (reactor.core.publisher.MonoContextWrite is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap') 原因是什么?
发布于 2021-11-22 00:40:54
是的,这是一个由忽略hashCode,equals,toString方法的InvocationHandler引起的错误。
如上所述,对代理实例上在java.lang.Object中声明的hashCode、equals或toString方法的调用将被编码并调度到调用处理程序的
方法,其编码和调度方式与接口方法调用的编码和调度方式相同。传递给invoke的方法对象的声明类将是java.lang.Object。从java.lang.Object继承的代理实例的其他公共方法不会被代理类覆盖,因此调用这些方法的行为就像调用java.lang.Object实例一样。
1.1.2版本已经修复,详情请参考https://github.com/alibaba/alibaba-rsocket-broker/issues/174。
https://stackoverflow.com/questions/69837617
复制相似问题