XMLRPC IP.Board找不到调用的API模块

时间:2011-10-20 10:04:18

标签: java xml-rpc xmlrpcclient

我有一个案例:通过论坛引擎IP.Board的API与论坛合作。

所以我写了下一段代码:

package ru.test;

import java.net.MalformedURLException;
import java.net.URL;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class mainClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        try {
            config.setServerURL(new URL("http://hbf.by/interface/board/index.php"));
            XmlRpcClient client = new XmlRpcClient();
            client.setConfig(config);
            Object[] params = new Object[]{"74600b7376c4b1db69eaf8f155f2d157", "ipb","','"};

            Object result = client.execute("fetchOnlineUsers", params);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (XmlRpcException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

但我得到了异常

org.apache.xmlrpc.XmlRpcException: IP.Board could not locate an API module called ''
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:197)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
    at ru.test.mainClass.main(mainClass.java:23)

怎么了?

在文档(http://community.invisionpower.com/resources/documentation/index.html/_/developer-resources/miscellaneous-articles/xml-rpc-api-r246)中说:

  

您应该向interface / board / index.php文件提交XML-RPC调用。   您应该将所有参数作为结构发送。

     

每个请求必须提交两个参数:api_key - 这应该是   关键设置早些时候。 api_module - 这应该是“ipb”。   从理论上讲,你可以创建其他模块,但“ipb”就是这样   装有IP.Board。

我犯了错误。

还有我如何获得methods.php文件?

我写了网址http://hbf.by/interface/board/modules/ipb/methods.php

但得到空白页。

但也在文档中说:

  

打开interface / board / modules / ipb / methods.php文件以查看哪个   每个方法期望接收的参数,并将返回   响应

可能是某些服务器需要配置,但在互联网上我找不到它。

2 个答案:

答案 0 :(得分:1)

您的代码似乎与文档相符。

但是,XMLRPC经常在这个调用中指定模块

Object result = client.execute("ipb.fetchOnlineUsers", params);

你可以试试。

答案 1 :(得分:0)

我找到了麻烦的地方

不要使用Object [] params = new Object [] {“74600b5f2d157”,“ipb”,“','”};

改为使用

HashMap然后

对象结果= client.execute(“ipb.fetchOnlineUsers”,新对象[] {hMap});

它正常工作