2012-06-05 2 views
2

J'ai un fichier de schéma xsd que je ne peux pas modifier.
Voici un extrait qui fait mon problème:Comment générer une classe avec champ de type Date de xs: élément de chaîne avec JAXB

<xs:element name="Event" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:all> 
      <xs:element name="EventDate" type="xs:string" minOccurs="0"> 
... 

Voici un exemple de données de la chaîne que je reçois pour EventDate:

2012-05-30T12:30:00 CEST 

Je compile avec xjc et je reçois la classe de l'événement avec la chaîne champ.
Existe-t-il un moyen d'obtenir la classe Event avec une sorte de champ Date?
Je suppose que je devrais écrire une sorte d'adaptateur et c'est ok mais je ne sais pas comment dire à xjc de l'utiliser uniquement sur l'élément EventDate.

Répondre

0

Je compile avec:

xjc -b temp.xml schema.xsd 

Cela fait partie de temp.xml:

<jaxb:bindings node="//xs:element[@name='EventDate']"> 
     <jaxb:property> 
      <jaxb:baseType> 
       <javaType name="java.util.Date" 
        parseMethod="com.mydomain.adapters.DateAdapter.parseDate" 
        printMethod="com.mydomain.adapters.DateAdapter.printDate" 
       /> 
      </jaxb:baseType> 
     </jaxb:property> 
    </jaxb:bindings> 

Et est ici partie de la classe com.mydomain.adapters.DateAdapter:

private static final DateFormatter df = new DateFormatter("yyyy-MM-dd'T'HH:mm:ss z"); 
public static Date parseDate(String v) { 
    Date date = null; 
    try { 
     date = df.parse(v, Locale.getDefault()); 
    } catch (ParseException e) { 
     throw new MyException("Could not parse date:" + v); 
    } 
    return date; 
} 

public static String printDate(Date v) { 
    return df.print(v, Locale.getDefault()); 
} 
1

vous pouvez utiliser 'XmlAdapter'. Il prend en charge cette fonctionnalité.

+0

Ok, mais comment dire à xjc de ne l'utiliser que sur xs: string dans Event klass? – Chobicus

+0

Plz modifier votre réponse afin que je puisse annuler mon downvote. Pour une raison quelconque, je ne peux pas annuler vote si la réponse n'est pas éditée. – Chobicus

Questions connexes