Geprüfte Bohne - Der Bean Validation Standard

1,684
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,684
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

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
  • Geprüfte Bohne - Der Bean Validation Standard

    1. 1. © http://philowendeltreppe.wordpress.com/GEPRÜFTE BOHNE Der Bean Validation Standard Sandro Sonntag 1 Sandro Sonntag © Adorsys GmbH & Co KG
    2. 2. AGENDA © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
    3. 3. AGENDA• Bedarf und Notwendigkeit © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
    4. 4. AGENDA• Bedarf und Notwendigkeit• Existierende Lösungen © delater / PIXELIODer Bean Validation Standard JSR 303 2 Sandro Sonntag © Adorsys GmbH & Co KG
    5. 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. 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. 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. 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. 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. 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. 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. 12. WARUM VALIDIERUNG? © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 3 Sandro Sonntag © Adorsys GmbH & Co KG
    13. 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. 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. 15. Webservice Browser Richclient Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    16. 16. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    17. 17. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    18. 18. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    19. 19. Webservice Browser Richclient Java Java Application Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    20. 20. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    21. 21. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO RDBM CONSTRAINTS IN TIERS 4
    22. 22. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib RDBM CONSTRAINTS IN TIERS 4
    23. 23. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib RDBM CONSTRAINTS IN TIERS 4
    24. 24. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM CONSTRAINTS IN TIERS 4
    25. 25. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM CONSTRAINTS IN TIERS 4
    26. 26. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM DDL CONSTRAINTS IN TIERS 4
    27. 27. Webservice Browser Richclient Java Java Application JavaScript Präsentation Business DAO Taglib WSDL RDBM DDL CONSTRAINTS IN TIERS 4
    28. 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. 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. 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. 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. 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. 33. BESSER WÄHRE DOCH © Ernst Rose / PIXELIODer Bean Validation Standard JSR 303 8 Sandro Sonntag © Adorsys GmbH & Co KG
    34. 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. 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. 36. DEKLARATIONDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
    37. 37. DEKLARATION• Javadoc → Liest niemandDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
    38. 38. DEKLARATION• Javadoc → Liest niemand• XML Konfiguration → zu weit vom CodeDer Bean Validation Standard JSR 303 9 Sandro Sonntag © Adorsys GmbH & Co KG
    39. 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. 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. 41. FRAMEWORKS HEUTEDer Bean Validation Standard JSR 303 10 Sandro Sonntag © Adorsys GmbH & Co KG
    42. 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. 43. JSR 303Der Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
    44. 44. JSR 303• Standardisieren von Constraints • Annotations • Implementierung eigener ConstraintsDer Bean Validation Standard JSR 303 11 Sandro Sonntag © Adorsys GmbH & Co KG
    45. 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. 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. 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. 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. 49. JSR 303Der Bean Validation Standard JSR 303 12 Sandro Sonntag © Adorsys GmbH & Co KG
    50. 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. 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. 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. 53. AGENDA• Constraints Deklarieren• Gruppierungen• Messages• Eigene Constraints• Metadaten lesenDer Bean Validation Standard JSR 303 13 Sandro Sonntag © Adorsys GmbH & Co KG
    54. 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. 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. 56. ANNOTATIONSDer Bean Validation Standard JSR 303 16 Sandro Sonntag © Adorsys GmbH & Co KG
    57. 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. 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. 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. 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. 61. MESSAGES• ConstraintDer Bean Validation Standard JSR 303 20 Sandro Sonntag © Adorsys GmbH & Co KG
    62. 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. 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. 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. 65. MESSAGESDer Bean Validation Standard JSR 303 21 Sandro Sonntag © Adorsys GmbH & Co KG
    66. 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. 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. 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. 69. GRUPPIERUNG VON CONSTRAINTS © staumichel / PIXELIODer Bean Validation Standard JSR 303 22 Sandro Sonntag © Adorsys GmbH & Co KG
    70. 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. 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. 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. 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. 74. CUSTOM CONSTAINTSDer Bean Validation Standard JSR 303 24 Sandro Sonntag © Adorsys GmbH & Co KG
    75. 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. 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. 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. 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. 79. WEITERE FEATURESDer Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
    80. 80. WEITERE FEATURES• Parameter OverrideDer Bean Validation Standard JSR 303 27 Sandro Sonntag © Adorsys GmbH & Co KG
    81. 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. 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. 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. 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. 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. 86. VIELEN DANK FRAGEN? Sandro Sonntag 30

    ×