如何从返回的 XML-RPC 对象中获取 String 数组?

发布于 2024-09-27 15:55:22 字数 576 浏览 4 评论 0原文

我正在使用 Apache java XML-RPC 最新版本。

在服务器中发送数组的代码如下:

LinkedList<String> messages = new LinkedList<String>();

public String[] getMessages() {
    System.out.println("Sent messages");
    return messages.toArray(new String[messages.size()]);
}

为了在客户端接收,我尝试了如下操作:

String[] result = (String[]) client.execute("Message.getMessages", new Object[] {});

这应该将我接收到的对象转换为正确的类型(String[])。不幸的是它没有,我收到以下错误:[Ljava.lang.Object;无法转换为 [Ljava.lang.String;

所以我想知道是否有人知道如何在 java XML-RPC 中正确发送和接收数组?

I am using Apache java XML-RPC latest version.

The code for sending the array in Server is the following:

LinkedList<String> messages = new LinkedList<String>();

public String[] getMessages() {
    System.out.println("Sent messages");
    return messages.toArray(new String[messages.size()]);
}

To receive in the client I have tried something like this:

String[] result = (String[]) client.execute("Message.getMessages", new Object[] {});

This should cast the Object that I receive to the right type (String[]). Unfortunately it doesn't and I get the following error: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

So I am wondering if anyone knows how to properly send and receive arrays in java XML-RPC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

慈悲佛祖 2024-10-04 15:55:22

基于 http://ws.apache.org/xmlrpc/types.html 客户端即使服务器返回 String[],API 也将始终返回 Object[]

我建议循环遍历结果并在每个结果上调用 toString()成员。丑陋,但工作。

Based on http://ws.apache.org/xmlrpc/types.html the client API will always return Object[] even if the server returns String[]

I would suggest looping over the result and calling toString() on each member. ugly, but working.

婴鹅 2024-10-04 15:55:22

您已经创建了自己的函数来分析 xmlrpc 响应,该响应通常是一个 Object[],我正在使用这个:

private void XmlRpcResponseAnalyser(List<Object> s) {
    StringBuilder sb = new StringBuilder();
    sb.append("\n\nString Builder:\n");
    int c = 1;
    for (Object o : s) {
        try {
            Map<String, Object> map = (Map<String, Object>) o;
            sb.append("\n\n").append(c++);
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue().toString();
                if (value.contains("java.lang.Object")) {
                    try {
                        Object[] arr = (Object[]) entry.getValue();
                        sb.append("\n").append(key).append(" = ").append(arr[1]);
                    } catch (Exception e) {
                        sb.append("null");
                    }
                }else {
                    sb.append("\n").append(key).append(" = ").append(value);
                }
            }
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    tvDebug.append(sb.toString());
}

tvDebug (TextView) 将显示如下:

1
key1=value1
key2=value2

2
key1=value1
key2=value2

...

You have create your own function to analyse the xmlrpc response which is usually an Object[], I'm using this:

private void XmlRpcResponseAnalyser(List<Object> s) {
    StringBuilder sb = new StringBuilder();
    sb.append("\n\nString Builder:\n");
    int c = 1;
    for (Object o : s) {
        try {
            Map<String, Object> map = (Map<String, Object>) o;
            sb.append("\n\n").append(c++);
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue().toString();
                if (value.contains("java.lang.Object")) {
                    try {
                        Object[] arr = (Object[]) entry.getValue();
                        sb.append("\n").append(key).append(" = ").append(arr[1]);
                    } catch (Exception e) {
                        sb.append("null");
                    }
                }else {
                    sb.append("\n").append(key).append(" = ").append(value);
                }
            }
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
    tvDebug.append(sb.toString());
}

The tvDebug (TextView) will be show like this:

1
key1=value1
key2=value2

2
key1=value1
key2=value2

...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文