(Map<?,?>): key: position, value: (class java.lang.Integer): 0
key: forum_title, value: (byte[]) Java
key: can_subscribe, value: (class java.lang.Boolean): false
key: forum_id, value: (class java.lang.String): 30
key: posts, value: (Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 84125
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424018
key: post_content, value: (byte[]) Hallo zusammen,
über eine XMLRPC-Schnittstelle bekomme ich ein Object
Object result = client.execute("get_thread", params);
System.out.println(result) gibt folgendes aus:
[quote]
{forum_id=16, prefix=[B@34f445, forum_name=[B@90ed81, posts=[Ljava.lang.Object;@d8c3ee, can_upload=false, is_s
ubscribed=false, topic_id=3433, total_post_num=131, topic_title=[B@1277a30}
[/quote]
Wie kann ich auf einzelne Werte von forum_id , total_post_num etc zugreifen?
Vielen Dank.
key: timestamp, value: (class java.lang.String): 1380198075
key: post_count, value: (class java.lang.Integer): 1
key: post_author_name, value: (byte[]) vinslave
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[]) Einzelne Felder aus dem Object auslesen.
key: post_time, value: (class java.util.Date): Thu Sep 26 14:21:15 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 84125
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424019
key: post_content, value: (byte[]) ich habe folgendes mit HashMap gemacht:
[quote]
HashMap<String, Object> result = new HashMap<String, Object>();
result = (HashMap) client.execute("get_thread", params);
System.out.println(result.get("forum_id"));
[/quote]
es funktioniert zwar, aber gibt es eine bessere Lösung?
key: timestamp, value: (class java.lang.String): 1380199336
key: post_count, value: (class java.lang.Integer): 2
key: post_author_name, value: (byte[]) vinslave
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Thu Sep 26 14:42:16 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 88805
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424023
key: post_content, value: (byte[]) Hat das zurückgegebene Objekt keine Getter, um auf die Member direkt zuzugreifen? Du könntest auch eine Unterklasse vom Objekt erstellen und die toString-Methode überschreiben und dort die gewünschten Member auflisten.
key: timestamp, value: (class java.lang.String): 1380200176
key: post_count, value: (class java.lang.Integer): 3
key: post_author_name, value: (byte[]) pr0gg3r
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Thu Sep 26 14:56:16 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 84125
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424028
key: post_content, value: (byte[]) es geht hier um die Response einer XMLRPC-Abfrage. Also es gibt leider keine Getter. (ist doch nicht möglich bei XMLRPC, oder?)
Ich kann toString überschreiben, aber zu welchem Zweck? Und in der überschriebenen Methode brauche ich auch die Möglichkeit auf die Members zuzugreifen. Ich habe die Lösung mit HashMap gefunden, allerdings bin ich damit nicht sehr zufrieden. Der Compiler sagt:
[QUOTE]Note: XmlRpcTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.[/QUOTE]
was ganz logisch ist. Und einige Members des Response-Objectes sind selbst Objekte. Also da brächte ich wieder eine Hashmap. Ich habe keine andere Idee.
key: timestamp, value: (class java.lang.String): 1380204223
key: post_count, value: (class java.lang.Integer): 4
key: post_author_name, value: (byte[]) vinslave
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Thu Sep 26 16:03:43 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 84125
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424031
key: post_content, value: (byte[]) und wie kann ich aus topic_title einen String gewinnen? System.out.println(result) liefert nur "topic_title=[B@1277a30}"
key: timestamp, value: (class java.lang.String): 1380205470
key: post_count, value: (class java.lang.Integer): 5
key: post_author_name, value: (byte[]) vinslave
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Thu Sep 26 16:24:30 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 24614
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424041
key: post_content, value: (byte[]) Von welchem Typ ist den dein Client? Was für einen Typ erwartest du denn aus dem execute?
Nutzt du Standard Bibliotheken oder hast du weitere jars in deinen Klassenpfad aufgenommen. Wenn du weitere jars nutzt welche nutzt du. Denn so ist das hier ein wildes drauf los raten was du da versuchst zu machen.
key: timestamp, value: (class java.lang.String): 1380227721
key: post_count, value: (class java.lang.Integer): 6
key: post_author_name, value: (byte[]) Schiller256
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Thu Sep 26 22:35:21 CEST 2013
(Map<?,?>): key: allow_smilies, value: (class java.lang.Boolean): true
key: post_author_id, value: (class java.lang.String): 84125
key: icon_url, value: (class java.lang.String):
key: attachment_authority, value: (class java.lang.Integer): 4
key: post_id, value: (class java.lang.String): 1424062
key: post_content, value: (byte[]) es werden einige Klassen importiert.
[quote]
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
[/quote]
Die jars werden hier benutzt:
ws-commons-util.jar
xmlrpc-client.jar
xmlrpc-common.jar
Leider ist die Dokumentation dazu nicht wirklich hilfreich. [url=http://ws.apache.org/xmlrpc/client.html]ws-xmlrpc - The Apache XML-RPC Client[/url]
client wird so definiert: XmlRpcClient client = new XmlRpcClient(); und liefert ein Objekt. result kann man im Prinzip auch so definieren:
HashMap result = new HashMap();
result = (HashMap) client.execute("get_thread", params);
System.out.println(result.get("forum_id"));
Gibt es keine allgemein Lösung, wie man Objekte aus dem Objekt auslesen kann?
key: timestamp, value: (class java.lang.String): 1380270646
key: post_count, value: (class java.lang.Integer): 7
key: post_author_name, value: (byte[]) vinslave
key: is_approved, value: (class java.lang.Boolean): true
key: attachments, value:
key: topic_id, value: (class java.lang.String): 158308
key: post_title, value: (byte[])
key: post_time, value: (class java.util.Date): Fri Sep 27 10:30:46 CEST 2013
key: can_upload, value: (class java.lang.Boolean): false
key: is_approved, value: (class java.lang.Boolean): true
key: topic_id, value: (class java.lang.String): 158308
key: total_post_num, value: (class java.lang.Integer): 7
key: topic_title, value: (byte[]) Einzelne Felder aus dem Object auslesen.
key: can_reply, value: (class java.lang.Boolean): false