Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    Programma Java che crea un altro programma java

    Buon giorno ragazzi!
    Vorrei porvi un quesito:

    Ho un programma java (chiamiamolo PROGRAMMA1) con due package, in uno è contenuta una classe (chiamiamolo FILE1) in un altro il main (chiamiamolo FILE2).
    In uno di questi due file c'è un metodo che come argomento vuole il path di un file, chiamiamolo PATH.

    Io vorrei creare un programma che accetta come input FILE1, FILE2, PATH e che sia in grado di creare il PROGRAMMA1 andando a modificare il path con quello ricevuto.

    Qualcuno ha qualche idea di come si possa fare?

    Spero di essere stato chiaro.
    Ringrazio in anticipo chiunque voglia darmi una dritta.
    Una buona giornata!

  2. #2
    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
    Spero di essere stato chiaro.
    Ehm .. non molto. Vuoi compilare "programmaticamente" dei sorgenti Java?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ok scusami, cerco di essere più chiaro, mi conviene anche forse scendere più nel dettaglio.
    Sto adoperando JAXB, in particolare da terminale il comando
    <code>
    xjc file.xsd
    </code>
    per creare delle classi Java che mi permettano di inizializzare un oggetto che contiene i dati dell'xml relativo all' xsd dato in pasto al terminale.
    Ciò che vorrei fare è creare un programma che ricevendo in input i file .xsd e .xml riesca a generare le classi che generavo con il comando
    <code>
    xjc file.xsd
    </xsd>
    e creare un programma che contenga tali classi e che una volta ricevuto il file xml sia in grado dunque di creare l'oggetto.
    Lo so è un casino...

  4. #4
    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 vorrei fare è creare un programma che ricevendo in input i file .xsd e .xml riesca a generare le classi che generavo con il comando
    codice:
    xjc file.xsd
    e creare un programma che contenga tali classi e che una volta ricevuto il file xml sia in grado dunque di creare l'oggetto.
    Ora è già più chiaro .... ma resta (almeno a me) il dubbio di capire perché hai bisogno di una tale "generalizzazione". Cioè, in genere se si sviluppa una applicazione che richiede mapping tra classi e XML, si deve sapere a priori quali tipi di XML trattare, si generano (o scrivono a mano) a priori i file che "modellano" gli XML, poi si compila il tutto e .... basta.
    Quindi o tu stai cercando di fare un qualche tool molto generico (il cui senso/utilizzo mi sfugge ...) oppure non ha granché senso.
    Ultima modifica di andbin; 14-10-2013 a 15:23
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Perchè per i progetti universitari che mi capitano è scocciante ogni volta dover perdere 3 minuti per importare le classi e cambiare i dati nel main.
    Mi piacerebbe automatizzare il tutto, diciamo che sono un tipo maniacalmente preciso

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Oppure, riduco il campo della domanda:

    "Come faccio per generare le classi a partire dall'XSD direttamente da un programma Java piuttosto che dal terminale?"

  7. #7
    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
    Perchè per i progetti universitari che mi capitano è scocciante ogni volta dover perdere 3 minuti per importare le classi e cambiare i dati nel main.
    Ma fare quello che hai chiesto richiederebbe molto di più che 3 minuti e molto, molto più codice rispetto a cambiare poi solo poche cose nei tuoi progetti!!
    Immagino che nei tuoi progetti tu debba trattare ogni volta XML differenti (come struttura intendo) e allora, tanto, in ogni caso devi generare appositamente dei sorgenti Java dai xsd. E se invece in più progetti hai la stessa tipologia di XML, allora la soluzione è creare un progetto-libreria comune.

    Quello che invece si potrebbe fare (e avrebbe anche più senso) è utilizzare un processo di build con Ant o Maven (con Ant è sicuramente fattibile, con Maven dovrei documentarmi) tale per cui una volta impostato il progetto e il/i file di build, esso vada a (ri)generare se necessario i file .java dai file .xsd durante la fase di build.
    E la problematica sarebbe solamente più "impostare il progetto" e se riesci ad ottenere una struttura che puoi riutilizzare velocemente da un progetto all'altro, ancora meglio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma fare quello che hai chiesto richiederebbe molto di più che 3 minuti e molto, molto più codice rispetto a cambiare poi solo poche cose nei tuoi progetti!!.
    Si questo è vero, ma lo faccio una sola volta e poi andrà bene per sempre.
    Quindi potrebbe convenirmi vista la quantità di volte che faccio quella operazione.
    Mi conviene sicuramente nel momento in cui adopero questa cosa come esercizio.
    Ad ogni modo, ho risolto facendo in questo modo:
    Codice PHP:
    import com.sun.codemodel.*;
    import com.sun.tools.xjc.api.*;
    import org.xml.sax.InputSource;


            
    // Configure sources & output
            
    String schemaPath "path/to/schema.xsd";
            
    String outputDirectory "schema/output/source/";

            
    // Setup schema compiler
            
    SchemaCompiler sc XJC.createSchemaCompiler();
            
    sc.forcePackageName("com.xyz.schema.generated");

            
    // Setup SAX InputSource
            
    File schemaFile = new File(schemaPath);
            
    InputSource is = new InputSource(new FileInputStream(schemaFile));

            
    // Parse & build
            
    sc.parseSchema(is);
            
    S2JJAXBModel model sc.bind();
            
    JCodeModel jCodeModel model.generateCode(nullnull);
            
    jCodeModel.build(new File(outputDirectory)); 

  9. #9
    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
    Ad ogni modo, ho risolto facendo in questo modo:
    Ok, non sapevo (beh, potevo immaginarlo ma non ho mai cercato/guardato...) che c'è una API per usare programmaticamente XJC. Quello che hai postato è comunque solo il "succo" ... ovviamente manca il contorno.

    Ma ad ogni modo l'unica cosa che ottieni è un bel insieme di sorgenti ... che devi poi compilare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ok, non sapevo (beh, potevo immaginarlo ma non ho mai cercato/guardato...) che c'è una API per usare programmaticamente XJC. Quello che hai postato è comunque solo il "succo" ... ovviamente manca il contorno.
    Si questo è solo il succo ovviamente.
    Il modo in cui vorrei procedere è il seguente:

    Ho creato un programma chiamato Universal.
    Nel package main ho inserito il codice che ti ho postato sopra facendo in modo che i file generati abbiano sempre lo stesso nome, quale che sia l'xsd in ingresso, ma che vengano posizionati in package diversi (il package deve avere lo stesso nome dell'xsd).
    A questo punto sto implementando una funzione "chooser" che riceve in ingresso l'XML capisce con quale xsd quell'xml viene validato e a quel punto importa un dato package piuttosto che un altro (il package ha lo stesso nome dell'xsd con cui l'xml viene validato).
    In questo modo penso di poter automatizzare il tutto.

    Ps. poichè tutti i file all'interno dei package si chiamano allo stesso modo potrò fare:

    Class obj = new Class();
    obj.start;

    in maniera univoca, la scelta di adoperare lo start() di una classe piuttosto che di un'altra sarà fatta importando di volta in volta package diversi come spiegato prima.
    Ciò che adesso sto cercando di fare è capire come fare a importare dinamicamente package differenti data una stringa.
    Hai per caso qualche consiglio a riguardo?

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.