Ответ синтаксического анализа 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. Этот пост дает вам представление о том, как это сделать.

Другие вопросы по тегам