diff --git a/cli/src/main/java/org/jboss/as/cli/impl/aesh/cmd/security/model/ElytronUtil.java b/cli/src/main/java/org/jboss/as/cli/impl/aesh/cmd/security/model/ElytronUtil.java index 164a9acbcfc..d61d017c832 100644 --- a/cli/src/main/java/org/jboss/as/cli/impl/aesh/cmd/security/model/ElytronUtil.java +++ b/cli/src/main/java/org/jboss/as/cli/impl/aesh/cmd/security/model/ElytronUtil.java @@ -753,9 +753,7 @@ private static ModelNode buildUsersResource(PropertiesRealmConfiguration config) mn.get(Util.RELATIVE_TO).set(config.getRelativeTo()); } mn.get(Util.DIGEST_REALM_NAME).set(config.getExposedRealmName()); - if (config.getPlainText()) { - mn.get(Util.PLAIN_TEXT).set(config.getPlainText()); - } + mn.get(Util.PLAIN_TEXT).set(config.getPlainText()); return mn; } diff --git a/controller/src/main/java/org/jboss/as/controller/operations/global/ReadAttributeHandler.java b/controller/src/main/java/org/jboss/as/controller/operations/global/ReadAttributeHandler.java index dd8da39e5e3..319ac1c99c9 100644 --- a/controller/src/main/java/org/jboss/as/controller/operations/global/ReadAttributeHandler.java +++ b/controller/src/main/java/org/jboss/as/controller/operations/global/ReadAttributeHandler.java @@ -32,6 +32,9 @@ import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.ExpressionResolver; +import org.jboss.as.controller.ObjectListAttributeDefinition; +import org.jboss.as.controller.ObjectMapAttributeDefinition; +import org.jboss.as.controller.ObjectTypeAttributeDefinition; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationDefinition; import org.jboss.as.controller.OperationFailedException; @@ -302,6 +305,9 @@ static void resolveAttribute(OperationContext context, AttributeDefinition attri } else if (subModel.hasDefined(attribute.getName())) { final ModelNode result = subModel.get(attribute.getName()); context.getResult().set(result); + if (defaults) { + handleObjectAttributes(context.getResult(), attribute); + } } else if (defaults && attribute.getDefaultValue() != null) { // No defined value in the model. See if we should reply with a default from the metadata, // reply with undefined, or fail because it's a non-existent attribute name @@ -312,4 +318,34 @@ static void resolveAttribute(OperationContext context, AttributeDefinition attri context.getResult(); // this initializes the "result" to ModelType.UNDEFINED } } + + private static void handleObjectAttributes(ModelNode model, AttributeDefinition attribute) { + if (attribute instanceof ObjectTypeAttributeDefinition) { + readNestedDefaults(model, (ObjectTypeAttributeDefinition) attribute); + } else if (attribute instanceof ObjectListAttributeDefinition) { + ObjectTypeAttributeDefinition valueType = ((ObjectListAttributeDefinition) attribute).getValueType(); + for (int i = 0; i < model.asInt(); i++) { + readNestedDefaults(model.get(i), valueType); + } + } else if (attribute instanceof ObjectMapAttributeDefinition) { + ObjectTypeAttributeDefinition valueType = ((ObjectMapAttributeDefinition) attribute).getValueType(); + for (String key : model.keys()) { + readNestedDefaults(model.get(key), valueType); + } + } + } + + private static void readNestedDefaults(ModelNode model, ObjectTypeAttributeDefinition attribute) { + for (AttributeDefinition subAttribute : attribute.getValueTypes()) { + ModelNode defaultValue = subAttribute.getDefaultValue(); + String subAttrName = subAttribute.getName(); + if (defaultValue != null && !model.hasDefined(subAttrName)) { + model.get(subAttrName).set(defaultValue); + } + + if (model.hasDefined(subAttrName)) { + handleObjectAttributes(model.get(subAttrName), subAttribute); + } + } + } }