+ @Override
+ public <T extends BaseIdentity> Class<? extends T> resolveIdentity(final IdentityAttributeRef identityRef,
+ final Class<T> expectedBaseClass) {
+ final QName qName = QName.create(identityRef.getqNameOfIdentity());
+ final Class<?> deserialized = this.bindingContextProvider.getBindingContext().getIdentityClass(qName);
+ if (deserialized == null) {
+ throw new IllegalStateException("Unable to retrieve identity class for " + qName + ", null response from "
+ + this.bindingContextProvider.getBindingContext());
+ }
+ if (expectedBaseClass.isAssignableFrom(deserialized)) {
+ return (Class<T>) deserialized;
+ }
+ LOG.error("Cannot resolve class of identity {} : deserialized class {} is not a subclass of {}.", identityRef,
+ deserialized, expectedBaseClass);
+ throw new IllegalArgumentException(
+ "Deserialized identity " + deserialized + " cannot be cast to " + expectedBaseClass);
+ }
+
+ @Override
+ public <T extends BaseIdentity> void validateIdentity(final IdentityAttributeRef identityRef,
+ final Class<T> expectedBaseClass, final JmxAttribute jmxAttribute) {
+ resolveIdentity(identityRef, expectedBaseClass);
+ }
+
+ @Override
+ public int compareTo(final DependencyResolverImpl dependencyResolverImpl) {
+ this.transactionStatus.checkCommitStarted();
+ return Integer.compare(getMaxDependencyDepth(), dependencyResolverImpl.getMaxDependencyDepth());
+ }