将params传递给ejabberd命令时出现XmlRpcException

时间:2017-02-13 13:44:29

标签: java ejabberd xml-rpc

我正在尝试使用apache XMLRPC api通过XMLRPC调用Ejabberd命令create_room_with_opts。以下是我正在使用的代码。

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL(<EJABBERD_HOST_URL>));
XmlRpcClient client = new XmlRpcClient();
client.setConfig(config);
// Command string
String command = "create_room_with_opts";

Map<String, Object> struct1 = new HashMap<String, Object>();
struct1.put("user", <ADMIN_USERNAME>);
struct1.put("server", <HOST>);
struct1.put("password", <ADMIN_PASSWORD>);
struct1.put("admin", Boolean.TRUE);

Map<String, Object> struct = new HashMap<String, Object>();
struct.put("name", "testroom");
struct.put("service", <NAME_OF_SERVICE>);
struct.put("host", <HOST>);
struct.put("options", getOpts());

HashMap result = (HashMap) client.execute(command, params);
static Object[] getOpts() {
    Object opt[] = new Object[1];
    HashMap<String, Object> option = new HashMap<String, Object>();
    HashMap<String, Object> optionTuple = new HashMap<String, Object>();
    option.put("name", "public");
    option.put("value", Boolean.TRUE);
    optionTuple.put("option", option);

    return opt;
}

但是,当我运行此代码时,我得到以下异常。

org.apache.xmlrpc.XmlRpcException: Error -122
Parameter '{struct,[{name,<<"public">>},{value,<<"true">>}]}' can't be coerced to type '{tuple,[{name,binary},{value,binary}]}'
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:181)
    at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:149)
    at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:95)
    at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
    at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
    at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)

我无法识别此代码中的问题。

我已经尝试了API-Documentation的ejabberd文档中给出的示例, 但似乎该示例中存在语法错误。

我能够成功地为同一个Ejabberd服务器调用其他命令(例如create_roomregister等),所以我知道配置是正确的。

我正在使用 JDK1.7 和apache XMLRPC api 3.1.3

我可以查看其他任何示例(create_room_with_opts命令)。

0 个答案:

没有答案