Comment générer des objects Java avec des annotations Bean Validation à partir d’un fichier XSD?

J’écris un EJB en tant que premier service SOAP contractuel et je génère les classes java et le SEI à partir du WSDL. Le WSDL spécifie plusieurs types avec contraintes (longueur maximale, motif, etc.). Les classes java générées sont annotées JAXB mais ne contiennent pas les métadonnées de contraintes car les annotations JAXB ne les prennent pas en charge. Cela signifie que la validation des entrées n’a lieu que lorsque le service est appelé via le sharepoint terminaison SOAP.

Le problème est que lorsque l’EJB est appelé par un autre EJB, la validation est ignorée car il se trouve dans la stack XML. Je souhaite désactiver XML Schemavalidation et utiliser la validation de bean à la place pour que la validation fonctionne dans les deux sens (SOAP et RMI) d’appel de l’EJB.

Question : Comment puis-je générer non seulement des annotations JAXB, mais également des annotations de validation de bean sur les classes Java?

Vous pouvez générer des annotations de validation de bean à partir de xsd à l’aide de ce plugin https://github.com/krasa/krasa-jaxb-tools.

Vous pouvez utiliser les API javax.xml.valdation pour valider un modèle de domaine mappé avec JAXB sur un schéma XML. Un avantage de cette approche est que vous utilisez les mêmes règles de validation (définies dans le schéma XML) pour vos deux cas d’utilisation:

 import java.io.File; import javax.xml.XMLConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.util.JAXBSource; import javax.xml.validation.*; public class Demo { public static void main(Ssortingng[] args) throws Exception { Customer customer = new Customer(); customer.setName("Jane Doe"); customer.getPhoneNumbers().add(new PhoneNumber()); customer.getPhoneNumbers().add(new PhoneNumber()); customer.getPhoneNumbers().add(new PhoneNumber()); JAXBContext jc = JAXBContext.newInstance(Customer.class); JAXBSource source = new JAXBSource(jc, customer); SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = sf.newSchema(new File("customer.xsd")); Validator validator = schema.newValidator(); validator.setErrorHandler(new MyErrorHandler()); validator.validate(source); } } 

Exemple complet

La meilleure réponse que je connaisse jusqu’à présent est d’utiliser le plug-in Annotate pour append des annotations JSR 303.

Vous pouvez utiliser MOXy version 2.6+ en tant que fournisseur JAXB, ce qui se fera automatiquement. MOXy est un module de structure dans le projet EclipseLink.

Pour le moment, la version 2.6.0-M3 de EclipseLink est disponible à l’ adresse : sonatype ou maven .