XmlRpcClient解析具有多个Variable类型的响应

时间:2012-10-25 07:54:41

标签: java xml-parsing xml-rpc 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 );

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

由于

1 个答案:

答案 0 :(得分:1)

实际上,根据您的观点,您的问题有多个答案。

1) If you are communicating with Java based system using XML-RPC

Apache XML-RPC库附带了一个名为ClientFactory的便捷类。此类允许您将服务接口(在您的情况下是您正在调用的对象的接口METHOD_DEVICE_HEALTH)绑定到使用者的JVM中的对象(调用xmlRpcClient.execute(METHOD_DEVICE_HEALTH, params)的对象)。有关实施的更多详细信息,请查看this link

在这个中心里,你甚至可以拥有像

这样的转移对象
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) If you are communicating with other systems

那么,在这种情况下,你的gona必须处理你自己的序列化和反序列化过程。您可以使用该JAXB,它具有内置JDK 1.6和1.7的参考实现。 This post让您了解如何执行此操作。