2015-09-04 2 views
4

MOXy BeanValidation me permet d'ajouter une validation à mes classes JAXB.Génération de restrictions XSD dans un schéma généré à partir de classes Java JAXB annotées

aide "Plugin Bean Validation" de Moxy je peux avoir Bean Validation dans les classes générées JAXB basées sur restrictions/facets d'un prexisting schéma.

est Cependant, il y a une façon de générer un schéma avec restrictions/facets basé sur Bean Validation des annotations d'une classe java annotée JAXB? XJC dispose d'une architecture de plugin très pratique lors de la génération d'un schéma en Java, mais existe-t-il un moyen équivalent java d'améliorer le XSD généré avec des restrictions supplémentaires, ou même d'ajouter des commentaires XML? Soit en MOXy ou JAXB-RI?

MOXy est extrêmement flexible avec les correspondances du milieu, peut-il être utilisé lors de la génération du schéma?

Le jaxb-facets project semble faire ce que je veux, mais le réalisateur a dû débourser un tout nouveau JAXB-RI pour l'obtenir et il semble que ce ne sera pas adopté dans un proche avenir. (See this Java JIRA)


J'ai essayé la résolution spécifiée par @ m0mus mais j'ai dû utiliser les versions 2.7.0-SNAPSHOT du référentiel de sonatype. J'avais encore quelques problèmes; 1. J'ai dû annoter les champs Java avec @XmlElement pour que les facettes apparaissent dans le xsd. @XmlAttribute, @XmlAccessorType (XmlAccessType.FIELD) n'a fait aucune différence. @Pattern n'a pas fonctionné; J'ai dû travailler avec un seul motif dans Pattern.List;

@XmlElement 
@Pattern.List(value = { @Pattern(regexp="[0-9]*") }) 
public String phoneNumber2; 

Pour plus d'informations voir le EclipseLink Forum

+0

Actuellement, @XmlAttribute et @XmlAccessorType (XmlAccessType.FIELD) ne sont pas pris en charge. – Dmitry

Répondre

2

Je pense qu'il est là. MOXy utilise sa propre implémentation SchemaGen pour le processus de génération de fichiers XSD à partir de classes Java. SchemaGen a été étendu pour générer automatiquement des restrictions et des facettes XSD basées sur les annotations BV trouvées dans les classes Java. Étant donné que le processus de génération de schéma a lieu lors de la création de JAXBContext, la fonction de mise en valeur de BV peut être activé/désactivé en définissant la propriété suivante (dans JAXBContextProperties) sur JAXBContext:

/** 
* Property for disabling/enabling generation of XML Facets during schemagen. 
* The mapped value must be of type Boolean. 
* If it's true, then facets will be generated, based on the BV annotations. 
* If false, the BV annotations processing will be skipped during schemagen 
* and no facets will be generated. 
* 
* @since 2.6 
*/ 
public static final String GENERATE_FACETS = "eclipselink.generate.facets"; 

SchemaGen reconnaît les annotations fournies par l'API BV , y compris @ Pattern.List. Si SchemaGen rencontre un champ annoté à la fois avec @NotNull et @XmlElement (nillable = true), il lèvera BeanValidationException.notNullAndNillable().

Exemple:

Map props = new HashMap(); 
props.put("eclipselink.beanvalidation.facets", true); 
JAXBContext jc = JAXBContext.newInstance(classes, properties); 
SchemaOutputResolver sor = new MSOR(); 
jc.generateSchema(sor); 
+0

voir les commentaires en question ci-dessous la règle horiziontal; – JFK

3

a déposé une demande de mise en valeur pour traiter @XMLAttribute champs: Bugs Page

La raison pour laquelle vous devez utiliser v2.7 est que dans certains arbres d'appel inhabituels pour la génération de schéma, l'activation La valeur de la propriété facets n'est pas propagée dans l'arbre d'appel. C'était fixed le 5 mai. Demandé backport à EL v2.6 now.