Ответ синтаксического анализа XmlRpcClient с несколькими типами переменных
Я использую XmlRpcClient для подключения к серверу XML-RPC. В ответ на мой запрос в ответе XML я получу:
int cpuLoad,
String fanStatus,
String fanStatusWorst,
String temperatureStatus,
String temperatureStatusWorst,
String rtcBatteryStatus,
String rtcBatteryStatusWorst,
String voltagesStatus,
String voltagesStatusWorst,
String operationalStatus
я использую
HashMap result = (HashMap) xmlRpcClient.execute(METHOD_DEVICE_HEALTH, params );
чтобы получить результаты, но не уверен, как я могу перебрать каждое значение, чтобы найти значение operatingStatus. Есть ли более элегантное решение для анализа результатов с использованием xmlRpcClient? Так я просто получаю интересующие меня поля?
Спасибо
1 ответ
На самом деле есть несколько ответов на ваш вопрос, в зависимости от вашего кенарио.
1) Если вы общаетесь с системой на основе Java с использованием XML-RPC
Apache XML-RPC библиотека поставляется с удобным классом под названием ClientFactory
, Этот класс позволяет вам связать ваш интерфейс службы (в вашем случае интерфейс объекта, который вы вызываете METHOD_DEVICE_HEALTH
) к объекту в JVM вашего потребителя (объект, который вызывает xmlRpcClient.execute(METHOD_DEVICE_HEALTH, params)
). Для получения более подробной информации о реализации, посмотрите на эту ссылку.
В этом кенарио вы даже можете иметь такой объект
public class DeviceHealth {
int cpuLoad,
String fanStatus,
String fanStatusWorst,
String temperatureStatus,
String temperatureStatusWorst,
String rtcBatteryStatus,
String rtcBatteryStatusWorst,
String voltagesStatus,
String voltagesStatusWorst,
String operationalStatus
// getters and setters
}
и метод в вашем классе обслуживания, возвращающий непосредственно его тип
public interface HealthService {
DeviceHealth checkDeviceHealth(int id);
}
public class DefaultHealthService implements HealthService {
public DeviceHealth checkDeviceHealth(int id) {}
}
Фреймворк автоматически сериализует и десериализует этот объект для вас.
2) Если вы общаетесь с другими системами
Что ж, в этом случае вам придется самостоятельно выполнять процесс сериализации и десериализации. Вы можете использовать для этого JAXB, который имеет эталонную реализацию, встроенную в JDK 1.6 и 1.7. Этот пост дает вам представление о том, как это сделать.