It would be better if OpenSamlImplementation didn't use reflection.
OpenSamlImplementation#buildSAMLObject(Class<?>) uses reflection to discover how to construct an object of the provided type, but it could simply take a QName and achieve the same end without reflecting, e.g. buildSamlObject(QName).