1 00:00:00,000 --> 00:00:20,199 Vale, venga, pues entonces, ¿dónde están los nodos, los subnodos de los cuales queremos alterar el orden? Están dentro de receta. Pues vámonos a la clase receta. Vámonos a la clase receta y en la clase receta vamos a poner esta anotación. 2 00:00:20,199 --> 00:00:23,839 Uy, esto no quería yo 3 00:00:23,839 --> 00:00:26,359 Vamos a poner esta anotación 4 00:00:26,359 --> 00:00:27,539 XML 5 00:00:27,539 --> 00:00:32,320 Esto nunca me acuerdo 6 00:00:32,320 --> 00:00:34,600 Porque estoy casi segura que no es así 7 00:00:34,600 --> 00:00:38,670 Yo digo que sí 8 00:00:38,670 --> 00:00:41,210 No, no 9 00:00:41,210 --> 00:00:42,590 XML 10 00:00:42,590 --> 00:00:45,850 Era X 11 00:00:45,850 --> 00:00:47,409 Ah, vale 12 00:00:47,409 --> 00:00:49,329 Y orden era la propiedad 13 00:00:49,329 --> 00:00:51,810 Vale, a ver, vamos a hacer un esfuerzo de memoria 14 00:00:51,810 --> 00:00:56,039 import, bien, muy bien 15 00:00:56,039 --> 00:00:58,619 vale, esta es la anotación 16 00:00:58,619 --> 00:01:00,240 y ahora esta anotación 17 00:01:00,240 --> 00:01:01,880 tiene una propiedad 18 00:01:01,880 --> 00:01:04,480 que creo que es 19 00:01:04,480 --> 00:01:05,000 esta 20 00:01:05,000 --> 00:01:09,739 orden de las propiedades 21 00:01:09,739 --> 00:01:12,159 vale, y aquí ya ponemos 22 00:01:12,159 --> 00:01:14,379 el orden que queremos 23 00:01:14,379 --> 00:01:15,959 entonces, ¿qué queremos que aparezca primero? 24 00:01:16,959 --> 00:01:17,680 esto se pone 25 00:01:17,680 --> 00:01:20,200 entre llaves 26 00:01:20,200 --> 00:01:27,840 No, no, no, porque son los subnodos 27 00:01:27,840 --> 00:01:29,719 Solo, aquí no hay árbol, son los subnodos 28 00:01:29,719 --> 00:01:31,459 Luego si quieres cambiar el orden 29 00:01:31,459 --> 00:01:33,680 A los subnodos a su vez 30 00:01:33,680 --> 00:01:35,760 De otro subnodo, te vas a la clase de ese 31 00:01:35,760 --> 00:01:36,799 ¿Vale? 32 00:01:37,379 --> 00:01:39,180 Vale, entonces queremos primero nombre 33 00:01:39,180 --> 00:01:41,379 Luego hemos dicho que queremos ver si es 34 00:01:41,379 --> 00:01:44,260 Vegetariana 35 00:01:44,260 --> 00:01:47,579 Luego queremos 36 00:01:47,579 --> 00:01:50,700 hija mía 37 00:01:50,700 --> 00:01:52,459 son nueve letras o diez 38 00:01:52,459 --> 00:01:53,700 por favor 39 00:01:53,700 --> 00:01:55,500 vegetariana 40 00:01:55,500 --> 00:01:58,640 luego queremos 41 00:01:58,640 --> 00:02:00,659 la dificultad en el tributo 42 00:02:00,659 --> 00:02:02,900 luego queremos los ingredientes 43 00:02:03,819 --> 00:02:08,460 en las variables 44 00:02:08,460 --> 00:02:09,960 no en el nombre del nodo 45 00:02:09,960 --> 00:02:12,819 porque se podrían llamar 46 00:02:12,819 --> 00:02:13,379 distinto 47 00:02:13,379 --> 00:02:15,400 si el string no se llama nombre 48 00:02:15,400 --> 00:02:16,039 se llama nom 49 00:02:16,039 --> 00:02:19,479 el nombre de la propiedad 50 00:02:19,479 --> 00:02:20,979 si eso es algo que por alguna razón 51 00:02:20,979 --> 00:02:23,419 tengo un bloqueo y siempre viene la duda 52 00:02:23,419 --> 00:02:25,060 pero esta vez 53 00:02:25,060 --> 00:02:27,020 creo que ya ni siquiera vamos a tener que resolver 54 00:02:27,020 --> 00:02:29,000 que es el nombre de la propiedad, pero lo vamos a comprobar 55 00:02:29,000 --> 00:02:30,080 ahora mismo en cuanto lo generemos 56 00:02:30,080 --> 00:02:35,080 bueno, claro 57 00:02:35,080 --> 00:02:36,599 si la propiedad se llama name, pues name 58 00:02:36,599 --> 00:02:38,520 aquí 59 00:02:38,520 --> 00:02:43,180 tiene que ser el nombre de la propiedad 60 00:02:43,180 --> 00:02:45,219 aunque luego en el nodo 61 00:02:45,219 --> 00:02:47,620 reciba otro nombre porque tú con xml 62 00:02:47,620 --> 00:02:48,960 name lo has cambiado 63 00:02:48,960 --> 00:02:51,300 vale, si tú con el name lo has cambiado 64 00:02:51,300 --> 00:02:53,460 da igual, pero aquí el nombre de la propiedad 65 00:02:53,460 --> 00:02:55,780 claro, no hay confusión 66 00:02:55,780 --> 00:02:56,520 no hay ambigüedad 67 00:02:56,520 --> 00:02:58,900 y después de ingredientes habíamos puesto 68 00:02:58,900 --> 00:03:01,400 infonutricional, y si os he dicho algo malo 69 00:03:01,400 --> 00:03:02,860 o me he equivocado, va a salir ahora 70 00:03:02,860 --> 00:03:05,180 nos has engañado 71 00:03:05,180 --> 00:03:07,460 puede ser, pero es que 72 00:03:07,460 --> 00:03:09,340 yo prefiero hacerlo así 73 00:03:09,340 --> 00:03:11,159 a mirar las chuletas, porque 74 00:03:11,159 --> 00:03:13,439 las mismas dudas que pueden surgir a mi 75 00:03:13,439 --> 00:03:14,500 lo mismo son los que puedo cometer, 76 00:03:14,900 --> 00:03:16,099 pues son los que os pueden surgir a otros 77 00:03:16,099 --> 00:03:17,259 cuando estáis trabajando. 78 00:03:18,680 --> 00:03:19,259 De verdad. 79 00:03:20,120 --> 00:03:22,159 Que sí, que voy, que voy, que estaba en ello. 80 00:03:22,979 --> 00:03:24,360 Ay, de verdad. 81 00:03:25,400 --> 00:03:26,219 ¿Y la dificultad? 82 00:03:26,560 --> 00:03:28,180 La dificultad es que es un atributo. 83 00:03:28,659 --> 00:03:29,020 ¿Vale? 84 00:03:29,319 --> 00:03:33,699 Entonces, vale, ahora vamos a volver a ejecutar el main 85 00:03:33,699 --> 00:03:35,780 a ver si me ha cambiado o me da un error 86 00:03:35,780 --> 00:03:37,819 porque aquí os he dicho que va el nombre de la propiedad 87 00:03:37,819 --> 00:03:38,699 cuando va el del elemento. 88 00:03:40,080 --> 00:03:40,819 Vamos a ver. 89 00:03:42,159 --> 00:03:42,620 ¿Da error? 90 00:03:43,439 --> 00:04:09,250 ¿Qué os habré dicho mal? A mí no me da error. A ver, vámonos a recetario. Replace. Receta, nombre, vegetariana, ingredientes e infonutricional. Magnífico. Pues todas las anotaciones que necesitamos, prácticamente todas, las tenemos. 91 00:04:09,250 --> 00:04:28,350 Entonces, hay una que es básica también que no hemos incorporado aquí. Nosotros hemos dicho que nosotros, esta la idea de JaxB es que tú tengas tu modelo de datos con tus clases que sirven para mil cosas y luego además las anotes para el XML. 92 00:04:28,350 --> 00:04:45,850 Pero claro, a lo mejor el XML no necesita todos los datos. Entonces, ¿tiene que ir al XML todos los datos? Pues no, por ejemplo, imaginémonos que el XML le da igual la info nutricional. 93 00:04:45,850 --> 00:04:49,430 es una información interesante para el resto de la aplicación 94 00:04:49,430 --> 00:04:50,790 para la parte de la base de datos 95 00:04:50,790 --> 00:04:53,029 pero el xml eso no lo queremos 96 00:04:53,029 --> 00:04:55,329 registrar, porque el xml 97 00:04:55,329 --> 00:04:56,410 vale para otras cosas 98 00:04:56,410 --> 00:04:58,589 que no necesitan infonutricional 99 00:04:58,589 --> 00:05:00,589 tal y como lo hemos visto 100 00:05:00,589 --> 00:05:01,769 es que va a ir todo ahí 101 00:05:01,769 --> 00:05:05,050 pues si un atributo 102 00:05:05,050 --> 00:05:07,089 queremos que JaxB lo ignore 103 00:05:07,089 --> 00:05:09,189 lo hacemos transitorio 104 00:05:09,189 --> 00:05:10,829 que se llama, entonces en este caso 105 00:05:10,829 --> 00:05:13,209 por ejemplo, si quisiéramos hacer transitorio 106 00:05:13,209 --> 00:05:15,310 la infonutricional que está en receta 107 00:05:15,310 --> 00:05:17,730 Pues la info nutricional 108 00:05:17,730 --> 00:05:18,829 La anotamos 109 00:05:18,829 --> 00:05:20,470 En su get que está aquí 110 00:05:20,470 --> 00:05:23,949 La anotamos con 111 00:05:23,949 --> 00:05:25,269 Transient 112 00:05:25,269 --> 00:05:36,670 La anotamos con transitorio 113 00:05:36,670 --> 00:05:38,509 Porque si no le pusiéramos nada 114 00:05:38,509 --> 00:05:40,389 Recordad que si yo no le pongo nada 115 00:05:40,389 --> 00:05:43,649 Por defecto es como tener un xml element 116 00:05:43,649 --> 00:05:45,170 Por defecto si no le ponemos nada 117 00:05:45,170 --> 00:05:47,769 Entonces se iría al xml 118 00:05:47,769 --> 00:05:48,329 Se iría 119 00:05:48,329 --> 00:05:50,889 Entonces si no quiero que vaya al xml 120 00:05:50,889 --> 00:05:52,170 Es decir que sea ignorada 121 00:05:52,170 --> 00:05:54,329 Que para ellas sea como si esta 122 00:05:54,329 --> 00:05:57,370 anotación no existiera y la ignorara 123 00:05:57,370 --> 00:05:58,910 pues tengo que ponerle el transi en este 124 00:05:58,910 --> 00:06:01,230 y ya está, entonces si volvemos a hacer 125 00:06:01,230 --> 00:06:03,009 el main con esto de aquí 126 00:06:03,009 --> 00:06:04,189 tienes que cambiar 127 00:06:04,189 --> 00:06:05,870 ¿qué tengo que cambiar? 128 00:06:06,970 --> 00:06:09,490 ah, perdón, porque se me ha dado un error, efectivamente 129 00:06:09,490 --> 00:06:10,910 efectivamente 130 00:06:10,910 --> 00:06:13,350 claro, que la ignore 131 00:06:13,350 --> 00:06:14,790 que no la ponga en el xml 132 00:06:14,790 --> 00:06:19,029 bueno, pues porque 133 00:06:19,029 --> 00:06:21,170 estas clases de aquí podrían formar parte 134 00:06:21,170 --> 00:06:23,110 de tu aplicación, de tu modelo de datos 135 00:06:23,110 --> 00:06:24,209 que hace un montón de cosas 136 00:06:24,209 --> 00:06:38,649 Y una de las funcionalidades puede ser, y además guárdame un XML, pero puede ser que no te interese todo. O sea, Info Nutricional igual afecta a otras partes de la aplicación. Pero en la parte del XML no, porque el XML es para Pepito, que la Info Nutricional le da lo mismo. ¿Vale? 137 00:06:38,649 --> 00:06:41,430 Entonces 138 00:06:41,430 --> 00:06:42,790 Efectivamente 139 00:06:42,790 --> 00:06:44,629 Bien apuntado 140 00:06:44,629 --> 00:06:47,430 Por Medina 141 00:06:47,430 --> 00:06:50,110 Si yo he quitado 142 00:06:50,110 --> 00:06:51,550 Le digo a Jax B que la ignore 143 00:06:51,550 --> 00:06:53,490 La tengo que quitar de aquí 144 00:06:53,490 --> 00:06:55,949 Porque si no Jax B me va a decir 145 00:06:55,949 --> 00:06:57,410 Uy, y esta 146 00:06:57,410 --> 00:07:00,449 Como que la coloque, pero si esa me has dicho que pase de ella 147 00:07:00,449 --> 00:07:01,730 Entonces 148 00:07:01,730 --> 00:07:03,069 Claro 149 00:07:03,069 --> 00:07:05,230 La tendríamos que 150 00:07:05,230 --> 00:07:08,279 Quitar de aquí 151 00:07:08,279 --> 00:07:10,540 y ahora 152 00:07:10,540 --> 00:07:12,459 ya sí, nos hacemos nuestro 153 00:07:12,459 --> 00:07:13,120 main 154 00:07:13,120 --> 00:07:20,050 la infonutricional pasada 155 00:07:20,050 --> 00:07:25,480 ¿vale? ¿cómo? 156 00:07:29,720 --> 00:07:30,800 claro, ya no sale, ya 157 00:07:30,800 --> 00:07:32,100 para JacksBear no existe 158 00:07:32,100 --> 00:07:35,519 lo único es eso, que si hemos hecho referencia 159 00:07:35,519 --> 00:07:37,139 a ella en otras anotaciones 160 00:07:37,139 --> 00:07:38,420 como por ejemplo esta 161 00:07:38,420 --> 00:07:41,259 pues tienes que quitarla también, porque si no 162 00:07:41,259 --> 00:07:42,300 se va a volver loca 163 00:07:42,300 --> 00:07:46,730 bueno, pues 164 00:07:46,730 --> 00:07:48,769 escribir 165 00:07:48,769 --> 00:07:50,290 a un JAXB 166 00:07:50,290 --> 00:07:52,850 ya sabemos que sería, una vez que están 167 00:07:52,850 --> 00:07:55,269 las anotaciones correctamente hechas 168 00:07:55,269 --> 00:07:57,069 pues sería 169 00:07:57,069 --> 00:07:58,089 hacer esto 170 00:07:58,089 --> 00:08:00,769 pero también puede ocurrir que queramos 171 00:08:00,769 --> 00:08:02,389 lo contrario, tenemos el XML 172 00:08:02,389 --> 00:08:04,910 que es nuestra fuente de datos y queremos cargarlo 173 00:08:04,910 --> 00:08:05,629 a clases 174 00:08:05,629 --> 00:08:08,709 bueno, pues entonces en lugar de un 175 00:08:08,709 --> 00:08:10,550 Marshall tenemos que hacer un Marshall 176 00:08:10,550 --> 00:08:12,850 entonces prueba anotaciones 177 00:08:12,850 --> 00:08:14,730 en lugar de un Marshall tenemos que hacer 178 00:08:14,730 --> 00:08:15,170 un Marshall 179 00:08:15,170 --> 00:08:17,629 Un Marshall 180 00:08:17,629 --> 00:08:18,810 Le he dicho un dos veces 181 00:08:18,810 --> 00:08:20,310 ¿Por qué no lo he dicho en correcto en inglés? 182 00:08:20,430 --> 00:08:23,689 Vale, entonces tenéis que hacer un a Marshall 183 00:08:23,689 --> 00:08:25,009 Y 184 00:08:25,009 --> 00:08:27,209 Ahora se entiende mejor, ¿verdad? 185 00:08:27,750 --> 00:08:28,089 Claro 186 00:08:28,089 --> 00:08:31,009 Vale, pues entonces vamos a hacer un método 187 00:08:31,009 --> 00:08:32,049 Aquí 188 00:08:32,049 --> 00:08:34,409 Que sea 189 00:08:34,409 --> 00:08:37,789 Que me devuelve 190 00:08:37,789 --> 00:08:39,570 Un objeto recetario 191 00:08:39,570 --> 00:08:44,360 Y que me lee el XML 192 00:08:44,360 --> 00:08:46,580 Al que yo le paso 193 00:08:46,580 --> 00:08:49,240 Un file, bueno como somos 194 00:08:49,240 --> 00:08:51,100 Para perderle miedo al pad 195 00:08:51,100 --> 00:08:52,279 Que parece que le tenemos miedo 196 00:08:52,279 --> 00:08:53,899 Bueno, vosotros ya sé que no 197 00:08:53,899 --> 00:08:56,600 Vamos a pasarle el fichero en modo pad 198 00:08:56,600 --> 00:08:58,919 No en file, que estamos tan 199 00:08:58,919 --> 00:09:00,179 Acostumbradísimos al file 200 00:09:00,179 --> 00:09:02,960 Que ya no nos genera retos, pero el pad no genera 201 00:09:02,960 --> 00:09:04,879 Más retos, pero no sabemos los métodos 202 00:09:04,879 --> 00:09:06,799 Venga 203 00:09:06,799 --> 00:09:08,440 Pad de Java Neo 204 00:09:08,440 --> 00:09:16,509 Para que se quite el rojito que nos da mal rollo 205 00:09:16,509 --> 00:09:19,830 Bueno, antes de hacer este método 206 00:09:19,830 --> 00:09:21,649 No me he parado lo suficiente 207 00:09:21,649 --> 00:09:22,889 en una palabra 208 00:09:22,889 --> 00:09:25,370 que me encantan las palabras 209 00:09:25,370 --> 00:09:26,610 como bien sabéis 210 00:09:26,610 --> 00:09:28,649 que es en la palabra 211 00:09:28,649 --> 00:09:30,570 transient 212 00:09:30,570 --> 00:09:35,179 esta palabra a nosotros 213 00:09:35,179 --> 00:09:37,600 nos afecta muchísimo como concepto general 214 00:09:37,600 --> 00:09:39,100 nosotros estamos haciendo 215 00:09:39,100 --> 00:09:41,320 un módulo de acceso a datos 216 00:09:41,320 --> 00:09:42,340 que es lo que queremos 217 00:09:42,340 --> 00:09:45,700 que nuestros objetos sean persistentes 218 00:09:45,700 --> 00:09:47,000 esa palabra ya no suena 219 00:09:47,000 --> 00:09:49,580 persistente es que lo que hagamos 220 00:09:49,580 --> 00:09:50,679 se refleje 221 00:09:50,679 --> 00:09:53,100 normalmente en la base de datos 222 00:09:53,100 --> 00:09:55,200 pero podría ser en ficheros, como ya vemos. 223 00:09:57,019 --> 00:10:01,539 Pero claro, no siempre queremos que todo sea persistente. 224 00:10:01,960 --> 00:10:05,460 En una aplicación convivirán objetos persistentes 225 00:10:05,460 --> 00:10:08,379 y tienen que convivir con objetos no persistentes, 226 00:10:08,700 --> 00:10:12,019 que no son necesarios reflejarlos en la base de datos, 227 00:10:12,120 --> 00:10:14,480 que su estado se refleje, que existan, que no es necesario. 228 00:10:15,019 --> 00:10:16,679 Y la aplicación lo necesita igualmente. 229 00:10:17,360 --> 00:10:20,159 Entonces, esos son los objetos que llamamos transitorios. 230 00:10:20,159 --> 00:10:49,200 Entonces la notación transient en general la usan muchos frameworks para indicar esta idea, este objeto no forma parte del contexto de la persistencia, el contexto de persistencia de una aplicación en general es todo eso que va a persistir, es decir, todo eso que se va a crear en la base de datos, ese es el contexto de persistencia, todo lo que va a persistir, pero habrá objetos fuera de él. 231 00:10:50,159 --> 00:10:54,759 Y entonces el framework de persistencia, el que se encarga de hacer esa conexión, 232 00:10:55,240 --> 00:10:58,179 ese framework tiene que saber que está dentro del contexto y que no. 233 00:10:59,299 --> 00:11:03,720 Pues lo que estará fuera del contexto es lo transitorio y para cada framework, 234 00:11:03,720 --> 00:11:11,220 habrá alguna forma de anotarlo, pero transient es como la palabra clave para indicar eso. 235 00:11:12,840 --> 00:11:18,059 Bueno, pues con esto estamos haciendo que el objeto infonutricional, este objeto, 236 00:11:18,059 --> 00:11:21,220 esté fuera del contexto de persistencia 237 00:11:21,220 --> 00:11:22,159 de nuestra aplicación 238 00:11:22,159 --> 00:11:25,080 no vale xml, ni has leído el xml 239 00:11:25,080 --> 00:11:25,580 ni nada 240 00:11:25,580 --> 00:11:28,679 ahora, volviendo a nuestro main 241 00:11:28,679 --> 00:11:30,700 para leer de un xml, vale 242 00:11:30,700 --> 00:11:32,000 pues aquí 243 00:11:32,000 --> 00:11:34,759 otra vez nos ponemos en el copia y pega 244 00:11:34,759 --> 00:11:37,200 en lugar de un marshal, un marshal 245 00:11:37,200 --> 00:11:38,179 un marshal 246 00:11:38,179 --> 00:11:39,860 vale, entonces 247 00:11:39,860 --> 00:11:43,639 aquí 248 00:11:43,639 --> 00:11:46,919 el jacksbcontext 249 00:11:46,919 --> 00:11:48,100 lo tengo que hacer igual 250 00:11:48,100 --> 00:11:49,620 pero 251 00:11:49,620 --> 00:11:52,659 en lugar de un 252 00:11:52,659 --> 00:11:54,860 marshaller, tendré que hacer 253 00:11:54,860 --> 00:11:56,139 un unmarshaller 254 00:11:56,139 --> 00:12:01,039 a ver, marshall es 255 00:12:01,039 --> 00:12:02,820 de objetos 256 00:12:02,820 --> 00:12:04,220 a fichero 257 00:12:04,220 --> 00:12:06,799 y al unmarshall, tú tienes 258 00:12:06,799 --> 00:12:08,799 un fichero y quieres 259 00:12:08,799 --> 00:12:11,120 crear el conjunto de objetos 260 00:12:11,120 --> 00:12:13,100 con los datos que haya en ese fichero 261 00:12:13,100 --> 00:12:14,840 unmarshall es leer 262 00:12:14,840 --> 00:12:16,679 del fichero y llevar a los objetos 263 00:12:16,679 --> 00:12:18,320 correspondientes. Marshall es 264 00:12:18,320 --> 00:12:20,480 escribir en el fichero 265 00:12:20,480 --> 00:12:22,919 a partir de la información de los objetos. 266 00:12:23,820 --> 00:12:24,019 Vale. 267 00:12:27,250 --> 00:12:27,690 Un try. 268 00:12:29,350 --> 00:12:30,370 Un try. 269 00:12:31,169 --> 00:12:44,000 Vale. Normalmente 270 00:12:44,000 --> 00:12:47,799 uno 271 00:12:47,799 --> 00:12:48,740 propaga 272 00:12:48,740 --> 00:12:51,559 los errores propios de la 273 00:12:51,559 --> 00:12:52,960 aplicación. Es decir, 274 00:12:53,460 --> 00:12:55,399 si yo concibo como error propio 275 00:12:55,399 --> 00:12:56,820 que mi XML 276 00:12:56,820 --> 00:12:59,399 en lugar de 277 00:12:59,399 --> 00:13:01,559 recetario 278 00:13:01,559 --> 00:13:04,159 se llame recetarios 279 00:13:04,159 --> 00:13:05,840 o yo que sé, o cualquier cosa 280 00:13:05,840 --> 00:13:07,980 me refiero, hay errores 281 00:13:07,980 --> 00:13:09,919 que son errores de que 282 00:13:09,919 --> 00:13:11,679 algo funciona mal para todo el mundo 283 00:13:11,679 --> 00:13:13,639 o sea, si se ha roto el Marshaler 284 00:13:13,639 --> 00:13:15,799 porque se ha roto el disco 285 00:13:15,799 --> 00:13:17,220 duro, si 286 00:13:17,220 --> 00:13:19,940 ha fallado algo porque ha fallado la RAM 287 00:13:19,940 --> 00:13:21,559 hay errores o excepciones 288 00:13:21,559 --> 00:13:24,120 que son generales 289 00:13:24,120 --> 00:13:25,840 que no son específicas 290 00:13:25,840 --> 00:13:27,399 de mi aplicación, entonces 291 00:13:27,399 --> 00:13:29,139 esas como principio básico 292 00:13:29,139 --> 00:13:31,840 uno las mete en try-catch, no las va propagando 293 00:13:31,840 --> 00:13:33,240 hacia arriba, porque entonces 294 00:13:33,240 --> 00:13:35,100 mira que le está dificultando la vida 295 00:13:35,100 --> 00:13:36,759 al que use nuestros métodos 296 00:13:36,759 --> 00:13:39,960 entonces, ¿qué excepciones 297 00:13:39,960 --> 00:13:41,799 propagamos? las que son 298 00:13:41,799 --> 00:13:43,820 avisos propios nuestros de nuestras 299 00:13:43,820 --> 00:13:45,840 cosas, yo quiero que 300 00:13:45,840 --> 00:13:47,659 sea un error si me metes 301 00:13:47,659 --> 00:13:49,139 una edad menor de 18 302 00:13:49,139 --> 00:13:51,019 eso no es un error del mundo 303 00:13:51,019 --> 00:13:53,779 puede vivir, la gente menor de edad vive y no le pasa 304 00:13:53,779 --> 00:13:55,639 nada, pero en mi aplicación 305 00:13:55,639 --> 00:13:58,059 si quiero que eso sea un problema 306 00:13:58,059 --> 00:14:00,360 pues entonces me hago mi excepción 307 00:14:00,360 --> 00:14:02,320 y la propago y aviso que eso es un problema 308 00:14:02,320 --> 00:14:04,019 propio, entonces más o menos 309 00:14:04,019 --> 00:14:06,639 suelen ser los criterios 310 00:14:06,639 --> 00:14:08,320 que seguimos, entonces esta no la 311 00:14:08,320 --> 00:14:10,320 propagaríamos porque esto es un error 312 00:14:10,320 --> 00:14:12,639 que yo no quiero que aparezca 313 00:14:12,639 --> 00:14:13,500 no quiero 314 00:14:13,500 --> 00:14:16,179 porque no indica nada, no está avisando de nada 315 00:14:16,179 --> 00:14:18,700 no está avisando al usuario de que has metido 316 00:14:18,700 --> 00:14:20,220 una edad menor de 18 317 00:14:20,220 --> 00:14:21,960 no está avisando de nada mío 318 00:14:21,960 --> 00:14:24,259 es un error que puede salir con el que tengo que contar 319 00:14:24,259 --> 00:14:26,159 y que yo me lo tengo que guisar y comer 320 00:14:26,159 --> 00:14:27,600 no voy a andar propagando para arriba 321 00:14:27,600 --> 00:14:29,000 ¿Vale? 322 00:14:29,940 --> 00:14:31,980 Entonces, esto, en lugar de un 323 00:14:31,980 --> 00:14:32,580 Marshaller 324 00:14:32,580 --> 00:14:35,559 Pues como lo que queremos es hacer un 325 00:14:35,559 --> 00:14:37,539 Unmarshall, pues aquí crearíamos 326 00:14:37,539 --> 00:14:39,580 Un unmarshaller 327 00:14:39,580 --> 00:14:41,700 Y de nuevo 328 00:14:41,700 --> 00:14:44,679 No sé si 329 00:14:44,679 --> 00:14:46,960 Lo estaré 330 00:14:46,960 --> 00:14:49,840 Si no me dice import, sí, he acertado 331 00:14:49,840 --> 00:14:53,659 Vale, y ahora 332 00:14:53,659 --> 00:14:55,340 Este, ¿qué tiene que hacer? 333 00:14:55,340 --> 00:14:57,299 Pues el unmarshall 334 00:14:57,299 --> 00:14:59,299 Y a recetario 335 00:14:59,299 --> 00:15:03,659 al objeto recetario resultante 336 00:15:03,659 --> 00:15:06,379 que vamos a ponerle por aquí 337 00:15:06,379 --> 00:15:13,299 recetario que inicialmente es null 338 00:15:13,299 --> 00:15:15,100 y que es el que vamos a devolver 339 00:15:15,100 --> 00:15:21,620 a este de aquí pues ahora 340 00:15:21,620 --> 00:15:25,860 le vamos a asignar el resultado ahora ya si 341 00:15:25,860 --> 00:15:28,980 de hacer el 342 00:15:28,980 --> 00:15:29,820 Perdón 343 00:15:29,820 --> 00:15:34,899 Punto 344 00:15:34,899 --> 00:15:37,940 AppMarshal 345 00:15:37,940 --> 00:15:39,759 Vaya 346 00:15:39,759 --> 00:15:41,379 Para una vez que uso file 347 00:15:41,379 --> 00:15:43,659 Pues no, en AppMarshal necesito un objeto 348 00:15:43,659 --> 00:15:45,279 Pad, necesito un objeto file 349 00:15:45,279 --> 00:15:46,580 Entonces 350 00:15:46,580 --> 00:15:48,899 Sí 351 00:15:48,899 --> 00:15:50,559 Supongo que sí 352 00:15:50,559 --> 00:15:53,860 Mira, mira que pregunta, vamos a buscar a ver si 353 00:15:53,860 --> 00:15:55,879 Vale, vamos a ver si un objeto 354 00:15:55,879 --> 00:15:57,860 Pad tiene un, seguramente 355 00:15:57,860 --> 00:15:58,480 Tenga, ¿verdad? 356 00:15:59,039 --> 00:16:01,299 Tu file, perfecto 357 00:16:01,299 --> 00:16:07,559 Y esto seguramente ahora tenga aquí una... 358 00:16:07,559 --> 00:16:14,440 No, he cogido el que me ofrece y me lo ha ofrecido sin ser... 359 00:16:14,440 --> 00:16:18,500 Sí, que he elegido mal este nombre, lo reconozco, porque se ha quedado un poco feo. 360 00:16:22,970 --> 00:16:23,789 ¿Ayer qué pasó? 361 00:16:25,230 --> 00:16:27,190 Que también he elegido mal el nombre, ¿me estás queriendo decir? 362 00:16:30,389 --> 00:16:32,029 A ver... 363 00:16:32,029 --> 00:16:37,730 No, solo tiene una. 364 00:16:37,730 --> 00:16:40,289 Bueno, pero ese lo elegí yo 365 00:16:40,289 --> 00:16:41,909 Ya, vale 366 00:16:41,909 --> 00:16:44,509 Vamos, que lo he hecho 367 00:16:44,509 --> 00:16:46,210 Que lo he elegido fatal dos veces 368 00:16:46,210 --> 00:16:51,110 Bueno, si total vais a hacer 369 00:16:51,110 --> 00:16:52,950 Como de esto 370 00:16:52,950 --> 00:16:54,470 Es de lo que vais a hacer el copia y pega 371 00:16:54,470 --> 00:16:56,509 Vale 372 00:16:56,509 --> 00:16:59,190 Pues entonces, ya está 373 00:16:59,190 --> 00:17:02,740 Vamos ahora 374 00:17:02,740 --> 00:17:04,240 A probar en nuestro main 375 00:17:04,240 --> 00:17:10,059 No, porque este no genera 376 00:17:10,059 --> 00:17:15,619 O sea, este lo que va a hacer va a ser ignorar todos los tabuladores y espacios directamente. 377 00:17:15,819 --> 00:17:17,859 O sea, este va a ir cogiendo las etiquetas con los nodos. 378 00:17:18,900 --> 00:17:21,480 Y todo lo que necesite filtrar lo va a filtrar. 379 00:17:22,000 --> 00:17:23,440 El otro es que escribía. 380 00:17:23,559 --> 00:17:27,220 Entonces, ahí sí que tenemos que decirle, quiero que escribas espacios, quiero que no los escribas. 381 00:17:27,720 --> 00:17:30,940 Pero este va leyendo y va eliminando todo lo que le sobre. 382 00:17:30,940 --> 00:17:32,400 entonces 383 00:17:32,400 --> 00:17:38,089 vamos a ver 384 00:17:38,089 --> 00:17:42,299 vamos a cambiar ahora un poquito 385 00:17:42,299 --> 00:17:44,779 el fichero 386 00:17:44,779 --> 00:17:46,460 para ver si lo lee correctamente 387 00:17:46,460 --> 00:17:48,380 recetario 388 00:17:48,380 --> 00:17:50,200 lo vamos a sacar de 389 00:17:50,200 --> 00:17:52,440 leer xml 390 00:17:52,440 --> 00:17:54,880 y el pad 391 00:17:54,880 --> 00:17:57,019 se creaba con get 392 00:17:57,019 --> 00:17:58,579 y ahora 393 00:17:58,579 --> 00:18:00,880 aquí poníamos 394 00:18:00,880 --> 00:18:02,299 la ruta 395 00:18:02,299 --> 00:18:04,000 que la ruta 396 00:18:04,000 --> 00:18:08,690 La sacamos 397 00:18:08,690 --> 00:18:11,190 De aquí 398 00:18:11,190 --> 00:18:18,769 Copiar ruta de acceso 399 00:18:18,769 --> 00:18:23,450 Ay, si hubiera puesto 400 00:18:23,450 --> 00:18:24,450 Comillas 401 00:18:24,450 --> 00:18:26,990 Me habría puesto ya la doble barra 402 00:18:26,990 --> 00:18:27,990 Tengo que poner la mano 403 00:18:27,990 --> 00:18:35,839 Vale 404 00:18:35,839 --> 00:18:37,619 Ala 405 00:18:37,619 --> 00:18:40,000 Ya está y el punto y coma 406 00:18:40,000 --> 00:18:45,130 Vale 407 00:18:45,130 --> 00:18:47,990 ¿Puede ser si ya recetario y minuto? 408 00:18:48,849 --> 00:18:50,210 ¿La clase recetario? 409 00:18:50,309 --> 00:18:50,890 No, no, no 410 00:18:50,890 --> 00:18:54,150 Bueno, esta es mi ruta 411 00:18:54,150 --> 00:18:55,750 Tú la que tengas tú 412 00:18:55,750 --> 00:18:59,509 Ah, sí, sí, claro 413 00:18:59,509 --> 00:19:00,430 El nombre del fichero 414 00:19:00,430 --> 00:19:07,190 Y ahora, bueno, vamos a comprobar 415 00:19:07,190 --> 00:19:08,730 Imprimiendo cualquier cosa 416 00:19:08,730 --> 00:19:11,369 Que sí que lo ha hecho 417 00:19:11,369 --> 00:19:12,390 Vamos a coger 418 00:19:12,390 --> 00:19:15,150 De la lista de recetas 419 00:19:15,150 --> 00:19:17,309 La primera de ellas 420 00:19:17,309 --> 00:19:20,140 Bueno, no 421 00:19:20,140 --> 00:19:20,740 A ver 422 00:19:20,740 --> 00:19:24,119 Como podemos escribir rápidamente 423 00:19:24,119 --> 00:19:24,779 Esto 424 00:19:24,779 --> 00:19:27,839 Pero es que somos un poco tontos 425 00:19:27,839 --> 00:19:29,579 Recetario 426 00:19:29,579 --> 00:19:30,460 Punto 427 00:19:30,460 --> 00:19:32,700 Get recetas 428 00:19:32,700 --> 00:19:35,579 Punto stream 429 00:19:35,579 --> 00:19:37,480 Me da las recetas 430 00:19:37,480 --> 00:19:40,099 Y que vamos a querer mostrar de las recetas 431 00:19:40,099 --> 00:19:41,319 Venga 432 00:19:41,319 --> 00:19:43,740 Que nos apetece mostrar de las recetas 433 00:19:43,740 --> 00:19:46,319 Que es vegetariana 434 00:19:46,319 --> 00:19:48,059 De las recetas 435 00:19:48,059 --> 00:19:49,240 Vamos 436 00:19:49,240 --> 00:19:51,799 las vegetarianas porque somos todos muy 437 00:19:51,799 --> 00:19:52,579 vegetarianos 438 00:19:52,579 --> 00:19:55,619 y luego mostramos los nombres de todas ellas 439 00:19:55,619 --> 00:19:59,029 no, es que ahora voy a hacer copia y pega 440 00:19:59,029 --> 00:20:00,130 en el fichero voy a poner muchas 441 00:20:00,130 --> 00:20:01,630 con copia y pega 442 00:20:01,630 --> 00:20:03,970 vamos a 443 00:20:03,970 --> 00:20:06,910 mostrar las vegetarianas 444 00:20:06,910 --> 00:20:08,410 porque somos muy pijos 445 00:20:08,410 --> 00:20:11,569 vegetarianas 446 00:20:11,569 --> 00:20:13,670 a elegir 447 00:20:13,670 --> 00:20:16,349 para elegir, mostrar nombre 448 00:20:16,349 --> 00:20:17,329 de vegetarianas 449 00:20:17,329 --> 00:20:20,450 entonces, aquí ya tengo la lista 450 00:20:20,450 --> 00:20:22,430 de recetas, aquí ya los que 451 00:20:22,430 --> 00:20:24,630 decían que todavía se hacían un lío 452 00:20:24,630 --> 00:20:25,730 ¿qué 453 00:20:25,730 --> 00:20:27,690 método pongo ahí? 454 00:20:28,130 --> 00:20:30,549 para quedarme con las, tengo en mi stream 455 00:20:30,549 --> 00:20:31,990 tiene ya la lista de recetas 456 00:20:31,990 --> 00:20:34,789 me quiero quedar solamente 457 00:20:34,789 --> 00:20:36,549 con las que sean 458 00:20:36,549 --> 00:20:37,769 vegetarianas 459 00:20:37,769 --> 00:20:40,089 filter, muy bien 460 00:20:40,089 --> 00:20:42,190 para filtrar eso 461 00:20:42,190 --> 00:20:44,769 exacto, vamos a ver 462 00:20:44,769 --> 00:20:46,730 punto 463 00:20:46,730 --> 00:20:48,490 filter, me voy a quedar 464 00:20:48,490 --> 00:20:50,490 con cuáles, con aquellas 465 00:20:50,490 --> 00:20:52,529 recetas que hagan 466 00:20:52,529 --> 00:20:54,490 exacto, que hagan true este 467 00:20:54,490 --> 00:20:54,950 boolean 468 00:20:54,950 --> 00:20:58,269 x.vegetariana 469 00:20:58,269 --> 00:21:00,569 isvegetariana, porque ya está 470 00:21:00,569 --> 00:21:02,569 isvegetariana ya es el 471 00:21:02,569 --> 00:21:04,230 boolean, pues venga 472 00:21:04,230 --> 00:21:06,470 estas de aquí, y que queremos 473 00:21:06,470 --> 00:21:08,430 hacer con estas, ahora 474 00:21:08,430 --> 00:21:10,609 ya mostrar el nombre, entonces 475 00:21:10,609 --> 00:21:11,490 pues 476 00:21:11,490 --> 00:21:14,490 a todas estas le hacemos un 477 00:21:14,490 --> 00:21:16,470 for each, claro luego el siso con los 478 00:21:16,470 --> 00:21:19,089 Exacto, le hacemos un 479 00:21:19,089 --> 00:21:23,890 De cada una de ellas 480 00:21:23,890 --> 00:21:25,509 No, a ver 481 00:21:25,509 --> 00:21:26,670 Porque yo no quiero mostrar 482 00:21:26,670 --> 00:21:29,829 Toda la receta, quiero mostrar solo el nombre 483 00:21:29,829 --> 00:21:31,569 Entonces for each system.out.println 484 00:21:31,569 --> 00:21:32,450 Lo que haría sería 485 00:21:32,450 --> 00:21:35,450 Mostrarme el toString de receta, ¿verdad? 486 00:21:35,950 --> 00:21:37,750 Es decir, si hacemos esto 487 00:21:37,750 --> 00:21:40,049 Claro 488 00:21:40,049 --> 00:21:44,900 Vale 489 00:21:44,900 --> 00:21:46,640 System 490 00:21:46,640 --> 00:21:51,259 que mala es la edad 491 00:21:51,259 --> 00:21:53,400 vale, si yo hago esto 492 00:21:53,400 --> 00:21:55,200 ya sabéis que esta es la 493 00:21:55,200 --> 00:21:57,019 abreviatura de hacer 494 00:21:57,019 --> 00:21:59,180 este método o cualquier otro 495 00:21:59,180 --> 00:22:01,220 podría ser cualquier otro, con todo 496 00:22:01,220 --> 00:22:02,660 el objeto completo, con todo 497 00:22:02,660 --> 00:22:05,099 todo el objeto cual es 498 00:22:05,099 --> 00:22:07,019 el objeto receta entero, luego me mostraría 499 00:22:07,019 --> 00:22:08,180 el tuestrín de receta 500 00:22:08,180 --> 00:22:10,579 si no tengo un tuestrín en receta 501 00:22:10,579 --> 00:22:13,400 pues venga, vamos a ponerle un tuestrín en receta 502 00:22:13,400 --> 00:22:19,759 y ya le pasan todos 503 00:22:19,759 --> 00:22:22,079 no, no hace falta 504 00:22:22,079 --> 00:22:30,500 Vale, un stream en receta que muestre solamente la dificultad del nombre y si es vegetariana. 505 00:22:30,599 --> 00:22:32,480 Aunque he dicho mostrar solo el nombre, bueno. 506 00:22:34,940 --> 00:22:36,059 Vale, ya tiene el toStream. 507 00:22:37,259 --> 00:22:43,779 Entonces, ahora ya sí me mostrará los datos de las vegetarianas. 508 00:22:44,960 --> 00:22:45,519 Solamente. 509 00:22:45,900 --> 00:22:51,200 Siempre y cuando yo haya hecho bien las anotaciones y por tanto la lectura la haga bien. 510 00:22:52,079 --> 00:22:53,119 Entonces 511 00:22:53,119 --> 00:22:59,349 Ay, que es que ni he hecho ni copias 512 00:22:59,349 --> 00:23:01,529 O sea, funciona 513 00:23:01,529 --> 00:23:03,750 Pero poca cosa estoy viendo 514 00:23:03,750 --> 00:23:05,970 Porque solamente he hecho una receta 515 00:23:05,970 --> 00:23:08,029 Voy a copiar 516 00:23:08,029 --> 00:23:09,950 Si es que iba a copiar y pegar, pero se me ha olvidado 517 00:23:09,950 --> 00:23:11,230 Entonces 518 00:23:11,230 --> 00:23:13,869 Vamos a hacer 519 00:23:13,869 --> 00:23:14,970 Otro bollo 520 00:23:14,970 --> 00:23:24,140 Vamos a hacer 521 00:23:24,140 --> 00:23:25,460 Una tarta 522 00:23:25,460 --> 00:23:29,819 Y esta no es vegetariana 523 00:23:29,819 --> 00:23:36,819 ¿Vale? Cuidado que aquí solo puedo poner 524 00:23:36,819 --> 00:23:38,180 True y false, porque 525 00:23:38,180 --> 00:23:39,940 lo he declarado como boolean 526 00:23:39,940 --> 00:23:42,140 vale, entonces los únicos posibles valores 527 00:23:42,140 --> 00:23:43,519 de boolean son true y false 528 00:23:43,519 --> 00:23:46,259 no puedo de repente cambiarlo 529 00:23:46,259 --> 00:23:48,039 y decir si y no, si cambio y digo si y no 530 00:23:48,039 --> 00:23:50,319 tendría que cambiar la propiedad a string 531 00:23:50,319 --> 00:23:52,180 y a partir de ahí a trabajar 532 00:23:52,180 --> 00:23:54,579 vale, entonces 533 00:23:54,579 --> 00:24:02,240 vale, pues me ha filtrado 534 00:24:02,240 --> 00:24:03,980 el bollo, efectivamente 535 00:24:03,980 --> 00:24:05,400 porque la tarta no es vegetariana 536 00:24:05,400 --> 00:24:07,799 vale, entonces 537 00:24:07,799 --> 00:24:09,240 espera que lo bajo aquí abajo 538 00:24:09,240 --> 00:24:19,819 vale 539 00:24:19,819 --> 00:24:21,980 si no me gustara 540 00:24:21,980 --> 00:24:23,299 el toString porque 541 00:24:23,299 --> 00:24:26,000 muchas de estas clases yo no puedo andarlas 542 00:24:26,000 --> 00:24:28,140 tocando y ponerlas a mi gusto 543 00:24:28,140 --> 00:24:29,740 entonces a lo mejor el toString 544 00:24:29,740 --> 00:24:31,079 no me gusta 545 00:24:31,079 --> 00:24:34,119 y yo quiero en esta funcionalidad 546 00:24:34,119 --> 00:24:35,480 en concreto y solo en esta 547 00:24:35,480 --> 00:24:37,480 mostrar solo el nombre 548 00:24:37,480 --> 00:24:39,880 y no puedo cambiar el toString porque entonces 549 00:24:39,880 --> 00:24:41,779 estoy tocando una entidad del modelo 550 00:24:41,779 --> 00:24:44,039 que no debería, pues lo único que cambia 551 00:24:44,039 --> 00:24:45,920 es que este forEach no le puedo poner esto 552 00:24:45,920 --> 00:24:47,299 Que tendría que poner otra cosa 553 00:24:47,299 --> 00:24:49,559 Que le pondríamos 554 00:24:49,559 --> 00:24:51,039 Claro 555 00:24:51,039 --> 00:24:53,619 Que pondríamos en lugar de esto 556 00:24:53,619 --> 00:24:55,140 Que llamaría alto string 557 00:24:55,140 --> 00:24:57,839 En lugar de esto, pues haríamos 558 00:24:57,839 --> 00:25:00,259 En lugar de vaguear con el operador dos puntos 559 00:25:00,259 --> 00:25:00,720 Haríamos 560 00:25:00,720 --> 00:25:02,859 Para cada x 561 00:25:02,859 --> 00:25:05,099 Me vas a mostrar 562 00:25:05,099 --> 00:25:07,059 X punto 563 00:25:07,059 --> 00:25:08,460 Nombre 564 00:25:08,460 --> 00:25:15,000 Claro, el for each es 565 00:25:15,000 --> 00:25:17,440 Con cada elemento 566 00:25:17,440 --> 00:25:20,740 haz lo que vaya ahí 567 00:25:20,740 --> 00:25:22,680 que puede ser una línea, pueden ser muchas 568 00:25:22,680 --> 00:25:24,480 entonces 569 00:25:24,480 --> 00:25:26,640 esto es cuando 570 00:25:26,640 --> 00:25:28,480 si no está el getNombre 571 00:25:28,480 --> 00:25:30,779 esto es lo que se puede 572 00:25:30,779 --> 00:25:33,099 abreviar, claro que es lo anterior 573 00:25:33,099 --> 00:25:34,099 pero claro 574 00:25:34,099 --> 00:25:36,779 el parámetro del método que se ponga aquí 575 00:25:36,779 --> 00:25:38,720 que puede ser el método que sea, el parámetro 576 00:25:38,720 --> 00:25:39,940 tiene que ser esto mismo 577 00:25:39,940 --> 00:25:42,900 si el parámetro es esto mismo lo podemos abreviar 578 00:25:42,900 --> 00:25:45,240 a esto, pero si el parámetro 579 00:25:45,240 --> 00:25:46,940 como es el caso, el parámetro 580 00:25:46,940 --> 00:25:48,940 no es esto mismo, no lo puedo 581 00:25:48,940 --> 00:25:50,720 abreviar, pues no pasa nada, lo pongo 582 00:25:50,720 --> 00:25:52,819 completo. El for each me dice 583 00:25:52,819 --> 00:25:55,059 para cada x, haz todo lo que 584 00:25:55,059 --> 00:25:56,539 hay aquí. ¿Y qué hay? Pues nada, 585 00:25:57,099 --> 00:25:58,599 un siso del nombre. 586 00:25:59,440 --> 00:25:59,960 ¿Vale? 587 00:26:01,980 --> 00:26:03,460 Y así mostraríamos 588 00:26:03,460 --> 00:26:03,900 solo 589 00:26:03,900 --> 00:26:07,079 el bollito. ¿Y algo he hecho 590 00:26:07,079 --> 00:26:07,299 mal? 591 00:26:14,359 --> 00:26:14,880 Vale. 592 00:26:20,410 --> 00:26:24,000 Y ahora lo... 593 00:26:24,000 --> 00:26:25,559 Pues ya está. Solo esta. 594 00:26:25,559 --> 00:26:32,359 entonces lo de un marshal y un marshal 595 00:26:32,359 --> 00:26:34,700 es prácticamente siempre igual 596 00:26:34,700 --> 00:26:38,400 claro, hacer marshal y un marshal es 597 00:26:38,400 --> 00:26:39,400 esto 598 00:26:39,400 --> 00:26:41,579 lo que está aquí 599 00:26:41,579 --> 00:26:44,779 esto para mandarlo al fichero y esto para leer 600 00:26:44,779 --> 00:26:45,119 entonces 601 00:26:45,119 --> 00:26:48,599 la única complejidad está en poner bien 602 00:26:48,599 --> 00:26:49,460 las anotaciones 603 00:26:49,460 --> 00:26:51,640 pero ya veis que bueno 604 00:26:51,640 --> 00:26:54,099 que es seguir una serie de reglas 605 00:26:54,099 --> 00:26:55,019 y ya está 606 00:27:00,000 --> 00:27:02,920 perdón