Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Ciò che adesso sto cercando di fare è capire come fare a importare dinamicamente package differenti data una stringa.
    Vorrei cercare di arrivare a farti capire che cosa puoi solo ottenere e alla fin fine quindi quale è il senso di tutto questo.

    Supponiamo che riesci a scrivere del codice che:
    - genera "programmaticamente" tramite XJC dei sorgenti Java a partire da un xsd.
    - compila "programmaticamente" quei sorgenti (qui o si lancia javac o si usa la Java Compiler API che se non sbaglio esiste da Java 6).
    - permette il caricamento dei .class generati (questo si fa con un apposito class loader, dovrebbe bastare il "solito" java.net.URLClassLoader che è quello che si usa in questi casi).
    - usa JAXB per effettuare l'unmarshal di un XML (sulla base ovviamente dei class generati). Anche questo mi pare fattibile perché JAXBContext ha dei newInstance che ricevono un ClassLoader (ma non ho mai provato così!).

    Tu dall'unmarshal cosa ottieni? Pensa. Ottieni un java.lang.Object. E su questo Object non ci puoi fare nulla di particolare (a parte invocare i metodi noti di Object).
    Non puoi fare cast es. (TipoGenerato) perché il tuo programma principale è stato compilato prima di generare quelle classi. E pertanto su questi oggetti non puoi invocare metodi specifici.

    Quindi a cosa ti serve?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Tu dall'unmarshal cosa ottieni? Pensa. Ottieni un java.lang.Object. E su questo Object non ci puoi fare nulla di particolare (a parte invocare i metodi noti di Object).
    Una volta che ho l'oggetto java.lang.Object posso richiamare tutti i metodi pubblici implementati in quella classe (nel programma principale).
    Potrei dunque con un altro programma richiamare tale oggetto e da qui invocare tutti i metodi che mi interessano?
    Ad esempio accedere ai vari campi dell'XML?

    Dici che c'è qualcosa che mi sfugge?

    Ho provato a riflettere su questa frase
    Non puoi fare cast es. (TipoGenerato) perché il tuo programma principale è stato compilato prima di generare quelle classi. E pertanto su questi oggetti non puoi invocare metodi specifici.
    Ma non riesco a cogliere il problema.

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Dici che c'è qualcosa che mi sfugge?
    Ehm .. sì.

    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Ho provato a riflettere su questa frase

    Ma non riesco a cogliere il problema.
    Nel tuo sorgente principale, non puoi avere es.:

    TipoMappato oggetto = (TipoMappato) unmarshaller.unmarshal( ..... );

    Anche se supponiamo che tu sappia a priori il nome della classe (lo potresti dedurre dal xsd e sapendo quali sono le convenzioni di XJC).

    Quando compili il tuo programma principale, TipoMappato non esiste ancora poiché viene generato solo in fase di esecuzione del tuo programma.
    Qualunque riferimento "statico" a tipi nel codice sorgente deve essere risolto in fase di compilazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quando compili il tuo programma principale, TipoMappato non esiste ancora poiché viene generato solo in fase di esecuzione del tuo programma.
    Se richiamo TipoMappato vuol dire che il mio chooser ha capito di aver ricevuto un dato xml.
    Per aver ricevuto un dato xml significa che ho già ricevuto un xsd e che ho già dunque creato le classi che mi servono.
    In altre parole l'xml arriva dopo l'xsd pertanto arriva dopo la creazione delle classi che servono per l'unmarshall.
    Nel caso in cui così non fosse (non accadrà) ci sarà l'errore da gestire.

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da playbasfa Visualizza il messaggio
    Se richiamo TipoMappato vuol dire che il mio chooser ha capito di aver ricevuto un dato xml.
    Per aver ricevuto un dato xml significa che ho già ricevuto un xsd e che ho già dunque creato le classi che mi servono.
    In altre parole l'xml arriva dopo l'xsd pertanto arriva dopo la creazione delle classi che servono per l'unmarshall.
    Nel caso in cui così non fosse (non accadrà) ci sarà l'errore da gestire.
    Ripeto ancora (in modo diverso e spero definitivo): se tu vuoi fare un singolo-unico programma che una volta lanciato genera (da xsd) i sorgenti delle classi "mappate" le compila e fa l'unmarshal .... puoi farlo (cioè tecnicamente è possibile giocando bene con class loader e il resto). Ma all'interno di questo tuo stesso programma NON puoi fare riferimento "staticamente" a quelle classi mappate, perché quando compili il tuo programma ..... non esistono ancora!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ok adesso che mi da il problema e ci ho sbattuto la testa ho capito!!!!
    Grazie per il tuo aiuto.
    Appena è capitato ciò che avevi anticipato le tue parole sono state chiare.
    Ho risolto dividendo il programma in due pezzi e facendo partire il secondo pezzo solo dopo che il primo avesse creato le classi.

    Grazie mille per la tua disponibilità!!!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.