|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
[JAVA] leggere un .class in un file .jar: it's possible ?
Ho un programmino aziendale scritto in java composto da vari file .jar ....in uno di questi c'è un file .class, il seguente:
Quote:
...il problema è che oltretutto il .class si trova zippato nello jar e quindi non so se lo posso esportare così!! ![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2002
Città: Provincia de Venessia
Messaggi: 1078
|
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
![]() ![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2002
Città: Roma - Milano - Lagos
Messaggi: 8579
|
uhm beh in soldoni diciamo che un'interfaccia di per se' non fa nulla... i metodi che vedi devi richiamarli da un'istanza di una classe che la implementa...
__________________
--- --- VENDO AppleCare per Macbook Pro 15"/17" a 200E --- --- Ho trattato con mezzo forum, per l'altra meta' mi sto attrezzando... ![]() ![]() Perditempo di professione: signirr |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ps: ma è uno scherzo o stai dicendo sul serio ![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Se nel classpath includi il .jar contenente quell'interfaccia, puoi tranquillamente implementarla...
Cmq sono sicuro che esiste un'altra classe nel .jar che implementa già l'interfaccia da te indicata e i relativi metodi.Per salvare i dati in un file non c'è nessun problema, un qualunque tutorial ti può essere di aiuto...oppure se non hai voglia di leggere chiedi, ma a quel punto bisognerà vedere se avrò io voglia di rispondere ![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2002
Città: Provincia de Venessia
Messaggi: 1078
|
Quote:
![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Re: [JAVA] leggere un .class in un file .jar: it's possible
Quote:
|
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Re: [JAVA] leggere un .class in un file .jar: it's possible
Quote:
![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Hai detto niente hai detto!
![]() Potebbe servire qualche giorno per vedere se è possibile farlo senza passare per il reverse engineering del codice (cineseria che significa tradurre i file class in file sorgente che non sempre da' i risultati sperati). Un quarto di idea potrei anche averla, ma non garantisco nulla, se trovi altri suggerimenti seguili ad occhi chiusi. In ogni caso mi faccio sentire. Ciao. |
![]() |
![]() |
![]() |
#11 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Mi arrendo
Allo stato delle mie conoscenze "nun se po' fa'".
![]() Non è possibile usare la JNI (Java native interface, che permette di chiamare metodi in esecuzione in una jvm da un programma esterno) a meno che la classe che usa quell'interfaccia non assegni i valori restituiti dai metodi che implementa a dei campi accessibili (e questa è una cosa che potremmo sapere solo decompilando il file class che contiene il bytecode dell'oggetto che implementa l'interfaccia e non è detto che si capisca). Non resta che trovare la classe che implementa l'interfaccia, decompilarla, cambiarle il nome e ricompilarla. Poi ne crei un'estensione (una classa "figlia") e le dai lo stesso nome della classe "originale", riscrivi tutti i metodi in modo che richiamino quelli dell'interfaccia nella classe genitore e in più scrivano su un file o sulla consolle i valori che ti interessano. Compili la classe e la sostituisci a quella "originale" presente nel file jar e aggiungi al jar anche la classe originale a cui avevi cambiato il nome. Farlo potrebbe essere più complicato che dirlo. Ciao. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
"se po' fa, se po' fa", dai un occhio a questo progetto OpenSource:
http://www.eclipse.org/aspectj E' un estensione di Java che permette di aggiungere codice su punti di estensione (JoinPoint) che matchano certe condizioni (Esempio: chiamate a metodi, lancio e cattura di eccezzioni, accesso a variabili). Dalla versione 1.1 si puo' applicare anche a classi gia' compilate (ad esempio contenute in file jar) C'e' comunque un po da studiare
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Re: Mi arrendo
Quote:
Una possibile variante a questa soluzione e' che la classe che intercetta i valori implementi l'interfaccia ma non estenda direttamente la classe da intercettare, ma contenga una variabile ad un istanza della classe. I metodi possono quindi implementare una semplice delega all'oggetto contenuto. Perche' fare questo? dato che in java l'ereditarieta' multipla non esiste, questo potrebbe essere un metodo per simularla. (ad esempio potrei estedere 2 classi, una con il tradizionale extend el'altra mantenendo un implementazione di riferimento in una variabile di classe) Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Grande link, non sapevo neanche esistesse, lo stò scaricando per me
![]() Devo dire però che ho provato a leggere la documentazione e mi sembrava di essere un babbuino, avrò capito si e no una parola su 3. Ma sembra calzare a pennello col problema di queso post. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Nella sezione link, sono referenziati un bel po di articoli teorici sull'aspect oriented programming (AOP), veramente meritevoli, dacci un occhio.
Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
grazie a tutti per le dritte ...ma sono sempre al punto di partenza
![]() ...non vedo cmq come questo aop possa risolvere il mio problema dato che mi sembra + che altro che la sua utilità sia quella di fornire metodi e tecniche per decomporre i problemi in un certo numero di componenti funzionali e un certo numero di aspetti.... ( ps: frase presa da un sito.... che non so manco cosa voglia dire ![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
![]() |
![]() |
![]() |
#17 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Brevissimamente, e stando a quello che ho capito perchè so dell'esistenza di AspectJ da 2 post (tra l'altro ho scoperto anche che c'è uno strumento analogo direttamente di IBM), puoi creare una classe separata da quelle che hai già in cui definisci un oggetto che reagisce ai metodi di altre classi senza, e qui sta il bello, avere riferimenti incrociati (che è quello che invece normalmente dovresti avere).
Per farlo dovresti creare una classe java usando quelle particolari estensioni del linguaggio che sono fornite appunto da AspectJ che "catturano" i metodi (ma non solo) di altri oggetti "viventi" (cioè durante l'esecuzione), compilarla con ajc.exe (un compilatore java esteso fornito con AspectJ) e...beh, in qualche modo la cosa poi funziona, solo che sono a metà della documentazione ![]() Comunque è esattamente quello che cercavi, di queso ne sono sicuro, ed è molto meglio della ricompilazione delle classe che hai già. Erano almeno 7 mesi che non vedevo più una cosa veramente interessante su Java, theClimber mi ha acceso una lampadina grossa come il sole ![]() |
![]() |
![]() |
![]() |
#18 |
Bannato
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
|
Certo che la documentazione è fatta proprio col
![]() ![]() |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
|
Quote:
![]()
__________________
---------------------------------------------- File reality.sys corrupted, Reboot Universe? Y/N ---------------------------------------------- |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
![]() Consiglio di trovare degli esempi tra la documentazione fornita e partire da quelli. Tra gli articoli citati sul sito, questo sembra abbanstanza buono come punto di partenza: http://www-106.ibm.com/developerworks/java/library/j-aspectj/index.html?dwzone=java se proptio con Aspect J non se fa, ci sono anche i seguenti AOP: HyperJ: http://www.research.ibm.com/hyperspace/index.htm DemeterJ: http://www.ccs.neu.edu/research/demeter/DemeterJava/ JBoss: Jboss4 implementa una sua versione AOP dichiarativa in XML Purtroppo non penso che i primi 2 possono applicarsi a Jar gia' compilati, mentre JBoss si applica a runtime, ma dentro l'Application Server (Si aggiungerebbero i problemi di installazione e configurazione del server) enjoy
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:46.