Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

  • Autor

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?

  • Autor

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.

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.

  • Autor

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

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.

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)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.