猿问

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

我与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”的对象。当我尝试使用“类别”时也会发生同样的情况。


翻阅古今
浏览 89回答 1
1回答

HUWWW

您需要先阅读结果。在简单的情况下,它会是result.get("result", "logger"). 您还可以使用OperationsAPI 并执行类似Operations.readResult(result).get("logger").如果您只想要记录器名称,这里是一个示例:try (ModelControllerClient client = ModelControllerClient.Factory.create("localhost", 9990)) {&nbsp; &nbsp; final ModelNode address = Operations.createAddress("subsystem", "logging");&nbsp; &nbsp; final ModelNode op = Operations.createOperation(ClientConstants.READ_CHILDREN_NAMES_OPERATION, address);&nbsp; &nbsp; op.get(ClientConstants.CHILD_TYPE).set("logger");&nbsp; &nbsp; final ModelNode result = client.execute(op);&nbsp; &nbsp; if (Operations.isSuccessfulOutcome(result)) {&nbsp; &nbsp; &nbsp; &nbsp; final List<ModelNode> loggerNames = Operations.readResult(result).asList();&nbsp; &nbsp; &nbsp; &nbsp; for (ModelNode loggerName : loggerNames) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.printf("logger=%s%n", loggerName.asString());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; System.err.printf("Failed to get the logger names: %s%n", Operations.getFailureDescription(result).asString());&nbsp; &nbsp; }}如果您想要完整的描述,您可以改用该read-children-resource操作。WildFly 文档也有一节介绍如何使用ModelControllerClient以及ModelNode 和 ModelType API。
随时随地看视频慕课网APP

相关分类

Java
我要回答