2009-10-02 5 views
1

Nous utilisons JAXB pour gérer notre validation wsdl. Dans le wsdl, nous avons une énumération comme ceci:Comment pouvez-vous gérer les types enum invalides en utilisant JAXB?

<xs:simpleType name="myEnum"> 
    <xs:annotation> 
     <xs:documentation>The enums which matter.</xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="MYENUM_1"> 
      <xs:annotation> 
       <xs:documentation>MYENUM_1 is the first enum.</xs:documentation> 
      </xs:annotation> 
     </xs:enumeration> 
     <xs:enumeration value="MYENUM_2"> 
      <xs:annotation> 
       <xs:documentation>MYENUM_2 is the second enum.</xs:documentation> 
      </xs:annotation> 
     </xs:enumeration> 
    </xs:restriction> 
</xs:simpleType> 

Si on passe dans une chaîne non valide comme ENUM par exemple, MYENUM_7, la valeur est définie sur null, au lieu de lancer une erreur comme nous attendre. Creuser dans le code, on trouve les éléments suivants de RuntimeEnumLeafInfoImpl.java:

package com.sun.xml.bind.v2.model.impl; 
//... 
public T parse(CharSequence lexical) throws AccessorException, SAXException { 
    // TODO: error handling 

    B b = baseXducer.parse(lexical); 
    if(b==null) { 

     return null; 
    } 

    return parseMap.get(b); 
} 

Il est clair de constater que la parseMap est notre liste des énumérations, mais si la clé de la carte, dans ce cas, la valeur de b , n'est pas dans la carte, il retourne juste null. Nous aimerions le lancer et l'exception de quelque sorte si b n'est pas dans parseMap.

À moins de régler cela et de recompiler notre propre JAXB, y a-t-il un autre moyen de résoudre ce problème?


EDIT: pour la clarification

Nous utilisons JAXB 2.1.9, et nous voulons unmarshall les données et valider. Il est certainement possible que j'ai oublié quelque chose dans la documentation sur la validation.

Répondre

2

Vous dites que vous utilisez JAXB pour valider des données, mais que vous ne décrivez qu'un résultat inattendu après unmarshalling un document XML. En JAXB, la validation et unmarshalling sont deux différents et peut-être des problèmes indépendants, puisque vous pouvez utiliser JAXB dans au moins trois modes différents:

  • ne valident pas
  • validate, les erreurs de rapport, mais continuent unmarshalling
  • validez et cassez les erreurs

Etes-vous sûr d'avoir activé la validation de schéma sur votre unmarshaller et d'avoir évalué les erreurs potentielles? Comment faire cela est assez différent, selon que vous utilisez JAXB 1.0 ou 2.0, mais la documentation devrait vous dire comment.

+0

Il est expliqué dans JavaDocs pour la classe Unmarshaller dans la section "Validation et bien-former". – jarnbjo

+0

Ajouter le lien: https://jaxb.dev.java.net/nonav/jaxb20-pfd/api/javax/xml/bind/Unmarshaller.html – grieve

Questions connexes