Как получить конкретный объект из результата ModelNode - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю с ModelControllerClient , чтобы получить некоторую информацию о Logger, который используется на сервере Wildfly .Я хотел бы иметь список всех имен регистратора.

Вот как я получаю всю информацию о регистраторе:

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");

но он вернул "undefined".Я предполагаю, что проблема в том, что у меня есть более одного объекта под названием «регистратор».То же самое происходит, когда я пытаюсь сделать это с «категорией».

1 Ответ

0 голосов
/ 22 февраля 2019

Вы должны сначала прочитать результат.В простом случае это будет 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 есть раздел по с использованием ModelControllerClient и ModelNode и ModelType API.

...