0

我正在使用 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 );

检索结果,但不确定如何遍历每个值以找到 operationStatus 值。是否有更优雅的解决方案来使用 xmlRpcClient 解析结果?所以我只检索我感兴趣的字段?

谢谢

4

1 回答 1

1

实际上,根据您的场景,您的问题有不止一个答案。

1) 如果您使用 XML-RPC 与基于 Java 的系统进行通信

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)如果您正在与其他系统进行通信

好吧,在这种情况下,您的 gona 必须自己处理序列化和反序列化过程。您可以使用该 JAXB,它具有内置 JDK 1.6 和 1.7 的参考实现。这篇文章为您提供了如何做到这一点的想法。

于 2012-10-25T09:40:53.830 回答