为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 ModelNode 结果中获取特定对象

如何从 ModelNode 结果中获取特定对象

翻阅古今 2022-06-30 11:40:41
我与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        }    },我只想获取“记录器”/“类别”的值。我试图通过以下方式获取记录器的名称:result.get("logger");但它返回“未定义”。我想问题是我有不止一个名为“logger”的对象。当我尝试使用“类别”时也会发生同样的情况。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您需要先阅读结果。在简单的情况下,它会是result.get("result", "logger"). 您还可以使用OperationsAPI 并执行类似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 文档也有一节介绍如何使用ModelControllerClient以及ModelNode 和 ModelType API。


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号