2013-08-12 7 views
6

Ho un file binario che contiene oggetti serializzati Java (che sono oggetti valore), ma non ho accesso alla classe che è stata serializzata per creare quelli oggetti. Senza il file di classe, JVM non mi consente di leggere gli oggetti con objectInputStreamInstance.readObject() e giustamente getta java.lang.ClassNotFoundException.Come recuperare lo stato dell'oggetto da oggetti Java serializzati senza file di classe

Esiste una libreria che può aiutare a estrarre i dati in XML o in altro formato standard? Ad esempio, se la classe Person sotto è serializzato e memorizzato in un file, vorrei estrarre i dati da esso:

Classe Definizione

class Person implements Serializable { 
    int age; 
    String name; 
    public Person(int age, int name) { 
    this.age = age; 
    this.name = name; 
    } 
} 

Richiesto Estrazione Format (senza accesso alla classe File)

<Person> 
    <age>10</age> 
    <name>Name</name> 
</Person> 

inoltre ho controllato il seguente, ma non ha ottenuto quello che cercavo:

  1. Xstream (http://x-stream.github.io/) richiede l'accesso a un oggetto Java per creare XML da tale oggetto. Tuttavia, non riesco a creare oggetti per la mancanza di file di classe.
  2. Serialysis sembra essere molto vecchio https://weblogs.java.net/blog/emcmanus/archive/2007/06/disassembling_s.html

Grazie per il vostro aiuto.

saluti, Gursev

+0

Alcune buone idee qui, sembra che la maggior parte delle risposte non richiedono il file di classe: http://stackoverflow.com/questions/181448/gui-tool-to-browse-java-serialized-objects – lreeder

+0

@Ireeder Grazie per la tua risposta. Ho rivisto questo link prima di porre questa domanda e indica un prodotto/software e non una libreria che sto cercando. –

risposta

5

Controllare jdeserialize. Ha una modalità a riga di comando, ma anche a reasonably well documented API. Riguardo alla ricanalizzazione automatica in XML? Io non la penso così Ci sono troppi modi per farlo. Probabilmente dovrai passare a questo come 2 passaggi separati. jdeserialize può essere utile nel decodificare le classi (producendo codice sorgente java), specialmente quando questo è richiesto da molti strumenti di serializzazione XML.

Ora, se le classi originali non hanno utilizzato il meccanismo di default di serializzazione (sovrascrivendo readObject o simili) o anche i dati di utilizzo di offuscamento tecniche/di crittografia (come avvolgere oggetti in javax.crypto.SealedObject e/o java.security.SignedObject), quindi le possibilità di successo sono sempre meno.

+1

AFAIK, l'oggetto serializzato contiene dettagli sui nomi dei campi, i tipi di campo e altre informazioni. Fonti: 1. http://www.javaworld.com/community/node/2915 2. http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html –

+0

@GursevKalra Grazie mille. Ho cambiato completamente la mia risposta. Le mie precedenti esperienze con oggetti serializzati di terze parti sono state estremamente negative. Al punto che avevo dimenticato quanto fosse trasparente il meccanismo predefinito. –

+0

grazie per l'aggiornamento. jdeserialize sembra promettente. Terrò la domanda aperta per ora per vedere se ci sono ulteriori possibilità/gemme. –

Problemi correlati