olek07 Geschrieben 26. September 2013 Geschrieben 26. September 2013 Hallo zusammen, über eine XMLRPC-Schnittstelle bekomme ich ein Object Object result = client.execute("get_thread", params); System.out.println(result) gibt folgendes aus: {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} Wie kann ich auf einzelne Werte von forum_id , total_post_num etc zugreifen? Vielen Dank. Zitieren
olek07 Geschrieben 26. September 2013 Autor Geschrieben 26. September 2013 ich habe folgendes mit HashMap gemacht: HashMap<String, Object> result = new HashMap<String, Object>(); result = (HashMap) client.execute("get_thread", params); System.out.println(result.get("forum_id")); es funktioniert zwar, aber gibt es eine bessere Lösung? Zitieren
pr0gg3r Geschrieben 26. September 2013 Geschrieben 26. September 2013 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. Zitieren
olek07 Geschrieben 26. September 2013 Autor Geschrieben 26. September 2013 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: Note: XmlRpcTest.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 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. Zitieren
olek07 Geschrieben 26. September 2013 Autor Geschrieben 26. September 2013 und wie kann ich aus topic_title einen String gewinnen? System.out.println(result) liefert nur "topic_title=[b@1277a30}" Zitieren
Schiller256 Geschrieben 26. September 2013 Geschrieben 26. September 2013 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. Zitieren
olek07 Geschrieben 27. September 2013 Autor Geschrieben 27. September 2013 (bearbeitet) es werden einige Klassen importiert. import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; Die jars werden hier benutzt: ws-commons-util.jar xmlrpc-client.jar xmlrpc-common.jar Leider ist die Dokumentation dazu nicht wirklich hilfreich. http://ws.apache.org/xmlrpc/client.html 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? Bearbeitet 27. September 2013 von vinslave Zitieren
Schiller256 Geschrieben 27. September 2013 Geschrieben 27. September 2013 Hat es einen Grund wieso du mit einer Library rum hantierst die seit mehr als 3 Jahren nicht mehr angepasst wurde? Um Daten zu übertragen gibt es andere Möglichkeiten als XML-RPC. Wieso castest du das auf eine HashMap? Was für deinen Datentyp liefert dir denn die Operation get_Thread in deinem Server zurück? Du kannst in deinem Client doch direkt darauf casten. Zitieren
hbspike Geschrieben 2. Oktober 2013 Geschrieben 2. Oktober 2013 So wie mir das scheint, bekommst du halt von der execute Methode eine Map zurück. Das wird so ohne weiteres nicht in ein anderes Objekt überführbar sein. Wäre es ein eigenständiges Objekt, hätte ich vorgeschlagen über die obj.getClass().getDeclaredMethods() zu iterieren und die passende getter Methode auszuführen. Ansonsten wird dir wohl nichts anderes übrig bleiben als mit der HashMap zu arbeiten. Wieso ist das denn so ein Problem bzw. es funktioniert zwar, aber gibt es eine bessere Lösung? -> was wäre denn eine bessere Lösung? und was steht in deinen Params? Das scheint ja auch den Rückgabewert zu bestimmen (ich kenne mich mit dem XmlRpcClient nicht so wirklich aus) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.