Zum Inhalt springen

Deserialisieren von nicht bekannten Objekten


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe folgende Situation:

Wenn ich ein Java-Programm schreibe, kann ich Klassen als Objekte serialisieren und deserialisieren. Alles soweit in Ordnung. Bislang war aber immer in dem Java-Programm eine Klasse des serialisierten Objekt vorhanden, sodass ich wusste welche Methoden dieses Objekt hat.

Bsp: Klasse Kontakt war im Java-Projekt vorhanden, ich wusste das Objekt hat nach dem deserialisieren die methode "getAlter" oder so.

Meine Frage:

Kann ich ein unbekanntes Objekt deserialisieren (also dessen klasse ich auch nicht kenne) und abfragen welche Methoden mir zur verfügung stehen?

Danke schonmal für die Antworten.

Gruss

hexa

Geschrieben

Das ist jetzt eine Vermutung (spannende Frage übrigens), aber ich denke, es wird schief gehen. Beim Deserialisieren wird der Bytestrom des serialisierten Objekts gelesen und interpretiert. Interpretieren heißt in diesem Fall, der Classloader lädt die Klasse. Da er zur Klasse aber leider keine entsprechende Bytecodedatei hat, kann er sie in meinen Augen nicht laden.

Unter J2EE ist es möglich (JBoss, ich weiß nicht, ob das in der Spezifikation geregelt ist), dass ein Client die Klassen, die er gerade aus dem Application Server laden und verwenden will, nicht schon beim Start der VM zur Verfügung haben muss, sondern diese bei Bedarf nachzieht. Hier kann ich es mir so vorstellen, dass das geht, wenn ein eigener Classloader verwendet wird.

Probier doch den von Dir gewünschten Fall einfach mal aus und sag Bescheid, ob das geht, es würde mich interessieren.

Peter

Geschrieben

Das geht via Introspection / Reflection. Auch wenn die Klasse des zu deserialisierten Objektes nicht im Code bekannt sein muss, muss diese zumindest im Classpath liegen, sonst gibts eine ClassNotFoundException beim deserialisieren.

package de.tutorials;


import java.beans.BeanInfo;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInput;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.lang.reflect.Method;


public class ObjectSerializationExample {

    public static void main(String[] args) throws Exception{

        Person p = new Person("Tom");


        String path = "/tmp/tom.ser";


        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));

        oos.writeObject(p);

        oos.close();


        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));

        Object o = ois.readObject();

        ois.close();


        System.out.println(o);

        System.out.println(o.getClass());

        //BeanInfo Introspection

        BeanInfo beanInfo = Introspector.getBeanInfo(o.getClass());

        for(PropertyDescriptor pd : beanInfo.getPropertyDescriptors()){

            System.out.println( pd.getName() + ": " +  pd.getReadMethod().invoke(o));

        }


        //Händische Reflection

        for(Method method : o.getClass().getDeclaredMethods()){

            System.out.println(method);

        }


    }

}
package de.tutorials;


import java.io.Serializable;


public class Person implements Serializable {

    String name;


    public Person() {

    }


    public Person(String name) {

        this.name = name;

    }


    public String getName() {

        return name;

    }


    public void setName(String name) {

        this.name = name;

    }


}

Wie gesagt, bei dieser methode muss ich eine.class datei besitzen...

Quelle: Deserialisieren von nicht bekannten Objekten - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...