IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Valeur par defaut null (JAXB)


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut Valeur par defaut null (JAXB)
    Bonjour,

    j'utilise un xsd pour générer du code java, ensuite je unmarshall un fichier xml.

    petit exemple :
    j'ai un fichier de configuration config.xml qui comporte deux champs int :
    - <param_1>1234</param_1>
    - <param_2></param_2>

    lors du unmarschall, ma classe java sera intialisée avec ceci :
    - param_1 : 1234
    - param_2 : null

    J'ai activé la ValidationEventCollector mais j'ai aucun message ou warning indiquant qu'une variable n'a pas été initialisée

    Je voudrais au choix :
    - avoir un message warning indiquant la non-initialisation
    - interdire les paramètres vides (avec une restriction dans le xsd)

    sachant que je ne peux pas valider avec l'xsd de départ car je travaille sur une carte embarquée et que je n'ai pas beaucoup de ressource.

    savez vous si la validation via l'xsd est gourmande ?

    Merci de votre aide

    Obélix

  2. #2
    Membre éclairé Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Par défaut
    Salut,
    interdire les paramètres vides (avec une restriction dans le xsd)
    tu peux faire un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xs:attribute name="defaultValue" type="xs:string" use="optional" default="xcs"
    tu remplis ton default attribute avec nimporte quoi, ya aussi lattribut fixed que tu peux mettre.

    pour les warnings:
    tu dois faire une implementation de ValidationEventHandler interface, et
    tu la passe a setEventHandler( ) method de Marshaller ou Unmarshaller instance.
    sil ya des probleme la methode handleEvent est appeler, est tu peux interceptet lerreur ds ton code a cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (event.getServerity(  ) == ValidationEvent.WARNING) {
        System.out.println("Warning received. Ignoring it.");
    } else {
        System.out.println("Error or Fatal Error received. Uh Oh.");
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut
    ok merci pour ton aide

    je vais tester cela

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut
    je viens de regarder mon code et j'ai bien activé ValidationEventCollector mais la méthode hasEvent ne m'indique rien lorsqu'une valeur n'est pas initialisée !

    ValidationEventCollector validationEventCollector = new ValidationEventCollector();
    unmarshaller.setEventHandler(validationEventCollector);
    configFileLoaded = unmarshaller.unmarshal(new FileInputStream(pConfigFileToLoad));

    if (validationEventCollector.hasEvents()) {
    String events = "";
    for (ValidationEvent event : validationEventCollector.getEvents()) {
    events = events + "\n" + event;
    }
    logger.error("Error during unmarshalling '" + pConfigFileToLoad + "' : " + events);
    }

    Merci de ton aide

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut
    je reviens sur le sujet car je n'ai pas trouvé une solution correcte.

    J'ai un attribut de type "tAutoStart" dont voici les définitions :

    <xs:element name="auto_start" type="tAutoStart">
    <xs:annotation>
    <xs:documentation>Type de demarrage automatique</xs:documentation>
    </xs:annotation>
    </xs:element>
    <xs:simpleType name="tAutoStart">
    <xs:annotation>
    <xs:documentation>Type de demarrage automatique</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
    <xs:enumeration value="NONE"/>
    <xs:enumeration value="WARM"/>
    <xs:enumeration value="COLD"/>
    <xs:enumeration value="NEWCONF"/>
    </xs:restriction>
    </xs:simpleType>
    si je rentre la valeur "none" et non "NONE", le unmarshall retourne une valeur "null" sans aucun warning alors que j'ai activé ValidationEventCollector

    Si j'active la validation par l'xsd, j'ai bien une erreur mais mon objectif est d'intercepter une erreur ou une warning... sans validation par l'xsd

    Merci de votre aide !

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 101
    Par défaut
    Le problème général est que lors du unmarshall, si la valeur courante ne fait pas parti de l'enum declare dans l'xsd, le champ aura la valeur null par defaut sans même lever une exception ou un warning !

    dommage

Discussions similaires

  1. [2008R2] INSERT valeur non nulle ou valeur par defaut
    Par serge0934 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/02/2013, 16h38
  2. Réponses: 2
    Dernier message: 17/08/2007, 15h51
  3. Comment affecter une valeur par defaut si null?
    Par cassy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/07/2006, 19h13
  4. Sql serveur 2000 Changer null/not null et valeur par defaut
    Par mictif dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/03/2006, 07h55
  5. Valeur par defaut 'True' dans un champ de type bit
    Par Mouse dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/03/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo