package org.apereo.cas.support.saml; import net.shibboleth.utilities.java.support.xml.ParserPool; import org.opensaml.core.config.ConfigurationService; import org.opensaml.core.config.InitializationException; import org.opensaml.core.config.InitializationService; import org.opensaml.core.xml.XMLObjectBuilderFactory; import org.opensaml.core.xml.config.XMLObjectProviderRegistry; import org.opensaml.core.xml.io.MarshallerFactory; import org.opensaml.core.xml.io.UnmarshallerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; import javax.annotation.PostConstruct; /** * Load the OpenSAML config context. * * @author Misagh Moayyed * @since 4.1 */ public class OpenSamlConfigBean { private static final Logger LOGGER = LoggerFactory.getLogger(OpenSamlConfigBean.class); private final ParserPool parserPool; private XMLObjectBuilderFactory builderFactory; private MarshallerFactory marshallerFactory; private UnmarshallerFactory unmarshallerFactory; /** * Instantiates the config bean. * @param parserPool the parser pool */ public OpenSamlConfigBean(final ParserPool parserPool) { this.parserPool = parserPool; } /** * Gets the configured parser pool. * * @return the parser pool */ public ParserPool getParserPool() { return this.parserPool; } public XMLObjectBuilderFactory getBuilderFactory() { return this.builderFactory; } public MarshallerFactory getMarshallerFactory() { return this.marshallerFactory; } public UnmarshallerFactory getUnmarshallerFactory() { return this.unmarshallerFactory; } /** * Initialize opensaml. */ @PostConstruct public void init() { LOGGER.debug("Initializing OpenSaml configuration..."); Assert.notNull(this.parserPool, "parserPool must not be null"); try { InitializationService.initialize(); } catch (final InitializationException e) { throw new RuntimeException("Exception initializing OpenSAML", e); } XMLObjectProviderRegistry registry; synchronized (ConfigurationService.class) { registry = ConfigurationService.get(XMLObjectProviderRegistry.class); if (registry == null) { LOGGER.debug("XMLObjectProviderRegistry did not exist in ConfigurationService, will be created"); registry = new XMLObjectProviderRegistry(); ConfigurationService.register(XMLObjectProviderRegistry.class, registry); } } registry.setParserPool(this.parserPool); this.builderFactory = registry.getBuilderFactory(); Assert.notNull(this.builderFactory, "parserPool cannot be null"); this.marshallerFactory = registry.getMarshallerFactory(); Assert.notNull(this.marshallerFactory, "marshallerFactory cannot be null"); this.unmarshallerFactory = registry.getUnmarshallerFactory(); Assert.notNull(this.unmarshallerFactory, "unmarshallerFactory cannot be null"); LOGGER.debug("Initialized OpenSaml successfully."); } }