Zum Inhalt springen

Einzelne Felder aus dem Object auslesen.


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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?

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Geschrieben (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 von vinslave
Geschrieben

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.

Geschrieben

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)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...