【问题标题】:XmlRpcClient parse response with multiple Variable typesXmlRpcClient 使用多种变量类型解析响应
【发布时间】:2012-10-25 07:54:40
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: java xml-parsing xml-rpc xmlrpcclient


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢 Trein,将使用选项 2
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多