Visualizzazione dei risultati da 1 a 10 su 16

Hybrid View

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

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

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

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

  5. #5
    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?"

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

  7. #7
    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)); 

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

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.