DeviceTwinClient, когда вызывает метод getTags (), возвращает java.lang.IllegalArgumentException - PullRequest
0 голосов
/ 17 мая 2019

Когда вызывает запрос iotHub для получения DevicetwinDevice для нескольких устройств:

SqlQuery sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, generateWhere(listDeviceIds), null);
            Query twinQueryCollection = twinClient.queryTwin(sqlQuery.getQuery());
            QueryOptions options = new QueryOptions();
            while (twinClient.hasNextDeviceTwin(twinQueryCollection)) {
                    deviceTwinList.add(twinClient.getNextDeviceTwin(twinQueryCollection));
            }

Когда позже вызывается getTags () из элемента, генерируется исключение:

throw new IllegalArgumentException("Key cannot contain illegal unicode control characters '.', '$', ' '");

Проблема в том, что элемент внутри тегов содержит ключи с $:

{"Session":"Sessio1",
"ManufacturingDate":"2019-0517T08:57:20.260+02:00[Europe/Madrid]",
"IV":"01.00",
"**$version**":1.0,
"Subtype":"-----",
"**$metadata**":{}
}

эти элементы в теге не мои. это ошибка SDK? Мой код содержит ошибку?

1 Ответ

0 голосов
/ 17 мая 2019

Я нашел возможное решение проблемы, после выполнения запроса я получаю список DeviceTwinDevice.Чтобы получить теги без исключения, мне нужно выполнить twinClient.getTwin (deviceTwinDevice); .Вот так:

SqlQuery sqlQuery = SqlQuery.createSqlQuery("*", SqlQuery.FromType.DEVICES, generateWhere(listDeviceIds), null);
            Query twinQueryCollection = twinClient.queryTwin(sqlQuery.getQuery());
            QueryOptions options = new QueryOptions();
            while (twinClient.hasNextDeviceTwin(twinQueryCollection)) {
                    deviceTwinList.add(twinClient.getNextDeviceTwin(twinQueryCollection));
            }
            for (DeviceTwinDevice deviceTwinDevice : deviceTwinList) {
                **twinClient.getTwin(deviceTwinDevice);**
                if(!deviceTwinDevice.getTags().isEmpty()) {
                    -------------------------------------------------------
                }

getTwin () метод удалить $ keys.В этом случае я отправляю несколько сообщений в Azure IotHub.Запрос и getTwin для отдельного устройства.Я хочу сделать то же самое в уникальном сообщении с Azure IotHub.Возможно ли это?

...