У меня есть интерфейс:
public interface ThirdPartySystemCaller {
void sendRequest(String request) throws ThirdPartySystemException;
}
И реализация:
@Slf4j
@Service
public class ThirdPartySystemCallerImpl implements ThirdPartySystemCaller {
@Override
public void sendRequest(String request) throws ThirdPartySystemException {
if (request == null) throw new ThirdPartySystemException();
log.info("send: {}", request);
}
}
И у меня есть ведьма CryptoService, которая может подписать запрос:
public interface CryptoService {
String signRequest(String request) throws CryptoException;
}
И Это реализация:
@Slf4j
@Service
public class CryptoServiceImpl implements CryptoService {
@Override
public String signRequest(String request) throws CryptoException {
if (request.length() > 100) throw new CryptoException(); //just for example
return "signed " + request;
}
}
Теперь я могу пользоваться этими услугами:
String signedRequest = cryptoService.signRequest("Hello");
thirdPartySystemCaller.sendRequest(signedRequest);
Но мне нужно каждый раз звонить в обе службы. Я хочу создать Proxy
:
@Slf4j
@Service
public class ThirdPartySystemCallerSignedProxy implements ThirdPartySystemCaller {
private final ThirdPartySystemCaller thirdPartySystemCaller;
private final CryptoService cryptoService;
public ThirdPartySystemCallerSignedProxy(ThirdPartySystemCaller thirdPartySystemCaller, CryptoService cryptoService) {
this.thirdPartySystemCaller = thirdPartySystemCaller;
this.cryptoService = cryptoService;
}
@Override
public void sendRequest(String request) throws ThirdPartySystemException {
String signedRequest = cryptoService.signRequest(request);
thirdPartySystemCaller.sendRequest(signedRequest);
}
}
Но мой ThirdPartySystemCallerSignedProxy
реализует ThirdPartySystemCaller
интерфейс и sendRequest
метод сгенерирует только ThirdPartySystemException
. Но если cryptoService
бросить CryptoException
, мне тоже нужно бросить.
Как я могу это сделать?
Я думал сделать непроверенные исключения, но мне нужно проверить.