访问返回的Java对象的字段

时间:2013-09-18 17:12:06

标签: java class object xml-rpc

我使用xml-rpc客户端对XML-RPC WordPress API / Posts进行了简单的客户端调用,并根据他们的文档here返回结构。如何访问返回值。

Here is a look at my code:
XmlRpcClient client = new XmlRpcClient("http://www.mywebsite.net/xmlrpc.php", false);

    String[] fields = new String[4];
    fields[0] = "post_id";
    fields[1] = "post_title";
    fields[2] = "post_date";
    fields[3] = "post_content";
    Object token = client.invoke("wp.getPost", new Object[]{"0","myusername", "mypassword", 1545, fields });
    System.out.println(token);

我打印时使用
     的System.out.println(令牌);
我得到以下结论:

{item_one =我是第一项,item_two =我是第二项......}

如何访问item_one和item_two?

2 个答案:

答案 0 :(得分:1)

缺少一些信息(什么是XmlRpcClient的完全限定名称?),但假设client.invoke实际上只返回一个Object而不是具有访问器方法的更具体的东西,你可以使用类似这样的东西来解析响应:

Object token = client.invoke("wp.getPost", new Object[]{"0","myusername", "mypassword", 1545, fields });
String[] items = token.toString().split(",");
for (String item : items) {
    String[] parts = item.split("=");
    String key = parts[0];
    String value = parts[1];
    // do stuff with your keys and values here
}

当然这不是完美的代码 - 你可能需要检查空值,使用String.trim()等,但它应该让你开始。

答案 1 :(得分:1)

您没有返回数据的真实Java表示形式,因为您没有可以访问的对象

 token.item_one

而是你有一个包含一个集合表示的字符串 - 这是(在概念上)可以通过其名称检索值的东西

 token.get("item_one")

这种字符串格式可能是JSON,它看起来很像JavaScript,因此可以代表非常复杂的数据。通常,您可以拥有包含对象的对象和对象数组(例如,Customer可能包含Address对象)

所以你有两种可能性:

1)。将字符串解析为真正的Java表示形式,例如标准Java集合类之一。然后使用我在上面显示的按名称命名的样式。

2)。定义一个模仿数据结构的Java类,然后解析字符串以填充这样的对象,然后可以使用“点”形式的访问 - 你真的有一个表示数据的Java对象。

在第一种情况下,有合适的库,例如quickJson

对于第二种,您可以使用标准的实现,例如JAX / B,这可能需要更多的工作,因为您可能需要手动构建目标Java类。企业Java运行时将为您提供这些工具以及工具来帮助或查看诸如Jackson之类的实现。您将看到JAX / B专注于从XML到Java的映射,但this等教程显示了如何使用JSON。

我的猜测是第一个选项,简单解析一个集合可能就足够了。