diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/InitializationListener.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/InitializationListener.java index 24233d5c..6cadaf0b 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/InitializationListener.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/InitializationListener.java @@ -1,5 +1,6 @@ package hirs.attestationca; +import hirs.attestationca.configuration.AttestationCertificateAuthorityConfiguration; import hirs.attestationca.persist.DBAppraiserManager; import hirs.attestationca.persist.DBDeviceGroupManager; import hirs.attestationca.persist.DBPolicyManager; @@ -21,7 +22,7 @@ public class InitializationListener implements ServletContextListener { context.getEnvironment().addActiveProfile(HIRSProfiles.SERVER); // register the database configuration and refresh the context - context.register(PersistenceConfiguration.class); + context.register(AttestationCertificateAuthorityConfiguration.class); context.refresh(); // obtain reference to hibernate session factory diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/AttestationCertificateAuthorityConfiguration.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/AttestationCertificateAuthorityConfiguration.java index 9ffc2209..f3e74c78 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/AttestationCertificateAuthorityConfiguration.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/AttestationCertificateAuthorityConfiguration.java @@ -1,13 +1,5 @@ package hirs.attestationca.configuration; -import hirs.attestationca.persist.DBDeviceGroupManager; -import hirs.attestationca.persist.DBDeviceManager; -import hirs.attestationca.persist.DBReferenceEventManager; -import hirs.attestationca.persist.DBReferenceManifestManager; -import hirs.persist.DeviceGroupManager; -import hirs.persist.DeviceManager; -import hirs.persist.ReferenceEventManager; -import hirs.persist.ReferenceManifestManager; import hirs.structs.converters.SimpleStructConverter; import hirs.structs.converters.StructConverter; import hirs.utils.LogConfigurationUtil; @@ -16,7 +8,6 @@ import org.apache.logging.log4j.Logger; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -29,6 +20,7 @@ import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @@ -57,11 +49,13 @@ import java.util.Properties; @Configuration @PropertySources({ @PropertySource(value = "classpath:defaults.properties"), + @PropertySource(value = "classpath:persistence.properties"), // detects if file exists, if not, ignore errors @PropertySource(value = "file:/etc/hirs/aca/aca.properties", ignoreResourceNotFound = true) }) +@EnableTransactionManagement @ComponentScan({ "hirs.attestationca", "hirs.attestationca.service", "hirs.attestationca.rest", "hirs.validation", "hirs.data.service" }) @Import(PersistenceConfiguration.class) @@ -81,56 +75,8 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi private static final String CLIENT_FILES_PATH = "file:/etc/hirs/aca/client-files/"; - @Value("${persistence.db.url}") - private String url; - - @Value("${persistence.db.username}") - private String username; - - @Value("${persistence.db.password}") - private String password; - - @Value("${persistence.db.driverClass}") - private String driverClass; - - @Value("${persistence.db.maximumPoolSize}") - private String maximumPoolSize; - - @Value("${persistence.db.connectionTimeout}") - private String connectionTimeout; - - @Value("${persistence.db.leakDetectionThreshold}") - private String leakDetectionThreshold; - - @Value("${persistence.hibernate.dialect}") - private String dialect; - - @Value("${persistence.hibernate.ddl}") - private String ddl; - - @Value("${persistence.hibernate.contextClass}") - private String contextClass; - - @Value("${persistence.hibernate.provider}") - private String provider; - - @Value("${persistence.db.maxTransactionRetryAttempts}") - private int maxTransactionRetryAttempts; - - @Value("${persistence.db.retryWaitTimeMilliseconds}") - private long retryWaitTimeMilliseconds; - - @Value("${aca.directories.certificates}") - private String certificatesLocation; - - @Value("${aca.keyStore.location}") - private String keyStoreLocation; - - @Value("${aca.keyStore.password:''}") - private String keyStorePassword; - - @Value("${aca.keyStore.alias}") - private String keyAlias; +// @Value("${persistence.db.url}") +// private String url; @Autowired private Environment environment; @@ -147,6 +93,22 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi return new PropertySourcesPlaceholderConfigurer(); } + /** + * Configures a session factory bean that in turn configures the hibernate session factory. + * Enables auto scanning of annotations such that entities do not need to be registered in a + * hibernate configuration file. + * + * @return session factory + */ + @Bean + public LocalSessionFactoryBean sessionFactory() { + sessionFactory = new LocalSessionFactoryBean(); + sessionFactory.setDataSource(dataSource()); + sessionFactory.setHibernateProperties(hibernateProperties()); + sessionFactory.setPackagesToScan("hirs"); + return sessionFactory; + } + /** * Configures the data source to be used by the hibernate session factory. * @@ -155,18 +117,43 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setUrl(url); - dataSource.setUsername(username); - dataSource.setPassword(password); - dataSource.setDriverClassName(driverClass); + dataSource.setUrl( + environment.getRequiredProperty("persistence.db.url")); + dataSource.setUsername( + environment.getRequiredProperty("persistence.db.username")); + dataSource.setPassword( + environment.getRequiredProperty("persistence.db.password")); + dataSource.setDriverClassName( + environment.getRequiredProperty("persistence.db.driverClass")); -// dataSource.setMaximumPoolSize(Integer.parseInt(maximumPoolSize)); -// dataSource.setConnectionTimeout(Long.parseLong(connectionTimeout)); -// dataSource.setLeakDetectionThreshold(Long.parseLong(leakDetectionThreshold)); +// dataSource.setMaximumPoolSize(Integer.parseInt(environment.getRequiredProperty("persistence.db.maximumPoolSize")); +// dataSource.setConnectionTimeout(Long.parseLong(environment.getRequiredProperty("persistence.db.connectionTimeout")); +// dataSource.setLeakDetectionThreshold(Long.parseLong(environment.getRequiredProperty("persistence.db.leakDetectionThreshold")); return dataSource; } + /** + * Generates properties using configuration file that will be used to configure the session + * factory. + * + * @return properties for hibernate session factory + */ + @Bean + public Properties hibernateProperties() { + Properties properties = new Properties(); + properties.put("hibernate.dialect", + environment.getRequiredProperty("persistence.hibernate.dialect")); + properties.put("hibernate.show_sql", + environment.getRequiredProperty("hibernate.show_sql")); + properties.put("hibernate.format_sql", + environment.getRequiredProperty("hibernate.format_sql")); + properties.put("hibernate.hbm2ddl.auto", + environment.getRequiredProperty("persistence.hibernate.ddl")); +// properties.put("hibernate.current_session_context_class", "thread"); + return properties; + } + /** * Initialization of the ACA. Detects environment and runs configuration * methods as required. This method is intended to be invoked by the Spring @@ -179,7 +166,8 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi Security.addProvider(new BouncyCastleProvider()); // obtain path to ACA configuration - Path certificatesPath = Paths.get(certificatesLocation); + Path certificatesPath = Paths.get( + environment.getRequiredProperty("aca.directories.certificates")); // create base directories if they do not exist try { @@ -190,11 +178,12 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi } // create the ACA key store if it doesn't exist - Path keyStorePath = Paths.get(keyStoreLocation); + Path keyStorePath = Paths.get(environment.getRequiredProperty("aca.keyStore.location")); if (!Files.exists(keyStorePath)) { throw new IllegalStateException( String.format("ACA Key Store not found at %s. Consult the HIRS User " - + "Guide for ACA installation instructions.", keyStoreLocation)); + + "Guide for ACA installation instructions.", + environment.getRequiredProperty("aca.keyStore.location"))); } } @@ -209,14 +198,16 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi try { // load the key from the key store - PrivateKey acaKey = (PrivateKey) keyStore.getKey(keyAlias, - keyStorePassword.toCharArray()); + PrivateKey acaKey = (PrivateKey) keyStore.getKey("aca.keyStore.alias", + environment.getRequiredProperty("aca.keyStore.password").toCharArray()); // break early if the certificate is not available. if (acaKey == null) { throw new BeanInitializationException(String.format("Key with alias " + "%s was not in KeyStore %s. Ensure that the KeyStore has the " - + "specified certificate. ", keyAlias, keyStoreLocation)); + + "specified certificate. ", + environment.getRequiredProperty("aca.keyStore.alias"), + environment.getRequiredProperty("aca.keyStore.location"))); } return acaKey; } catch (Exception e) { @@ -224,44 +215,13 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi + "from key store: " + e.getMessage(), e); } } - - /** - * Generates properties using configuration file that will be used to configure the session - * factory. - * - * @return properties for hibernate session factory - */ - @Bean - public Properties hibernateProperties() { - Properties properties = new Properties(); - properties.put("hibernate.hbm2ddl.auto", ddl); - properties.put("hibernate.dialect", dialect); - properties.put("hibernate.current_session_context_class", "thread"); - return properties; - } - - /** - * Configures a session factory bean that in turn configures the hibernate session factory. - * Enables auto scanning of annotations such that entities do not need to be registered in a - * hibernate configuration file. - * - * @return session factory - */ - @Bean - public LocalSessionFactoryBean sessionFactory() { - LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); - sessionFactory.setDataSource(dataSource()); - sessionFactory.setHibernateProperties(hibernateProperties()); - sessionFactory.setPackagesToScan("hirs"); - return sessionFactory; - } /** * Configure a transaction manager for the hibernate session factory. * * @return transaction manager */ @Bean - public HibernateTransactionManager transactionManager() { + public HibernateTransactionManager getTransactionManager() { return new HibernateTransactionManager(sessionFactory().getObject()); } @@ -271,7 +231,8 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi */ @Bean(name = "maxTransactionRetryAttempts") public int maxTransactionRetryAttempts() { - return maxTransactionRetryAttempts; + return environment.getRequiredProperty("persistence.db.maxTransactionRetryAttempts", + Integer.class); } /** @@ -280,7 +241,8 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi */ @Bean(name = "retryWaitTimeMilliseconds") public long retryWaitTimeMilliseconds() { - return retryWaitTimeMilliseconds; + return environment.getRequiredProperty("persistence.db.retryWaitTimeMilliseconds", + Long.class); } /** @@ -291,13 +253,16 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi KeyStore keyStore = keyStore(); try { - X509Certificate acaCertificate = (X509Certificate) keyStore.getCertificate(keyAlias); + X509Certificate acaCertificate = (X509Certificate) keyStore.getCertificate( + environment.getRequiredProperty("aca.keyStore.alias")); // break early if the certificate is not available. if (acaCertificate == null) { throw new BeanInitializationException(String.format("Certificate with alias " + "%s was not in KeyStore %s. Ensure that the KeyStore has the " - + "specified certificate. ", keyAlias, keyStoreLocation)); + + "specified certificate. ", + environment.getRequiredProperty("aca.keyStore.alias"), + environment.getRequiredProperty("aca.keyStore.location"))); } return acaCertificate; @@ -313,12 +278,13 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi */ @Bean public KeyStore keyStore() { - Path keyStorePath = Paths.get(keyStoreLocation); + Path keyStorePath = Paths.get(environment.getRequiredProperty("aca.keyStore.location")); // attempt to open the key store. if that fails, log a meaningful message before failing. try { KeyStore keyStore = KeyStore.getInstance("JKS"); - keyStore.load(Files.newInputStream(keyStorePath), keyStorePassword.toCharArray()); + keyStore.load(Files.newInputStream(keyStorePath), + environment.getRequiredProperty("aca.keyStore.password").toCharArray()); return keyStore; } catch (Exception e) { LOG.error(String.format( @@ -343,46 +309,6 @@ public class AttestationCertificateAuthorityConfiguration implements WebMvcConfi return new SimpleStructConverter(); } - /** - * Creates a {@link DeviceGroupManager} ready to use. - * - * @return {@link DeviceGroupManager} - */ - @Bean - public DeviceGroupManager deviceGroupManager() { - return new DBDeviceGroupManager(sessionFactory.getObject()); - } - - /** - * Creates a {@link DeviceManager} ready to use. - * - * @return {@link DeviceManager} - */ - @Bean - public DeviceManager deviceManager() { - return new DBDeviceManager(sessionFactory.getObject()); - } - - /** - * Creates a {@link ReferenceManifestManager} ready to use. - * - * @return {@link ReferenceManifestManager} - */ - @Bean - public ReferenceManifestManager referenceManifestManager() { - return new DBReferenceManifestManager(sessionFactory.getObject()); - } - - /** - * Creates a {@link ReferenceEventManager} ready to use. - * - * @return {@link ReferenceEventManager} - */ - @Bean - public ReferenceEventManager referenceEventManager() { - return new DBReferenceEventManager(sessionFactory.getObject()); - } - @Override public void addResourceHandlers(final ResourceHandlerRegistry resourceHandlerRegistry) { resourceHandlerRegistry.addResourceHandler("/client-files/**") diff --git a/HIRS_Utils/src/main/java/hirs/utils/MySqlUtf8CompatibleDialect.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/MySqlUtf8CompatibleDialect.java similarity index 97% rename from HIRS_Utils/src/main/java/hirs/utils/MySqlUtf8CompatibleDialect.java rename to HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/MySqlUtf8CompatibleDialect.java index 86ad0c92..0a08bab2 100644 --- a/HIRS_Utils/src/main/java/hirs/utils/MySqlUtf8CompatibleDialect.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/MySqlUtf8CompatibleDialect.java @@ -1,4 +1,4 @@ -package hirs.utils; +package hirs.attestationca.configuration; import org.hibernate.dialect.MySQLDialect; diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java index 6d08ccf6..697213ed 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/configuration/PersistenceConfiguration.java @@ -1,8 +1,5 @@ package hirs.attestationca.configuration; -import hirs.data.persist.SupplyChainValidationSummary; -import hirs.persist.CertificateManager; -import hirs.persist.CrudManager; import hirs.attestationca.persist.DBCertificateManager; import hirs.attestationca.persist.DBDeviceGroupManager; import hirs.attestationca.persist.DBDeviceManager; @@ -14,6 +11,9 @@ import hirs.attestationca.persist.DBReferenceManifestManager; import hirs.attestationca.persist.DBReportManager; import hirs.attestationca.persist.DBReportRequestStateManager; import hirs.attestationca.persist.DBReportSummaryManager; +import hirs.data.persist.SupplyChainValidationSummary; +import hirs.persist.CertificateManager; +import hirs.persist.CrudManager; import hirs.persist.DeviceGroupManager; import hirs.persist.DeviceManager; import hirs.persist.PolicyManager; @@ -26,6 +26,7 @@ import hirs.persist.ReportSummaryManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; /** @@ -36,6 +37,7 @@ import org.springframework.orm.hibernate5.LocalSessionFactoryBean; * file, the default persistence file will be used instead. */ @Configuration +@Import(AttestationCertificateAuthorityConfiguration.class) public class PersistenceConfiguration { /** diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/DBReferenceManifestManager.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/DBReferenceManifestManager.java index 46fcc1c7..ac7b8eb7 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/DBReferenceManifestManager.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/persist/DBReferenceManifestManager.java @@ -7,16 +7,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; -import org.xml.sax.SAXException; -import javax.persistence.criteria.CriteriaBuilder; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.IOException; -import java.io.InputStream; import java.util.HashSet; -import java.util.List; import java.util.Set; /** @@ -28,13 +20,6 @@ public class DBReferenceManifestManager extends DBManager implements ReferenceManifestManager { private static final Logger LOGGER = LogManager.getLogger(DBReferenceManifestManager.class); - /** - * The variable that establishes a schema factory for xml processing. - */ - public static final SchemaFactory SCHEMA_FACTORY - = SchemaFactory.newInstance(ReferenceManifest.SCHEMA_LANGUAGE); - - private static Schema schema; /** * Default Constructor. @@ -43,39 +28,6 @@ public class DBReferenceManifestManager extends DBManager */ public DBReferenceManifestManager(final SessionFactory sessionFactory) { super(ReferenceManifest.class, sessionFactory); - getSchemaObject(); - } - - /** - * This method sets the xml schema for processing RIMs. - * - * @return the schema - */ - public static final Schema getSchemaObject() { - if (schema == null) { - InputStream is = null; - try { - is = ReferenceManifest.class - .getClassLoader() - .getResourceAsStream(ReferenceManifest.SCHEMA_URL); - schema = SCHEMA_FACTORY.newSchema(new StreamSource(is)); - } catch (SAXException saxEx) { - LOGGER.error(String.format("Error setting schema for validation!%n%s", - saxEx.getMessage())); - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException ioEx) { - LOGGER.error(String.format("Error closing input stream%n%s", - ioEx.getMessage())); - } - } else { - LOGGER.error("Input stream variable is null"); - } - } - } - return schema; } /** @@ -93,10 +45,11 @@ public class DBReferenceManifestManager extends DBManager public Set get( final ReferenceManifestSelector referenceManifestSelector) { LOGGER.info("Getting the full set of Reference Manifest files."); - CriteriaBuilder builder = this.getFactory().getCriteriaBuilder(); - return new HashSet<>((List) getWithCriteria( - referenceManifestSelector.getReferenceManifestClass(), - referenceManifestSelector.getCriterion(builder)) +// CriteriaBuilder builder = this.getFactory().getCriteriaBuilder(); + return new HashSet<>(0 +// new HashSet<>((List) getWithCriteria( +// referenceManifestSelector.getReferenceManifestClass(), +// referenceManifestSelector.getCriterion(builder)) ); } diff --git a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/SupplyChainValidationServiceImpl.java b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/SupplyChainValidationServiceImpl.java index 9373b9d7..57cafc60 100644 --- a/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/SupplyChainValidationServiceImpl.java +++ b/HIRS_AttestationCA/src/main/java/hirs/attestationca/service/SupplyChainValidationServiceImpl.java @@ -1,5 +1,6 @@ package hirs.attestationca.service; +import hirs.attestationca.configuration.PersistenceConfiguration; import hirs.appraiser.Appraiser; import hirs.appraiser.SupplyChainAppraiser; import hirs.data.persist.AppraisalStatus; diff --git a/HIRS_AttestationCA/src/main/resources/persistence.properties b/HIRS_AttestationCA/src/main/resources/persistence.properties index 45e3afe5..3fe8f715 100644 --- a/HIRS_AttestationCA/src/main/resources/persistence.properties +++ b/HIRS_AttestationCA/src/main/resources/persistence.properties @@ -11,7 +11,9 @@ persistence.db.maxTransactionRetryAttempts = 10 persistence.db.retryWaitTimeMilliseconds = 3000 # Properties used by the Hibernate Session Factory -persistence.hibernate.dialect = hirs.utils.MySqlUtf8CompatibleDialect +persistence.hibernate.dialect = hirs.attestationca.configuration.MySqlUtf8CompatibleDialect persistence.hibernate.ddl = update +hibernate.show_sql = true +hibernate.format_sql = true persistence.hibernate.contextClass = org.springframework.orm.hibernate5.SpringSessionContext persistence.hibernate.provider = org.hibernate.hikaricp.internal.HikariCPConnectionProvider diff --git a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/CommonPageConfiguration.java b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/CommonPageConfiguration.java index 2d9c3f0a..244d7aca 100644 --- a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/CommonPageConfiguration.java +++ b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/CommonPageConfiguration.java @@ -1,5 +1,6 @@ package hirs.attestationca.portal.page; +import hirs.attestationca.configuration.PersistenceConfiguration; import hirs.attestationca.portal.datatables.DataTableView; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -11,6 +12,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.UrlBasedViewResolver; @@ -26,8 +28,7 @@ import java.nio.charset.StandardCharsets; @EnableWebMvc @ComponentScan("hirs.attestationca.portal.page.controllers") @Import({ PersistenceConfiguration.class }) -public class CommonPageConfiguration { - +public class CommonPageConfiguration implements WebMvcConfigurer { /** * @return bean to resolve injected annotation.Value diff --git a/HIRS_Utils/src/main/java/hirs/data/persist/BaseReferenceManifest.java b/HIRS_Utils/src/main/java/hirs/data/persist/BaseReferenceManifest.java index a693374c..215e075f 100644 --- a/HIRS_Utils/src/main/java/hirs/data/persist/BaseReferenceManifest.java +++ b/HIRS_Utils/src/main/java/hirs/data/persist/BaseReferenceManifest.java @@ -1,7 +1,6 @@ package hirs.data.persist; import com.fasterxml.jackson.annotation.JsonIgnore; -import hirs.persist.DBReferenceManifestManager; import hirs.persist.ReferenceManifestManager; import hirs.persist.ReferenceManifestSelector; import hirs.utils.xjc.BaseElement; @@ -13,6 +12,7 @@ import hirs.utils.xjc.SoftwareIdentity; import hirs.utils.xjc.SoftwareMeta; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.xml.sax.SAXException; import javax.persistence.Column; import javax.persistence.Entity; @@ -22,7 +22,9 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.UnmarshalException; import javax.xml.bind.Unmarshaller; import javax.xml.namespace.QName; +import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; @@ -43,6 +45,11 @@ public class BaseReferenceManifest extends ReferenceManifest { * Holds the name of the 'base64Hash' field. */ public static final String BASE_64_HASH_FIELD = "base64Hash"; + /** + * The variable that establishes a schema factory for xml processing. + */ + public static final SchemaFactory SCHEMA_FACTORY + = SchemaFactory.newInstance(ReferenceManifest.SCHEMA_LANGUAGE); private static JAXBContext jaxbContext; @@ -398,7 +405,7 @@ public class BaseReferenceManifest extends ReferenceManifest { Schema schema; try { - schema = DBReferenceManifestManager.getSchemaObject(); + schema = getSchemaObject(); if (jaxbContext == null) { jaxbContext = JAXBContext.newInstance(SCHEMA_PACKAGE); } @@ -854,4 +861,36 @@ public class BaseReferenceManifest extends ReferenceManifest { swidName, this.getPlatformManufacturer(), this.getPlatformModel(), getTagId(), this.getBase64Hash()); } + + /** + * This method sets the xml schema for processing RIMs. + * + * @return the schema + */ + protected static final Schema getSchemaObject() { + Schema schema = null; + InputStream is = null; + try { + is = ReferenceManifest.class + .getClassLoader() + .getResourceAsStream(ReferenceManifest.SCHEMA_URL); + schema = SCHEMA_FACTORY.newSchema(new StreamSource(is)); + } catch (SAXException saxEx) { + LOGGER.error(String.format("Error setting schema for validation!%n%s", + saxEx.getMessage())); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException ioEx) { + LOGGER.error(String.format("Error closing input stream%n%s", + ioEx.getMessage())); + } + } else { + LOGGER.error("Input stream variable is null"); + } + } + + return schema; + } } diff --git a/HIRS_Utils/src/main/resources/persistence.properties b/HIRS_Utils/src/main/resources/persistence.properties index 45e3afe5..1e1e83d4 100644 --- a/HIRS_Utils/src/main/resources/persistence.properties +++ b/HIRS_Utils/src/main/resources/persistence.properties @@ -11,7 +11,7 @@ persistence.db.maxTransactionRetryAttempts = 10 persistence.db.retryWaitTimeMilliseconds = 3000 # Properties used by the Hibernate Session Factory -persistence.hibernate.dialect = hirs.utils.MySqlUtf8CompatibleDialect +persistence.hibernate.dialect = hirs.attestationca.configuration.MySqlUtf8CompatibleDialect persistence.hibernate.ddl = update persistence.hibernate.contextClass = org.springframework.orm.hibernate5.SpringSessionContext persistence.hibernate.provider = org.hibernate.hikaricp.internal.HikariCPConnectionProvider