1

XML RPC を使用してサポートされている Drupal ベースと通信する Java アプリケーションを作成しています。

メソッドの 1 つはオブジェクトのディクショナリを想定していますが、これは自動的に に変換されるため問題ありません<struct>。ただし、クライアント ライブラリは、整数が long に変換Map<String, Object>される方法で変換します。XMLRPC 呼び出しで長整数をサポートするには、ベンダー拡張機能を有効にする必要があります。ただし、これらの拡張機能はサーバーではサポートされていません。

私が見る限り、PHP には のようなタグのサポートを可能にするものは何もありません<ex:i8>。興味深いことに、XMLRPC 拡張機能の公式サイトと思われるサイトでは、ここで詳しく説明されているものを定義していません。

Map<String, Object>のすべてのメンバーをループして手動ですべての long を整数に変換する以外に、ここで正しい呼び出しを行う方法はありますか?

4

1 に答える 1

0

Long私は、すべてのインスタンスをIntegera MapHashMapまたは aに変換するこのコードを書くことになりましたJSONObject:

@SuppressWarnings("unchecked")
private Object fixLongs(Object p)
{
    String t = p.getClass().getName();
    if (t == "java.util.Map" || t == "java.util.HashMap" || t == "org.json.simple.JSONObject")
    {
        HashMap<Object, Object> n = new HashMap<Object, Object>(((HashMap<Object, Object>) p).size());
        Iterator<Entry<Object, Object>> it = ((HashMap<Object, Object>) p).entrySet().iterator();
        while (it.hasNext())
        {
            Entry<Object, Object> e = it.next();
            n.put(this.fixLongs(e.getKey()), this.fixLongs(e.getValue()));
        }
        return n;
    }
    else if (t == "java.lang.Long")
    {
        return new Integer(((Long) p).intValue());
    }
    else
    {
        return p;
    }
}
于 2012-12-13T13:58:03.537 に答える