Я использую сервис, который получает данные из FLow. Возвращаемым типом вызова () является HashMap. При вызове APi я получаю следующее исключение.Я читал, что HashMap не входит в белый список. Может кто-нибудь подсказать, как вернуть Map или ConcurrentHashMap из потока Corda в службу.
"com.esotericsoftware.kryo.KryoException: класс java.util.HashMap не аннотирован и не включен в белый список, поэтому его нельзя использовать при сериализации \ nСериализация трассировки: \ nvalue (rx.Notification)",
Некоторые фрагменты кода:
@Suspendable
@Override
public Map<Party, StateAndRef<MembershipState>> call() throws FlowException {
MembershipsCacheHolder membershipService = getServiceHub().cordaService(MembershipsCacheHolder.class);
MembershipsCache cache = membershipService.getCache();
Instant now = getServiceHub().getClock().instant();
System.out.println("==========started the Get membership flow " + forceRefresh + "cahce" + cache);
if (forceRefresh || cache == null || cache.getExpires() == null || cache.getExpires().isBefore(now)) {
MemberConfigurationService configuration = getServiceHub().cordaService(MemberConfigurationService.class);
Party bno = configuration.bnoParty();
FlowSession bnoSession = initiateFlow(bno);
UntrustworthyData<MembershipsListResponse> packet2 = bnoSession.sendAndReceive(MembershipsListResponse.class, new MembershipListRequest());
MembershipsListResponse response = packet2.unwrap(data -> {
// Perform checking on the object received.
// T O D O: Check the received object.
// Return the object.
return data;
});
try {
MembershipsCache newCache = MembershipsCache.from(response);
membershipService.setCache(newCache);
} catch (Exception e) {
System.out.println("==========failed the Get membership flow " + forceRefresh + "cahce" + cache);
e.printStackTrace();
}
Map<Party, StateAndRef<MembershipState>> hashMap = new HashMap<Party, StateAndRef<MembershipState>>(membershipService.getCache().getMembershipMap());
return hashMap;
} else {
Map<Party, StateAndRef<MembershipState>> hashMap = new HashMap<Party, StateAndRef<MembershipState>>(cache.getMembershipMap());
return hashMap;
}
}
}
}
И код со стороны загрузочной пружины:
@GetMapping(value = "getMemberShips", produces = MediaType.APPLICATION_JSON_VALUE)
public String getMembership() throws InterruptedException,JsonProcessingException , ExecutionException{
FlowProgressHandle<Map<Party, StateAndRef<MembershipState>> > flowHandle = proxy.startTrackedFlowDynamic(GetMembershipsFlow.GetMembershipsFlowInitiator.class,true);
flowHandle.getProgress().subscribe(evt -> System.out.printf(">> %s\n", evt));
final Map<Party, StateAndRef<MembershipState>> result = flowHandle
.getReturnValue()
.get();
return result.toString();
}