Sto utilizzando JAXB XMLadapter per i valori booleani di marshall e unmarshal. Il file XML dell'applicazione sarà accessibile anche dall'applicazione C#. Dobbiamo convalidare questo file XML e questo viene fatto usando XSD. L'applicazione C# scrive il valore "True" per i nodi booleani. Ma lo stesso viene convalidato dal nostro XSD in quanto consente solo "vero/falso" o "1/0". Quindi abbiamo mantenuto String per i valori booleani in XSD e quella stringa sarà convalidata da XMLAdapter per maresciallo e unmarshal dalla nostra parte. L'adattatore XML è la seguente: Il metodo JAXB XMLAdapter non genera Eccezione
public class BooleanAdapter extends XmlAdapter<String, Boolean>
{
@Override
public Boolean unmarshal(String v) throws Exception
{
if(v.equalsIgnoreCase("true") || v.equals("1"))
{
return true;
}
else if(v.equalsIgnoreCase("false") || v.equals("0"))
{
return false;
}
else
{
throw new Exception("Boolean Value from XML File is Wrong.");
}
}
@Override
public String marshal(Boolean v) throws Exception
{
return v.toString();
}
}
Il codice precedente funziona in condizioni normali, ma quando i dati non validi (ad esempio: "ABCD" o "") vengono letti dal file XML poi il "gettare nuova eccezione(); " non viene propagato e il processo Unmarshal passa a leggere il prossimo nodo. Voglio che l'applicazione si fermi non appena viene lanciata un'eccezione. Sembra che la mia eccezione si sta consumando. Qualsiasi aiuto è molto apprezzato.
Come risolvere questo problema?
Grazie @npe: Che ha funzionato ..! :) non sapeva molto di ValidationEventHandler() ma i tuoi riferimenti a JavaDoc hanno aiutato molto. Basta impostare unmarshaller.setEventHandler (new DefaultValidationEventHandler()); ha svolto il lavoro .. Contrassegnare la soluzione come risposta .. Cheers ..! –