Mike Edwards wrote:
Jean-Sebastien,
What happens to the model object that is being constructed when this
error occurs?
I'm assuming this is a reference or a wire of some kind?
Yours, Mike.
Jean-Sebastien Delfino wrote:
I'm changing the throw new IncompatibleInterfaceContractException()
statements in the composite builders to log statements. I need to do
that for three reasons:
- Throwing that exception abruptly stops further processing,
preventing us to continue validating the composite and log other
relevant errors.
- That exception stops the composite builder and prevents me to build
a domain composite when there's an incompatible interface in part of
the domain.
- We're handling most other similar errors as logs so I'm not sure why
we've kept that one as a thrown exception, for example in the
following code:
boolean isCompatible =
interfaceContractMapper.isCompatible(compositeServiceInterfaceContract,promotedServiceInterfaceContract);
if(!isCompatible){
throw new
IncompatibleInterfaceContractException("Interface of composite service
"+promotedServiceName +" must be subset of the interface declared by
promoted component service.", compositeServiceInterfaceContract,
promotedServiceInterfaceContract);
}
}
} else {
warning("PromotedServiceNotFound", composite,
composite.getName().toString(), promotedServiceName);
if a "PromotedServiceNotFound" error is considered benign enough to
just be logged, then an "IncompatibleInterface" situation (in that
case the promoted service was found, so we're in a better shape here)
is a good candidate for logging as well :)
No change to the model object.
Looking further in this code (BaseWireBuilderImpl), there are 6 cases of
incompatible interfaces, 4 were logged, 2 were throwing exceptions. I
changed the 2 exceptions to log like the 4 other cases.
--
Jean-Sebastien