Geprüfte Bohne - Der Bean Validation Standard

  • 1,494 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,494
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Synchronität Constraints ↔ Dokumentation\n Komplexität\n\n
  • Java!\n
  • Java!\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Beispiele!\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Demo PersonTest\n
  • gleiches Beispiel verwenden\n
  • gleiches Beispiel verwenden\n
  • gleiches Beispiel verwenden\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • @Constrain Klammer prüfen\n
  • @Constrain Klammer prüfen\n
  • @Constrain Klammer prüfen\n
  • @Constrain Klammer prüfen\n
  • BeanValidator beispiel\n
  • \n
  • \n

Transcript

  • 1. © http://philowendeltreppe.wordpress.com/GEPRÜFTE BOHNE Der Bean Validation Standard Sandro Sonntag 1 Sandro Sonntag © Adorsys GmbH & Co KG
  • 2. AGENDA © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 3. AGENDA• Bedarf und Notwendigkeit © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 4. AGENDA• Bedarf und Notwendigkeit• Existierende Lösungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 5. AGENDA• Bedarf und Notwendigkeit• Existierende Lösungen• Der JSR 303 © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 6. AGENDA• Bedarf und Notwendigkeit• Existierende Lösungen• Der JSR 303• JSR 303 Implementierungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 7. AGENDA• Bedarf und Notwendigkeit • Constraints Deklarieren• Existierende Lösungen• Der JSR 303• JSR 303 Implementierungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 8. AGENDA• Bedarf und Notwendigkeit • Constraints Deklarieren• Existierende Lösungen • Gruppierungen• Der JSR 303• JSR 303 Implementierungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 9. AGENDA• Bedarf und Notwendigkeit • Constraints Deklarieren• Existierende Lösungen • Gruppierungen• Der JSR 303 • Messages• JSR 303 Implementierungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 10. AGENDA• Bedarf und Notwendigkeit • Constraints Deklarieren• Existierende Lösungen • Gruppierungen• Der JSR 303 • Messages• JSR 303 Implementierungen • Eigene Constraints © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 11. AGENDA• Bedarf und Notwendigkeit • Constraints Deklarieren• Existierende Lösungen • Gruppierungen• Der JSR 303 • Messages• JSR 303 Implementierungen • Eigene Constraints • Metadaten lesen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
  • 12. WARUM VALIDIERUNG? © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 3 Sandro Sonntag © Adorsys GmbH & Co KG
  • 13. WARUM VALIDIERUNG?• Validierung • Prüfung von Thesen • Sicherstellung der Datenqualität • Misstrauen des Nutzers • Prävention zur Vermeidung von Fehlern © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 3 Sandro Sonntag © Adorsys GmbH & Co KG
  • 14. WARUM VALIDIERUNG?• Validierung • Prüfung von Thesen • Sicherstellung der Datenqualität • Misstrauen des Nutzers • Prävention zur Vermeidung von Fehlern• Sicherheits-Belange • Constraints © Ernst Rose / PIXELIO • Regeln der Prüfung • NotNull, Min, Max, LengthDer Bean Validation Standard JSR 303 3 Sandro Sonntag © Adorsys GmbH & Co KG
  • 15. Webservice Browser Richclient Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 16. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 17. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 18. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 19. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 20. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 21. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
  • 22. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib RDBM CONSTRAINTS IN TIERS 4
  • 23. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib RDBM CONSTRAINTS IN TIERS 4
  • 24. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM CONSTRAINTS IN TIERS 4
  • 25. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM CONSTRAINTS IN TIERS 4
  • 26. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM DDL CONSTRAINTS IN TIERS 4
  • 27. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM DDL CONSTRAINTS IN TIERS 4
  • 28. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM DDL CONSTRAINTS IN TIERS•Gleiche Prüfungen über alle Schichten•(meist) ein Model 4
  • 29. AKTUELLE LÖSUNGEN Java Server Faces <h:inputText id="firstName" value="#{UserRegistration.user.firstName}"> <f:validateLength minimum="2" maximum="25" /> </h:inputText> public void validateEmail(FacesContext context, UIComponent toValidate, Object value) { String email = (String) value; if (email.indexOf(@) == -1) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("Invalid Email"); context.addMessage(toValidate.getClientId(context), message); } }Der Bean Validation Standard JSR 303 5 Sandro Sonntag © Adorsys GmbH & Co KG
  • 30. POJO & DDL public void check(Address a) { if (a.getStreet() == null || a.getStreet().length() > 60) { throw new ValidationException("Street has not a valid value!"); } }Der Bean Validation Standard JSR 303 6 Sandro Sonntag © Adorsys GmbH & Co KG
  • 31. POJO & DDL public void check(Address a) { if (a.getStreet() == null || a.getStreet().length() > 60) { throw new ValidationException("Street has not a valid value!"); } } create table LOGIN ( id bigint not null auto_increment, login varchar(255) not null, name varchar(255) not null, password varchar(255) not null, primary key (id));Der Bean Validation Standard JSR 303 6 Sandro Sonntag © Adorsys GmbH & Co KG
  • 32. NACHTEILE• Layerspezifische Validierungs Technologien• Code Duplizierung• Inkonsistenz• Verstreuung über den CodeDer Bean Validation Standard JSR 303 7 Sandro Sonntag © Adorsys GmbH & Co KG
  • 33. BESSER WÄHRE DOCH © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 8 Sandro Sonntag © Adorsys GmbH & Co KG
  • 34. BESSER WÄHRE DOCH• Einheitliche Deklaration der Constaints • In einer Sprache • Layer agnostisch © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 8 Sandro Sonntag © Adorsys GmbH & Co KG
  • 35. BESSER WÄHRE DOCH• Einheitliche Deklaration der Constaints • In einer Sprache • Layer agnostisch• Validierung der Constraints • Durch wiederverwendbares API • In allen Schichten verwendbar © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 8 Sandro Sonntag © Adorsys GmbH & Co KG
  • 36. DEKLARATIONDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
  • 37. DEKLARATION• Javadoc → Liest niemandDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
  • 38. DEKLARATION• Javadoc → Liest niemand• XML Konfiguration → zu weit vom CodeDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
  • 39. DEKLARATION• Javadoc → Liest niemand• XML Konfiguration → zu weit vom Code• Taglib → Layer spezifischDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
  • 40. DEKLARATION• Javadoc → Liest niemand• XML Konfiguration → zu weit vom Code• Taglib → Layer spezifisch• @Annotation →Dicht am Code →Java!Der Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
  • 41. FRAMEWORKS HEUTEDer Bean Validation Standard JSR 303 10 Sandro Sonntag © Adorsys GmbH & Co KG
  • 42. FRAMEWORKS HEUTE• Apache Commons Validator• JSF Validator• Xwork• Hibernate Validator• MyFaces ValidationDer Bean Validation Standard JSR 303 10 Sandro Sonntag © Adorsys GmbH & Co KG
  • 43. JSR 303Der Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 44. JSR 303• Standardisieren von Constraints • Annotations • Implementierung eigener ConstraintsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 45. JSR 303• Standardisieren von Constraints • Annotations • Implementierung eigener Constraints• Validierungs API • Layerunabhängig • I18n • Extension PointsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 46. JSR 303• Standardisieren von • Standardisierung der Constraints Metadata API • Annotations • Implementierung eigener Constraints• Validierungs API • Layerunabhängig • I18n • Extension PointsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 47. JSR 303• Standardisieren von • Standardisierung der Constraints Metadata API • Annotations • Integration anderer • Implementierung eigener Frameworks Constraints• Validierungs API • Layerunabhängig • I18n • Extension PointsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 48. JSR 303• Standardisieren von • Standardisierung der Constraints Metadata API • Annotations • Integration anderer • Implementierung eigener Frameworks Constraints • XML Konfiguration• Validierungs API • Layerunabhängig • I18n • Extension PointsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
  • 49. JSR 303Der Bean Validation Standard JSR 303 12 Sandro Sonntag © Adorsys GmbH & Co KG
  • 50. JSR 303• Status • Proposed Final Draft (30 März, 2009) • RI in Glassfish V3Der Bean Validation Standard JSR 303 12 Sandro Sonntag © Adorsys GmbH & Co KG
  • 51. JSR 303• Status • Proposed Final Draft (30 März, 2009) • RI in Glassfish V3• Spec Lead: Emmanuel BernardDer Bean Validation Standard JSR 303 12 Sandro Sonntag © Adorsys GmbH & Co KG
  • 52. JSR 303• Status • Proposed Final Draft (30 März, 2009) • RI in Glassfish V3• Spec Lead: Emmanuel Bernard• Implementierungen • Hibernate Validator (RI) • Agimatec ValidationDer Bean Validation Standard JSR 303 12 Sandro Sonntag © Adorsys GmbH & Co KG
  • 53. AGENDA• Constraints Deklarieren• Gruppierungen• Messages• Eigene Constraints• Metadaten lesenDer Bean Validation Standard JSR 303 13 Sandro Sonntag © Adorsys GmbH & Co KG
  • 54. CONSTRAINTS DEKLARIEREN• Basierend auf Java Annotations • Class, Getter, Setter @NotNull private String firstname; • Kreuzplausibilisierungen• Anpassbarkeit • Gruppen @Valid @NotNull(groups = First.class) private Author author; • Messages • Eigene ParameterDer Bean Validation Standard JSR 303 14 Sandro Sonntag © Adorsys GmbH & Co KG
  • 55. public class Person { @NotEmpty @NotNull private String firstname; @NotEmpty @Size(min=3, max=30, message="The size of lastname must be between {min} and {max}") private String lastname; @NotNull @Valid private Address address; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; }Der Bean Validation Standard JSR 303 } 15 Sandro Sonntag © Adorsys GmbH & Co KG
  • 56. ANNOTATIONSDer Bean Validation Standard JSR 303 16 Sandro Sonntag © Adorsys GmbH & Co KG
  • 57. •Logik •Fachlich •@NotNull •@Email •@NotEmpty •@EAN •@AssertTrue / False •@CreditCard •Wertebereich •Andere •@Min •@Valid •@Max •@Pattern •@Digits •@Size ANNOTATIONSDer Bean Validation Standard JSR 303 16 Sandro Sonntag © Adorsys GmbH & Co KG
  • 58. NÜTZLICHE DINGE• Muilti Constraints • @Patterns({@Pattern(regexp=“???“)})• Vererbung • Superclass • Interface • Additiv• Collections, Maps, ArraysDer Bean Validation Standard JSR 303 17 Sandro Sonntag © Adorsys GmbH & Co KG
  • 59. VALIDATION API Validieren einer Bean Set<InvalidConstraint> errors = addressValidator.validate(address); Eines Properties validator.validateProperty(address, "city") Eines Wertes validator.validateValue(Address.class, "city", "Paris")Der Bean Validation Standard JSR 303 18 Sandro Sonntag © Adorsys GmbH & Co KG
  • 60. VALIDATION API• Validierungsergebnis ConstraintViolationImpl{ rootBean=org.adorsys.demo.validation.validategraph.Person@287811, propertyPath=lastname, message=The size of lastname must be between 3 and 30, leafBean=org.adorsys.demo.validation.validategraph.Person@287811, value=Sa} • Fehlgeschlagene Constraints • Ungültiger Wert • Fehlermeldung (i18n) • Bean InstanzDer Bean Validation Standard JSR 303 19 Sandro Sonntag © Adorsys GmbH & Co KG
  • 61. MESSAGES• ConstraintDer Bean Validation Standard JSR 303 20 Sandro Sonntag © Adorsys GmbH & Co KG
  • 62. MESSAGES• Constraint • Definiert eine Default Message public @interface Max { String message() default "{validator.max}"; ...Der Bean Validation Standard JSR 303 20 Sandro Sonntag © Adorsys GmbH & Co KG
  • 63. MESSAGES• Constraint • Definiert eine Default Message public @interface Max { String message() default "{validator.max}"; ... • Kann überschrieben werden @Size(min=3, max=30, message="The size of lastname must be between {min} and {max}") private String lastname;Der Bean Validation Standard JSR 303 20 Sandro Sonntag © Adorsys GmbH & Co KG
  • 64. MESSAGES• Constraint • Definiert eine Default Message public @interface Max { String message() default "{validator.max}"; ... • Kann überschrieben werden @Size(min=3, max=30, message="The size of lastname must be between {min} and {max}") private String lastname; • Kann programmatisch erstellt werden constraintValidatorContext.disableDefaultError(); constraintValidatorContext.addError("A programmatic error");Der Bean Validation Standard JSR 303 20 Sandro Sonntag © Adorsys GmbH & Co KG
  • 65. MESSAGESDer Bean Validation Standard JSR 303 21 Sandro Sonntag © Adorsys GmbH & Co KG
  • 66. MESSAGES• Parameter Ersetzung • Constraint Parameter nutzbar • Value must be between {min} and {max}Der Bean Validation Standard JSR 303 21 Sandro Sonntag © Adorsys GmbH & Co KG
  • 67. MESSAGES• Parameter Ersetzung • Constraint Parameter nutzbar • Value must be between {min} and {max}• Externalizierbar • I18n Resource Bundle • ValidationMessages.propertiesDer Bean Validation Standard JSR 303 21 Sandro Sonntag © Adorsys GmbH & Co KG
  • 68. MESSAGES• Parameter Ersetzung • Constraint Parameter nutzbar • Value must be between {min} and {max}• Externalizierbar • I18n Resource Bundle • ValidationMessages.properties• MessageInterpolator austauschbarDer Bean Validation Standard JSR 303 21 Sandro Sonntag © Adorsys GmbH & Co KG
  • 69. GRUPPIERUNG VON CONSTRAINTS © staumichel / PIXELIODer Bean Validation Standard JSR 303 22 Sandro Sonntag © Adorsys GmbH & Co KG
  • 70. GRUPPIERUNG VON CONSTRAINTS• Validierung eines Subsets von Constraints • Aktivierung von mehreren Gruppen möglich • Portionsweise Validierung in Prozessen/Wizards © staumichel / PIXELIODer Bean Validation Standard JSR 303 22 Sandro Sonntag © Adorsys GmbH & Co KG
  • 71. GRUPPIERUNG VON CONSTRAINTS• Validierung eines Subsets von Constraints • Aktivierung von mehreren Gruppen möglich • Portionsweise Validierung in Prozessen/Wizards• Implementierung • Group = Interface • Vererbung von Gruppen durch „extends“ • Standard Gruppe = Default © staumichel / PIXELIODer Bean Validation Standard JSR 303 22 Sandro Sonntag © Adorsys GmbH & Co KG
  • 72. GRUPPIERUNG VON CONSTRAINTS• Validierung eines Subsets von Constraints • Aktivierung von mehreren Gruppen möglich • Portionsweise Validierung in Prozessen/Wizards• Implementierung • Group = Interface • Vererbung von Gruppen durch „extends“ • Standard Gruppe = Default © staumichel / PIXELIO• GroupSequences zur Priorisierung möglichDer Bean Validation Standard JSR 303 22 Sandro Sonntag © Adorsys GmbH & Co KG
  • 73. @ValidAddress(groups=Address.AddressCheck.class) @GroupSequence({Address.Basic.class, Address.AddressCheck.class}) public class Address { /** * check the Address only if the default group is valid */ public interface AddressCheck {} public interface Basic {} @NotEmpty(groups=Basic.class) @NotNull(groups=Basic.class) private String address; @NotEmpty(groups=Basic.class) @NotNull(groups=Basic.class) private String zip; @NotEmpty(groups=Basic.class) @NotNull(groups=Basic.class) private String city; public String getAddress() { return address; } ... }Der Bean Validation Standard JSR 303 23 Sandro Sonntag © Adorsys GmbH & Co KG
  • 74. CUSTOM CONSTAINTSDer Bean Validation Standard JSR 303 24 Sandro Sonntag © Adorsys GmbH & Co KG
  • 75. CUSTOM CONSTAINTS @Constraint(validatedBy = NumericValidator.class) @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RUNTIME)• Eine Annotation public @interface Numeric { String message() default "not a numeric value"; Class<?>[] groups() default { }; }Der Bean Validation Standard JSR 303 24 Sandro Sonntag © Adorsys GmbH & Co KG
  • 76. CUSTOM CONSTAINTS @Constraint(validatedBy = NumericValidator.class) @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RUNTIME)• Eine Annotation public @interface Numeric { String message() default "not a numeric value"; Class<?>[] groups() default { }; } public class NumericValidator implements ConstraintValidator<Numeric, String>{ public void initialize(Numeric constraintAnnotation) { }• Ein Validator public boolean isValid(String numeric, ConstraintValidatorContext constraintValidatorContext) { try { Long.valueOf(numeric); } catch (NumberFormatException e) { return false; } return true; } }Der Bean Validation Standard JSR 303 24 Sandro Sonntag © Adorsys GmbH & Co KG
  • 77. CUSTOM CONSTAINTS @Numeric(message="A zip has to be numeric.") @Size(min=5, max=5, message="A zip must has a size of 5 digits.") @Constraint(validatedBy={GermanZipcodeValidator.class}) @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RUNTIME) public @interface GermanZip { Class<?>[] groups() default { }; }Der Bean Validation Standard JSR 303 25 Sandro Sonntag © Adorsys GmbH & Co KG
  • 78. COMPOSITE CONSTRAINTS• Baukasten• Codeduplizierung• Wiederverwendung von primitiven Constraints © RainerSturm / PIXELIO• Bessere Toolunterstützung durch Verwendung von Core ConstaintsDer Bean Validation Standard JSR 303 26 Sandro Sonntag © Adorsys GmbH & Co KG
  • 79. WEITERE FEATURESDer Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
  • 80. WEITERE FEATURES• Parameter OverrideDer Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
  • 81. WEITERE FEATURES• Parameter Override @Size @Constraint(validatedBy = FrenchZipcodeValidator.class) public @interface FrenchZipcode { String message() default "Wrong zipcode"; @OverridesParameter(constraint=Size.class, parameter="message") String sizeMessage() default "{beancheck.zipcode.size}"; }Der Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
  • 82. WEITERE FEATURES• Parameter Override @Size @Constraint(validatedBy = FrenchZipcodeValidator.class) public @interface FrenchZipcode { String message() default "Wrong zipcode"; @OverridesParameter(constraint=Size.class, parameter="message") String sizeMessage() default "{beancheck.zipcode.size}"; }• Ein Constraint mehre Validatoren • @Constraint(validatedBy={SizeValidatorForCollection.class})Der Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
  • 83. WEITERE FEATURES• Parameter Override @Size @Constraint(validatedBy = FrenchZipcodeValidator.class) public @interface FrenchZipcode { String message() default "Wrong zipcode"; @OverridesParameter(constraint=Size.class, parameter="message") String sizeMessage() default "{beancheck.zipcode.size}"; }• Ein Constraint mehre Validatoren • @Constraint(validatedBy={SizeValidatorForCollection.class})• Konfigurative Zuordnung • Trennung von Deklaration und ImplementierungDer Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
  • 84. METADATEN API• Zugiff auf das Constraint Repository• Nützlich für Randtechnologien • Javascript • DDL • XSD/WSDL • Spring• Dokumentation• Tooling• DokumentationswerkzeugeDer Bean Validation Standard JSR 303 28 Sandro Sonntag © Adorsys GmbH & Co KG
  • 85. WEITERE INFORMATIONEN• JSR 303 - JCP.org • http://jcp.org/en/jsr/detail?id=303• Agimatec • http://www.agimatec.de/blog/2008/12/bean-validation-jsr-303-13- standard/• From a World of Constraints to Constrain the World • http://www.jboss.org/file-access/default/members/default/freezone/ presentations/JavaOne2008_JSR303BeanValidation.pdfDer Bean Validation Standard JSR 303 29 Sandro Sonntag © Adorsys GmbH & Co KG
  • 86. VIELEN DANK FRAGEN? Sandro Sonntag 30