Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    45

    [JAXB 2.0] Validazione prima del marshalling

    Salve a tutti,

    potete chiarirmi le idee di come poter validare in jaxb 2.0?

    In pratica vorrei validare un oggetto prima di fare marshalling per creare effettivamente il file .xml in modo da bloccare l'esecuzione e restituire un errore in caso non segua le regole dello schema.

    In jaxb 2.0 non riesco a farlo di solito uso questo:

    Validator validator = context.createValidator();
    validator.validate(oggetto);

    ma adesso in jaxb 2.0 pare essere in disuso.

    Grazie mille a tutti quanti

  2. #2
    Mi associao alla domanda.... qualcuno saprebbe come fare??Grazie

  3. #3
    l'oggetto Validator e il metodo setValidator sono deprecati in JAXB 2.0

    ora la validazione viene fatta durante il marshalling; per abilitarla bisogna utilizzare il metodo setSchema(javax.xml.validation.Schema schema). Di default la validazione è disabilitata

    Se il marshalling lancia un exception allora potrebbe essere un problema di validazione. Per verificare, prima di fare il marshalling bisogna chiamare il metodo setEventHandler(ValidationEventHandler handler) e nel catch dell'eccezione è possibile accedere all'oggetto handler per controllare gli errori di validazione.

  4. #4
    Ciao ho usato quello che tu mi hai detto, ma ottendo questo:


    codice:
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    					
    			
    			SchemaFactory sf = SchemaFactory.newInstance(
    			        javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
    			Schema schema;
    			File file = new File("C:\\file.xsd");
    			schema = sf.newSchema(file);
    			
    			m.setSchema(schema);
    			m.setEventHandler(new myValidationHandler());
    			m.marshal(doc, new FileOutputStream("C:/jaxbOutput.xml"));
    codice:
     
    org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'file:/C:/java/ide/workspace/Speed/src/it/ssi/speed/sccm/configurationManagement/systemConfiguration/icd0/SSWAN.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(XSDHandler.java:2541)
    	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(XSDHandler.java:2528)
    	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(XSDHandler.java:1825)
    	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(XSDHandler.java:531)
    	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(XMLSchemaLoader.java:552)
    	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:519)
    	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:485)
    	at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:210)
    	at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:594)
    	at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:610)
    	at it.ssi.speed.sccm.configurationManagement.systemConfiguration.icd0.sswan.Sswan.generate(Sswan.java:131)
    	at it.ssi.speed.sccm.configurationManagement.systemConfiguration.icd0.sswan.Sswan.main(Sswan.java:192)

  5. #5
    Failed to read schema document 'file:/C:/java/ide/workspace/Speed/src/it/ssi/speed/sccm/configurationManagement/systemConfiguration/icd0/SSWAN.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>

    il problema è alla creazione dell'oggetto schema. dice che è successa una di queste cose:
    1) il file non lo trova
    2) il file non può essere letto
    3) la root non è <xsd:schema>

    cmq, al di là di questo, il metodo marshal lo devi mettere all'interno di un blocco try-catch, e nel catch gestire gli eventi catturati dall'EventHandler (quindi lo devi creare fuori dall'invocazione del metodo setEventHandler altrimenti non puoi usarlo nel catch)

  6. #6
    Io ho creato un EventHandler personalizzato, che mi stampa gli errori che incontra e poi il marshall sta' in un blocco try e' solo che non l'ho riportato nel forum. Il fatto che non riesco a risolvere il problemi che mi restituisce il setSchema!!!

  7. #7
    non ne sono sicuro ma mi pare che l'errore non te lo restituisca il metodo setSchema ma sia proprio un errore durante la creazione dell'oggetto schema

    la cosa che mi risulta strana è:

    codice:
    File file = new File("C:\\file.xsd");
    schema = sf.newSchema(file);
    
    Failed to read schema document 'file:/C:/java/ide/workspace/Speed/src/it/ssi/speed/sccm/configurationManagement/systemConfiguration/icd0/SSWAN.xsd'
    i due path sono completamente diversi o_O

  8. #8
    Si hai ragione scusami, ho omesso tutto il path nel codice che ho postato volontariamente!! L'errore lo restituisce nel giusto path che gli passo! sorry!

  9. #9
    hai controllato i 3 punti che ti ho elencato in qualche post fa?

  10. #10
    Lo sto' facendo adesso, ma ancora non mi e' chiaro il motivo!

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.