Eclipse Milo: поддерживает ли метод массив аргументов?

Сервер OPCUA имеет метод с одним входным аргументом, например.

protected Variant[] invoke(InvocationContext invocationContext, Variant[] inputValues) {
        logger.debug("Invoking sqrt() method of objectId={}", invocationContext.getObjectId());

        double x = (double) inputValues[0].getValue();
        double xSqrt = Math.sqrt(x);

        return new Variant[]{new Variant(xSqrt)};
}

Могу ли я вызвать этот метод на клиенте OPCUA с массивом int? например [1,4,9,16,25]

CallMethodRequest request = new CallMethodRequest(
            objectId,
            methodId,
            new Variant[]{new Variant(input)}
);

Здесь inputArguments представляет собой массив Variant, могу ли я установить с помощью [1,4,9,16,25] и получить [1,2,3,4,5]?


person ford    schedule 19.05.2020    source источник
comment
Сервер OPCUA не менять, на клиенте OPCUA он может работать как поток? Если это поддерживает, как это сделать?   -  person ford    schedule 19.05.2020


Ответы (1)


Нет, это так не работает.

Однако вы можете отправить 5 CallMethodRequest внутри одного CallRequest.

person Kevin Herron    schedule 19.05.2020
comment
Кстати, как (на клиенте) получить входной аргумент МАССИВ или нет? и МАССИВ.длина. Если я меняю сервер OPCUA, используйте входной аргумент как массив. например Объект oInput = inputValues[0].getValue(); двойной x = (двойной) Array.get(oInput, i); В клиенте OPCUA просмотрите, как определить, что входной аргумент должен быть МАССИВОМ и размером МАССИВА? ранг ценности? - person ford; 20.05.2020
comment
Это всегда массив. Иногда он имеет 0 или 1 элемент, иногда больше. Атрибут ValueRank сообщит вам, сколько измерений имеет тип данных. Атрибут ArrayDimensions сообщит вам размер каждого измерения. Клиенты обычно читают свойства InputArguments и OutputArguments узла метода, чтобы узнать, какие входные/выходные данные ожидаются. - person Kevin Herron; 20.05.2020
comment
И если вы спрашиваете, как определить, должен ли любой заданный аргумент быть массивом или нет, эта информация будет найдена в структуре Argument, которую вы получили, прочитав свойства InputArguments и OutputArguments. - person Kevin Herron; 20.05.2020
comment
например На сервере есть метод с InputArguments.DataType=Identifiers.Int32 и ValueRank=2 и ArrayDimensions=[3,4]. На клиенте могу ли я вызвать метод с вводом типа [5,6]? или [[5,6]]? или [[5,6],[],[]]? - person ford; 21.05.2020
comment
Я думаю, что в этом случае сервер ожидает массив 2d размером примерно до [[1,2,3,4],[1,2,3,4],[1,2,3,4]]. - person Kevin Herron; 21.05.2020
comment
Я имею в виду, как насчет нерегулярного массива Java? [5,6] отсутствует измерение; [[5,6]] имеют два измерения, но являются неправильными; [[5,6],[],[]] некоторое измерение без элемента. - person ford; 22.05.2020
comment
Я думаю, что это будет на усмотрение сервера. - person Kevin Herron; 22.05.2020