{"id":1096,"date":"2013-01-31T09:12:55","date_gmt":"2013-01-31T14:12:55","guid":{"rendered":"http:\/\/alejandroayala.solmedia.ec\/?p=1096"},"modified":"2013-10-23T09:17:09","modified_gmt":"2013-10-23T14:17:09","slug":"bean-validation-y-java-se","status":"publish","type":"post","link":"https:\/\/alejandroayala.solmedia.ec\/?p=1096","title":{"rendered":"Bean Validation y Java SE"},"content":{"rendered":"<p style=\"text-align: justify;\">Para definir lo que es Bean Validation, me remito a la <a href=\"http:\/\/es.wikipedia.org\/wiki\/Bean_Validation\" target=\"_blank\">wikipedia<\/a>:<\/p>\n<blockquote>\n<p style=\"text-align: justify;\">En el contexto de Java Bean Validation (JSR 303) es un framework aprobado en los marcos de JCP al 16 de noviembre de 2009, siendo aceptado como parte de la especificaci\u00f3n Java EE 6. Bean Validation define un modelo de metadatos y una interfaz para la validaci\u00f3n de JavaBeans. La fuente de los metadatos consiste en anotaciones, con la posibilidad de sobreescribir y extender estos metadatos por medio del uso de descriptores de validaci\u00f3n en formato XML[&#8230;].<\/p>\n<\/blockquote>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">Surge la necesidad de implementar una serie de validaciones en una aplicaci\u00f3n <a href=\"http:\/\/docs.oracle.com\/javase\/\" target=\"_blank\">Java SE<\/a>,\u00a0concretamente\u00a0un plugin para una aplicaci\u00f3n base de <a href=\"http:\/\/www.vogella.com\/articles\/EclipseRCP\/article.html\" target=\"_blank\">Eclipse RCP<\/a>, es cuando se me vino a la mente usar <a href=\"http:\/\/docs.oracle.com\/javaee\/6\/tutorial\/doc\/gircz.html\" target=\"_blank\">Bean Validation<\/a> para definir las validaciones si se puede decir,\u00a0<strong>comunes<\/strong>, valores no nulos, m\u00ednimos, m\u00e1ximos, longitudes y las m\u00e1s que necesarias expresiones regulares, <strong><em>Bean Validation<\/em> va a resolver en gran medida esta necesidad<\/strong>. Para luego centrarme en lo que son validaciones espec\u00edficas del negocio.<\/p>\n<p style=\"text-align: justify;\">Las\u00a0librer\u00edas\u00a0que fueron necesarias para integrar <em>Bean Validation<\/em> en mi aplicaci\u00f3n Java SE son:<\/p>\n<ul>\n<li>validation-api-1.0.0.GA<\/li>\n<li>hibernate-validator-4.0.2.GA<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Como ven librer\u00edas del API y del proveedor, en este caso <a href=\"http:\/\/www.hibernate.org\/subprojects\/validator.html\" target=\"_blank\">hibernate<\/a>.<\/p>\n<p style=\"text-align: justify;\">Estas librer\u00edas fueron necesarias porque hibernate escribe mucho log \ud83d\ude42<\/p>\n<ul>\n<li>log4j-1.2.12<\/li>\n<li>slf4j-api-1.4.2<\/li>\n<li>slf4j-simple-1.4.2<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Para este ejemplo se crea una <strong>Java Project<\/strong> desde el asistente de Eclipse.<\/p>\n<p style=\"text-align: justify;\">Y se escribe el pojo, bastante sencillo para el ejemplo, pero como saben, se puede completar y complicar como queramos.<\/p>\n<p>[java]<br \/>\npublic class Cliente {<br \/>\n @NotNull(message=&quot;La info es obligatoria&quot;)<br \/>\n private String tipoIdCliente;<br \/>\n @NotNull(message=&quot;La info es obligatoria&quot;)<br \/>\n @Length(min=10, max=10, message=&quot;El campo no tiene la longitud adecuada&quot;)<br \/>\n private String idCliente;<br \/>\n @NotNull(message=&quot;La info es obligatoria&quot;)<br \/>\n @Email(message=&quot;El email es incorrecto&quot;)<br \/>\n private String email;<\/p>\n<p> \/\/setters and getters<br \/>\n}<br \/>\n[\/java]<\/p>\n<p style=\"text-align: justify;\">Y para probar una clase con un m\u00e9todo main.<\/p>\n<p>[java]<br \/>\npublic static void main(String[] args) {<br \/>\n \/\/creamos nuestro cliente<br \/>\n Cliente c = new Cliente();<br \/>\n \/\/fallamos algunas validaciones<br \/>\n c.setIdCliente(&quot;123456789&quot;);<br \/>\n c.setTipoIdCliente(null);<br \/>\n c.setEmail(&quot;mailinvalido@&quot;);<\/p>\n<p> \/\/creamos el factory para lanzar la validacion<br \/>\n ValidatorFactory factory = Validation.buildDefaultValidatorFactory();<br \/>\n Validator validator = factory.getValidator();<br \/>\n Set&lt;ConstraintViolation&lt;Cliente&gt;&gt; violations = validator.validate(c);<\/p>\n<p> \/\/recorremos y mostramos los mensajes<br \/>\n for(ConstraintViolation&lt;Cliente&gt; cv : violations) {<br \/>\n   System.out.println(cv.getPropertyPath() + &quot; -&gt; &quot; +<br \/>\n   cv.getMessage() + &quot; &quot; + cv.getMessageTemplate());<br \/>\n }<br \/>\n}<br \/>\n[\/java]<\/p>\n<p style=\"text-align: justify;\">Como se puede ver, se necesita un <em><strong>ValidatorFactory<\/strong> <\/em>y un <em><strong>Validator<\/strong><\/em>, al cual le pasamos nuestro objeto a validar al m\u00e9todo <em><strong>validate()<\/strong><\/em>, el cual nos devuelve una lista de <strong><em>ConstraintViolation<\/em><\/strong>, la recorremos y mostramos los mensajes,<em><strong> getPropertyPath<\/strong><\/em> devuelve la propiedad que esta afectada por la validaci\u00f3n y <em><strong>getMessage<\/strong> <\/em>muestra el mensaje que especificamos.<\/p>\n<p style=\"text-align: justify;\">Este es log que se puede ver a la salida:<\/p>\n<p>[shell]<br \/>\n 2 [main] INFO org.hibernate.validator.util.Version &#8211;<br \/>\nHibernate Validator 4.0.2.GA<br \/>\n email -&gt; El email es incorrecto El email es incorrecto<br \/>\n tipoIdCliente -&gt; La info es obligatoria La info es obligatoria<br \/>\n idCliente -&gt; El campo no tiene la longitud adecuada<br \/>\nEl campo no tiene la longitud adecuada<br \/>\n [\/shell]<\/p>\n<p style=\"text-align: justify;\">Bastante sencillo \u00bfverdad?. Hasta aqu\u00ed este post, queda por dem\u00e1s adecuarlo a las necesidades y tendremos mejor estructurada nuestras validaciones con la ayuda de la <strong>excepcional api Bean Validation<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Para descargar el proyecto:\u00a0<a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2013\/01\/BeanValidation.7z\" rel=\"attachment wp-att-1099\">BeanValidation<\/a><br \/>\nEl proyecto esta sin las librer\u00edas, las pueden descargar\u00a0<a href=\"http:\/\/solmedia.ec\/blog\/wp-content\/uploads\/2013\/01\/librerias.7z\" rel=\"attachment wp-att-1102\">aqu\u00ed<\/a>, descomprimirlas y colocarlas dentro del proyecto, luego desde eclipse agregarlas al ambiente.<\/p>\n<p>Referencias y m\u00e1s informaci\u00f3n:<br \/>\n<a href=\"http:\/\/java.dzone.com\/articles\/bean-validation-made-simple\" target=\"_blank\">http:\/\/java.dzone.com\/articles\/bean-validation-made-simple<\/a><\/p>\n<p>.<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=a1ejo_ayala\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Para definir lo que es Bean Validation, me remito a la wikipedia: En el contexto de Java Bean Validation (JSR 303) es un framework aprobado en los marcos de JCP al 16 de noviembre de 2009, siendo aceptado como parte de la especificaci\u00f3n Java EE 6. Bean Validation define un modelo de metadatos y una\u2026 <span class=\"read-more\"><a href=\"https:\/\/alejandroayala.solmedia.ec\/?p=1096\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":690,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[4],"tags":[264,186,265,29,173,266,506,263,267],"_links":{"self":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1096"}],"collection":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1096"}],"version-history":[{"count":15,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1096\/revisions"}],"predecessor-version":[{"id":1473,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1096\/revisions\/1473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/media\/690"}],"wp:attachment":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}