1

我正在编写一个 Java 应用程序,它与使用 XML RPC 支持的基于 Drupal 的通信。

其中一种方法需要一个对象字典,这很好,因为它会自动转换为<struct>. 但是,客户端库以任何整数转换Map<String, Object>为长整数的方式进行转换。要在 XMLRPC 调用中支持长整数,必须启用供应商扩展。但是,服务器不支持这些扩展。

据我所知,PHP 中没有任何内容可以支持<ex:i8>. 有趣的是,所谓的 XMLRPC 扩展官方网站并没有定义这里详述的那些。

除了循环遍历所有成员Map<String, Object>并手动将所有长整数转换为整数之外,有什么方法可以在这里进行正确调用吗?

4

1 回答 1

0

我最终编写了这段代码,它将所有Long实例转换为IntegeraMapHashMapa 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 回答