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)。実装の詳細については、このリンクをご覧ください。

このシナリオでは、次のような transfert オブジェクトを使用することもできます

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 はシリアライゼーションとデシリアライゼーションのプロセスを独自に処理する必要があります。JDK 1.6 および 1.7 に組み込みの参照実装を持つ JAXB を使用できます。この投稿では、これを行う方法についてのアイデアを提供します。

于 2012-10-25T09:40:53.830 に答える