【问题标题】:How to get specific object from ModelNode result如何从 ModelNode 结果中获取特定对象
【发布时间】:2019-07-14 07:07:53
【问题描述】:

我与 ModelControllerClient 合作以获取有关在 Wildfly 服务器 上使用的 Logger 的一些信息。 我想要一份所有记录器名称的列表。

这是我获取有关记录器的所有信息的方式:

ModelNode op = new ModelNode();
op.get("operation").set("read-resource");

ModelNode address = op.get("address");
address.add("subsystem", "logging");
address.add("logger", "*");

ModelNode result = client.execute(op);

这是我得到的 ModelNode 结果的一个小例子。

{
        "address" => [
            ("subsystem" => "logging"),
            ("logger" => "jacorb")
        ],
        "outcome" => "success",
        "result" => {
            "category" => "jacorb",
            "filter" => undefined,
            "filter-spec" => undefined,
            "handlers" => undefined,
            "level" => "WARN",
            "use-parent-handlers" => true
        }
    },
    {
        "address" => [
            ("subsystem" => "logging"),
            ("logger" => "jacorb.config")
        ],
        "outcome" => "success",
        "result" => {
            "category" => "jacorb.config",
            "filter" => undefined,
            "filter-spec" => undefined,
            "handlers" => undefined,
            "level" => "ERROR",
            "use-parent-handlers" => true
        }
    },

我只想获取“logger”/“category”的值。

我试图通过以下方式获取记录器的名称:

result.get("logger");

但它返回“未定义”。我想问题是我有不止一个名为“logger”的对象。当我尝试使用“类别”时也会发生同样的情况。

【问题讨论】:

标签: java jboss wildfly application-server


【解决方案1】:

您需要先阅读结果。在简单的情况下,它将是result.get("result", "logger")。您还可以使用Operations API 并执行Operations.readResult(result).get("logger") 之类的操作。

如果您只想要记录器名称,这里是一个示例:

try (ModelControllerClient client = ModelControllerClient.Factory.create("localhost", 9990)) {
    final ModelNode address = Operations.createAddress("subsystem", "logging");
    final ModelNode op = Operations.createOperation(ClientConstants.READ_CHILDREN_NAMES_OPERATION, address);
    op.get(ClientConstants.CHILD_TYPE).set("logger");
    final ModelNode result = client.execute(op);
    if (Operations.isSuccessfulOutcome(result)) {
        final List<ModelNode> loggerNames = Operations.readResult(result).asList();
        for (ModelNode loggerName : loggerNames) {
            System.out.printf("logger=%s%n", loggerName.asString());
        }
    } else {
        System.err.printf("Failed to get the logger names: %s%n", Operations.getFailureDescription(result).asString());
    }
}

如果您想要完整的描述,您可以改用read-children-resource 操作。

WildFly 文档也有一个关于 using the ModelControllerClientModelNode and ModelType API 的部分。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 2015-03-14
    • 2018-05-26
    • 1970-01-01
    • 2017-08-06
    • 2022-08-15
    • 2016-12-10
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多