diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy
index e9faeb69c..4c0229b22 100644
--- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy
+++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy
@@ -246,6 +246,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
httpMaxCacheEntries: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntries,
httpMaxCacheEntrySize: resolver.httpMetadataResolverAttributes?.httpMaxCacheEntrySize) {
+ childNodes()
switch (MetadataRequestURLConstructionScheme.SchemeType.get(resolver.metadataRequestURLConstructionScheme.type)) {
case MetadataRequestURLConstructionScheme.SchemeType.METADATA_QUERY_PROTOCOL:
MetadataQueryProtocolScheme scheme = (MetadataQueryProtocolScheme) resolver.metadataRequestURLConstructionScheme
@@ -276,7 +277,6 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
default:
break
}
- childNodes()
}
}
diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy
index a45448016..dd8bf8954 100644
--- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy
+++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JsonSchemaBuilderService.groovy
@@ -64,17 +64,17 @@ class JsonSchemaBuilderService {
def definition = [title : it['displayName'],
description: it['helpText'],
type : 'array']
- if (it['displayType'] == 'set' || it['displayType'] == 'selection_list') {
- definition['uniqueItems'] = true
- } else if (it['displayType'] == 'list') {
- definition['uniqueItems'] = false
- }
def items = [type : 'string',
minLength: 1, // TODO: should this be configurable?
maxLength: 255] //TODO: or this?
- items.examples = it['examples']
+ if (it['displayType'] == 'set' || it['displayType'] == 'list') {
+ definition['uniqueItems'] = true
+ items.examples = it['examples']
+ } else if (it['displayType'] == 'selection_list') {
+ definition['uniqueItems'] = false
+ items.enum = it['examples']
+ }
items['default'] = it['defaultValue']
-
definition['items'] = items
json[(String) it['name']] = definition
diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java
index 862624b05..cd7c564c7 100644
--- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java
+++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelper.java
@@ -21,47 +21,49 @@ public static void updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttr
ParserPool parserPool) {
AbstractDynamicMetadataResolver dynamicMetadataResolver = (AbstractDynamicMetadataResolver) metadataResolver;
- if (attributes.getBackgroundInitializationFromCacheDelay() != null) {
- dynamicMetadataResolver
- .setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay())));
- }
+ if (attributes != null) {
+ if (attributes.getBackgroundInitializationFromCacheDelay() != null) {
+ dynamicMetadataResolver
+ .setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay())));
+ }
- if (attributes.getCleanupTaskInterval() != null) {
- dynamicMetadataResolver.setCleanupTaskInterval(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getCleanupTaskInterval())));
- }
+ if (attributes.getCleanupTaskInterval() != null) {
+ dynamicMetadataResolver.setCleanupTaskInterval(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getCleanupTaskInterval())));
+ }
- if (attributes.getInitializeFromPersistentCacheInBackground()) {
- dynamicMetadataResolver.setInitializeFromPersistentCacheInBackground(attributes.getInitializeFromPersistentCacheInBackground());
- }
+ if (attributes.getInitializeFromPersistentCacheInBackground()) {
+ dynamicMetadataResolver.setInitializeFromPersistentCacheInBackground(attributes.getInitializeFromPersistentCacheInBackground());
+ }
- if (attributes.getMaxCacheDuration() != null) {
- dynamicMetadataResolver.setMaxCacheDuration(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxCacheDuration())));
- }
+ if (attributes.getMaxCacheDuration() != null) {
+ dynamicMetadataResolver.setMaxCacheDuration(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxCacheDuration())));
+ }
- if (attributes.getMaxIdleEntityData() != null) {
- dynamicMetadataResolver.setMaxIdleEntityData(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxIdleEntityData())));
- }
+ if (attributes.getMaxIdleEntityData() != null) {
+ dynamicMetadataResolver.setMaxIdleEntityData(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getMaxIdleEntityData())));
+ }
- if (attributes.getMinCacheDuration() != null) {
- dynamicMetadataResolver.setMinCacheDuration(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getMinCacheDuration())));
- }
+ if (attributes.getMinCacheDuration() != null) {
+ dynamicMetadataResolver.setMinCacheDuration(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getMinCacheDuration())));
+ }
- if (attributes.getBackgroundInitializationFromCacheDelay() != null) {
- dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService()
- .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay())));
- }
+ if (attributes.getBackgroundInitializationFromCacheDelay() != null) {
+ dynamicMetadataResolver.setBackgroundInitializationFromCacheDelay(toMillis(placeholderResolverService()
+ .resolveValueFromPossibleTokenPlaceholder(attributes.getBackgroundInitializationFromCacheDelay())));
+ }
- if (attributes.getRefreshDelayFactor() != null) {
- dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor());
- }
+ if (attributes.getRefreshDelayFactor() != null) {
+ dynamicMetadataResolver.setRefreshDelayFactor(attributes.getRefreshDelayFactor());
+ }
- if (attributes.getRemoveIdleEntityData() != null) {
- dynamicMetadataResolver.setRemoveIdleEntityData(attributes.getRemoveIdleEntityData());
+ if (attributes.getRemoveIdleEntityData() != null) {
+ dynamicMetadataResolver.setRemoveIdleEntityData(attributes.getRemoveIdleEntityData());
+ }
}
//TODO: This takes a XMLObjectLoadSaveManager. Do we have what we need to create one?
diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy
new file mode 100644
index 000000000..b4bf01305
--- /dev/null
+++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlMetadataResolverConstructorHelperSpec.groovy
@@ -0,0 +1,22 @@
+package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml
+
+import org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver
+import spock.lang.Specification
+
+//TODO: we need to fill this out
+class OpenSamlMetadataResolverConstructorHelperSpec extends Specification {
+ def "SHIBUI-2163: make sure that we don't get a NPE if attributes are null"() {
+ given:
+ def x = Mock(AbstractDynamicMetadataResolver)
+
+ when:
+ OpenSamlMetadataResolverConstructorHelper.updateOpenSamlMetadataResolverFromDynamicMetadataResolverAttributes(
+ x,
+ null,
+ null
+ )
+
+ then:
+ noExceptionThrown()
+ }
+}
diff --git a/backend/src/test/resources/conf/278.2.xml b/backend/src/test/resources/conf/278.2.xml
index c8bd08e6b..9218ebcd5 100644
--- a/backend/src/test/resources/conf/278.2.xml
+++ b/backend/src/test/resources/conf/278.2.xml
@@ -1,6 +1,5 @@
- content
@@ -12,10 +11,11 @@
md:SPSSODescriptor
+ content
-
+
\ No newline at end of file
diff --git a/backend/src/test/resources/conf/278.xml b/backend/src/test/resources/conf/278.xml
index 0c1bfd794..46e57a6b4 100644
--- a/backend/src/test/resources/conf/278.xml
+++ b/backend/src/test/resources/conf/278.xml
@@ -1,15 +1,15 @@
- content
md:SPSSODescriptor
+ content
-
+
\ No newline at end of file
diff --git a/backend/src/test/resources/conf/984-2.xml b/backend/src/test/resources/conf/984-2.xml
index c3bd16e05..f6db94956 100644
--- a/backend/src/test/resources/conf/984-2.xml
+++ b/backend/src/test/resources/conf/984-2.xml
@@ -1,6 +1,5 @@
- http://mdq-beta.incommon.org/global
+ http://mdq-beta.incommon.org/global
-
+
\ No newline at end of file
diff --git a/backend/src/test/resources/conf/984.xml b/backend/src/test/resources/conf/984.xml
index a67eb1a93..42328a0c0 100644
--- a/backend/src/test/resources/conf/984.xml
+++ b/backend/src/test/resources/conf/984.xml
@@ -1,6 +1,5 @@
- http://mdq-beta.incommon.org/global
+ http://mdq-beta.incommon.org/global
-
+
\ No newline at end of file