1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.beanutils2;
19
20 import java.beans.PropertyDescriptor;
21 import java.lang.reflect.InvocationTargetException;
22 import java.lang.reflect.Method;
23 import java.util.Map;
24
25 /**
26 * <p>
27 * Utility methods for using Java Reflection APIs to facilitate generic property getter and setter operations on Java objects.
28 * </p>
29 *
30 * <p>
31 * The implementations for these methods are provided by {@code PropertyUtilsBean}. For more details see {@link PropertyUtilsBean}.
32 * </p>
33 *
34 * @see PropertyUtilsBean
35 * @see org.apache.commons.beanutils2.expression.Resolver
36 */
37
38 public final class PropertyUtils {
39
40 /**
41 * Adds a {@code BeanIntrospector}. This object is invoked when the property descriptors of a class need to be obtained.
42 *
43 * @param introspector the {@code BeanIntrospector} to be added (must not be <strong>null</strong>
44 * @throws IllegalArgumentException if the argument is <strong>null</strong>
45 * @since 1.9
46 */
47 public static void addBeanIntrospector(final BeanIntrospector introspector) {
48 PropertyUtilsBean.getInstance().addBeanIntrospector(introspector);
49 }
50
51 /**
52 * Clear any cached property descriptors information for all classes loaded by any class loaders. This is useful in cases where class loaders are thrown
53 * away to implement class reloading.
54 *
55 * <p>
56 * For more details see {@code PropertyUtilsBean}.
57 * </p>
58 *
59 * @see PropertyUtilsBean#clearDescriptors
60 */
61 public static void clearDescriptors() {
62 PropertyUtilsBean.getInstance().clearDescriptors();
63 }
64
65 /**
66 * <p>
67 * Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter
68 * and setter methods might have been customized via {@code BeanInfo} classes).
69 * </p>
70 *
71 * <p>
72 * For more details see {@code PropertyUtilsBean}.
73 * </p>
74 *
75 * @param dest Destination bean whose properties are modified
76 * @param orig Origin bean whose properties are retrieved
77 * @throws IllegalAccessException if the caller does not have access to the property accessor method
78 * @throws IllegalArgumentException if the {@code dest} or {@code orig} argument is null
79 * @throws InvocationTargetException if the property accessor method throws an exception
80 * @throws NoSuchMethodException if an accessor method for this property cannot be found
81 * @see PropertyUtilsBean#copyProperties
82 */
83 public static void copyProperties(final Object dest, final Object orig) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
84 PropertyUtilsBean.getInstance().copyProperties(dest, orig);
85 }
86
87 /**
88 * <p>
89 * Return the entire set of properties for which the specified bean provides a read method.
90 * </p>
91 *
92 * <p>
93 * For more details see {@code PropertyUtilsBean}.
94 * </p>
95 *
96 * @param bean Bean whose properties are to be extracted
97 * @return The set of properties for the bean
98 * @throws IllegalAccessException if the caller does not have access to the property accessor method
99 * @throws IllegalArgumentException if {@code bean} is null
100 * @throws InvocationTargetException if the property accessor method throws an exception
101 * @throws NoSuchMethodException if an accessor method for this property cannot be found
102 * @see PropertyUtilsBean#describe
103 */
104 public static Map<String, Object> describe(final Object bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
105 return PropertyUtilsBean.getInstance().describe(bean);
106 }
107
108 /**
109 * <p>
110 * Return the value of the specified indexed property of the specified bean, with no type conversions.
111 * </p>
112 *
113 * <p>
114 * For more details see {@code PropertyUtilsBean}.
115 * </p>
116 *
117 * @param bean Bean whose property is to be extracted
118 * @param name {@code propertyname[index]} of the property value to be extracted
119 * @return the indexed property value
120 * @throws IndexOutOfBoundsException if the specified index is outside the valid range for the underlying property
121 * @throws IllegalAccessException if the caller does not have access to the property accessor method
122 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
123 * @throws InvocationTargetException if the property accessor method throws an exception
124 * @throws NoSuchMethodException if an accessor method for this property cannot be found
125 * @see PropertyUtilsBean#getIndexedProperty(Object,String)
126 */
127 public static Object getIndexedProperty(final Object bean, final String name)
128 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
129 return PropertyUtilsBean.getInstance().getIndexedProperty(bean, name);
130 }
131
132 /**
133 * <p>
134 * Return the value of the specified indexed property of the specified bean, with no type conversions.
135 * </p>
136 *
137 * <p>
138 * For more details see {@code PropertyUtilsBean}.
139 * </p>
140 *
141 * @param bean Bean whose property is to be extracted
142 * @param name Simple property name of the property value to be extracted
143 * @param index Index of the property value to be extracted
144 * @return the indexed property value
145 * @throws IndexOutOfBoundsException if the specified index is outside the valid range for the underlying property
146 * @throws IllegalAccessException if the caller does not have access to the property accessor method
147 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
148 * @throws InvocationTargetException if the property accessor method throws an exception
149 * @throws NoSuchMethodException if an accessor method for this property cannot be found
150 * @see PropertyUtilsBean#getIndexedProperty(Object,String, int)
151 */
152 public static Object getIndexedProperty(final Object bean, final String name, final int index)
153 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
154 return PropertyUtilsBean.getInstance().getIndexedProperty(bean, name, index);
155 }
156
157 /**
158 * <p>
159 * Return the value of the specified mapped property of the specified bean, with no type conversions.
160 * </p>
161 *
162 * <p>
163 * For more details see {@code PropertyUtilsBean}.
164 * </p>
165 *
166 * @param bean Bean whose property is to be extracted
167 * @param name {@code propertyname(key)} of the property value to be extracted
168 * @return the mapped property value
169 * @throws IllegalAccessException if the caller does not have access to the property accessor method
170 * @throws InvocationTargetException if the property accessor method throws an exception
171 * @throws NoSuchMethodException if an accessor method for this property cannot be found
172 * @see PropertyUtilsBean#getMappedProperty(Object,String)
173 */
174 public static Object getMappedProperty(final Object bean, final String name)
175 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
176 return PropertyUtilsBean.getInstance().getMappedProperty(bean, name);
177 }
178
179 /**
180 * <p>
181 * Return the value of the specified mapped property of the specified bean, with no type conversions.
182 * </p>
183 *
184 * <p>
185 * For more details see {@code PropertyUtilsBean}.
186 * </p>
187 *
188 * @param bean Bean whose property is to be extracted
189 * @param name Mapped property name of the property value to be extracted
190 * @param key Key of the property value to be extracted
191 * @return the mapped property value
192 * @throws IllegalAccessException if the caller does not have access to the property accessor method
193 * @throws InvocationTargetException if the property accessor method throws an exception
194 * @throws NoSuchMethodException if an accessor method for this property cannot be found
195 * @see PropertyUtilsBean#getMappedProperty(Object,String, String)
196 */
197 public static Object getMappedProperty(final Object bean, final String name, final String key)
198 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
199 return PropertyUtilsBean.getInstance().getMappedProperty(bean, name, key);
200 }
201
202 /**
203 * <p>
204 * Return the mapped property descriptors for this bean class.
205 * </p>
206 *
207 * <p>
208 * For more details see {@code PropertyUtilsBean}.
209 * </p>
210 *
211 * @param beanClass Bean class to be introspected
212 * @return the mapped property descriptors
213 * @see PropertyUtilsBean#getMappedPropertyDescriptors(Class)
214 */
215 static Map<Class<?>, Map> getMappedPropertyDescriptors(final Class<?> beanClass) {
216 return PropertyUtilsBean.getInstance().getMappedPropertyDescriptors(beanClass);
217 }
218
219 /**
220 * <p>
221 * Return the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
222 * </p>
223 *
224 * <p>
225 * For more details see {@code PropertyUtilsBean}.
226 * </p>
227 *
228 * @param bean Bean whose property is to be extracted
229 * @param name Possibly nested name of the property to be extracted
230 * @return the nested property value
231 * @throws IllegalAccessException if the caller does not have access to the property accessor method
232 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
233 * @throws NestedNullException if a nested reference to a property returns null
234 * @throws InvocationTargetException if the property accessor method throws an exception
235 * @throws NoSuchMethodException if an accessor method for this property cannot be found
236 * @see PropertyUtilsBean#getNestedProperty
237 */
238 public static Object getNestedProperty(final Object bean, final String name)
239 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
240 return PropertyUtilsBean.getInstance().getNestedProperty(bean, name);
241 }
242
243 /**
244 * <p>
245 * Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
246 * </p>
247 *
248 * <p>
249 * For more details see {@code PropertyUtilsBean}.
250 * </p>
251 *
252 * @param bean Bean whose property is to be extracted
253 * @param name Possibly indexed and/or nested name of the property to be extracted
254 * @return the property value
255 * @throws IllegalAccessException if the caller does not have access to the property accessor method
256 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
257 * @throws InvocationTargetException if the property accessor method throws an exception
258 * @throws NoSuchMethodException if an accessor method for this property cannot be found
259 * @see PropertyUtilsBean#getProperty
260 */
261 public static Object getProperty(final Object bean, final String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
262 return PropertyUtilsBean.getInstance().getProperty(bean, name);
263 }
264
265 /**
266 * <p>
267 * Retrieve the property descriptor for the specified property of the specified bean, or return {@code null} if there is no such descriptor.
268 * </p>
269 *
270 * <p>
271 * For more details see {@code PropertyUtilsBean}.
272 * </p>
273 *
274 * @param bean Bean for which a property descriptor is requested
275 * @param name Possibly indexed and/or nested name of the property for which a property descriptor is requested
276 * @return the property descriptor
277 * @throws IllegalAccessException if the caller does not have access to the property accessor method
278 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
279 * @throws IllegalArgumentException if a nested reference to a property returns null
280 * @throws InvocationTargetException if the property accessor method throws an exception
281 * @throws NoSuchMethodException if an accessor method for this property cannot be found
282 * @see PropertyUtilsBean#getPropertyDescriptor
283 */
284 public static PropertyDescriptor getPropertyDescriptor(final Object bean, final String name)
285 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
286 return PropertyUtilsBean.getInstance().getPropertyDescriptor(bean, name);
287 }
288
289 /**
290 * <p>
291 * Retrieve the property descriptors for the specified class, introspecting and caching them the first time a particular bean class is encountered.
292 * </p>
293 *
294 * <p>
295 * For more details see {@code PropertyUtilsBean}.
296 * </p>
297 *
298 * @param beanClass Bean class for which property descriptors are requested
299 * @return the property descriptors
300 * @throws IllegalArgumentException if {@code beanClass} is null
301 * @see PropertyUtilsBean#getPropertyDescriptors(Class)
302 */
303 public static PropertyDescriptor[] getPropertyDescriptors(final Class<?> beanClass) {
304 return PropertyUtilsBean.getInstance().getPropertyDescriptors(beanClass);
305 }
306
307 /**
308 * <p>
309 * Retrieve the property descriptors for the specified bean, introspecting and caching them the first time a particular bean class is encountered.
310 * </p>
311 *
312 * <p>
313 * For more details see {@code PropertyUtilsBean}.
314 * </p>
315 *
316 * @param bean Bean for which property descriptors are requested
317 * @return the property descriptors
318 * @throws IllegalArgumentException if {@code bean} is null
319 * @see PropertyUtilsBean#getPropertyDescriptors(Object)
320 */
321 public static PropertyDescriptor[] getPropertyDescriptors(final Object bean) {
322 return PropertyUtilsBean.getInstance().getPropertyDescriptors(bean);
323 }
324
325 /**
326 * <p>
327 * Return the Java Class representing the property editor class that has been registered for this property (if any).
328 * </p>
329 *
330 * <p>
331 * For more details see {@code PropertyUtilsBean}.
332 * </p>
333 *
334 * @param bean Bean for which a property descriptor is requested
335 * @param name Possibly indexed and/or nested name of the property for which a property descriptor is requested
336 * @return the property editor class
337 * @throws IllegalAccessException if the caller does not have access to the property accessor method
338 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
339 * @throws IllegalArgumentException if a nested reference to a property returns null
340 * @throws InvocationTargetException if the property accessor method throws an exception
341 * @throws NoSuchMethodException if an accessor method for this property cannot be found
342 * @see PropertyUtilsBean#getPropertyEditorClass(Object,String)
343 */
344 public static Class<?> getPropertyEditorClass(final Object bean, final String name)
345 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
346 return PropertyUtilsBean.getInstance().getPropertyEditorClass(bean, name);
347 }
348
349 /**
350 * <p>
351 * Return the Java Class representing the property type of the specified property, or {@code null} if there is no such property for the specified bean.
352 * </p>
353 *
354 * <p>
355 * For more details see {@code PropertyUtilsBean}.
356 * </p>
357 *
358 * @param bean Bean for which a property descriptor is requested
359 * @param name Possibly indexed and/or nested name of the property for which a property descriptor is requested
360 * @return The property type
361 * @throws IllegalAccessException if the caller does not have access to the property accessor method
362 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
363 * @throws IllegalArgumentException if a nested reference to a property returns null
364 * @throws InvocationTargetException if the property accessor method throws an exception
365 * @throws NoSuchMethodException if an accessor method for this property cannot be found
366 * @see PropertyUtilsBean#getPropertyType(Object, String)
367 */
368 public static Class<?> getPropertyType(final Object bean, final String name)
369 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
370 return PropertyUtilsBean.getInstance().getPropertyType(bean, name);
371 }
372
373 /**
374 * <p>
375 * Return an accessible property getter method for this property, if there is one; otherwise return {@code null}.
376 * </p>
377 *
378 * <p>
379 * For more details see {@code PropertyUtilsBean}.
380 * </p>
381 *
382 * @param descriptor Property descriptor to return a getter for
383 * @return The read method
384 * @see PropertyUtilsBean#getReadMethod(PropertyDescriptor)
385 */
386 public static Method getReadMethod(final PropertyDescriptor descriptor) {
387 return PropertyUtilsBean.getInstance().getReadMethod(descriptor);
388 }
389
390 /**
391 * <p>
392 * Return the value of the specified simple property of the specified bean, with no type conversions.
393 * </p>
394 *
395 * <p>
396 * For more details see {@code PropertyUtilsBean}.
397 * </p>
398 *
399 * @param bean Bean whose property is to be extracted
400 * @param name Name of the property to be extracted
401 * @return The property value
402 * @throws IllegalAccessException if the caller does not have access to the property accessor method
403 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
404 * @throws IllegalArgumentException if the property name is nested or indexed
405 * @throws InvocationTargetException if the property accessor method throws an exception
406 * @throws NoSuchMethodException if an accessor method for this property cannot be found
407 * @see PropertyUtilsBean#getSimpleProperty
408 */
409 public static Object getSimpleProperty(final Object bean, final String name)
410 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
411 return PropertyUtilsBean.getInstance().getSimpleProperty(bean, name);
412 }
413
414 /**
415 * <p>
416 * Return an accessible property setter method for this property, if there is one; otherwise return {@code null}.
417 * </p>
418 *
419 * <p>
420 * For more details see {@code PropertyUtilsBean}.
421 * </p>
422 *
423 * @param descriptor Property descriptor to return a setter for
424 * @return The write method
425 * @see PropertyUtilsBean#getWriteMethod(PropertyDescriptor)
426 */
427 public static Method getWriteMethod(final PropertyDescriptor descriptor) {
428 return PropertyUtilsBean.getInstance().getWriteMethod(descriptor);
429 }
430
431 /**
432 * <p>
433 * Return {@code true} if the specified property name identifies a readable property on the specified bean; otherwise, return {@code false}.
434 * </p>
435 *
436 * <p>
437 * For more details see {@code PropertyUtilsBean}.
438 * </p>
439 *
440 * @param bean Bean to be examined (may be a {@link DynaBean}
441 * @param name Property name to be evaluated
442 * @return {@code true} if the property is readable, otherwise {@code false}
443 * @throws IllegalArgumentException if {@code bean} or {@code name</code> is <code>null}
444 * @see PropertyUtilsBean#isReadable
445 * @since 1.6
446 */
447 public static boolean isReadable(final Object bean, final String name) {
448 return PropertyUtilsBean.getInstance().isReadable(bean, name);
449 }
450
451 /**
452 * <p>
453 * Return {@code true} if the specified property name identifies a writable property on the specified bean; otherwise, return {@code false}.
454 * </p>
455 *
456 * <p>
457 * For more details see {@code PropertyUtilsBean}.
458 * </p>
459 *
460 * @param bean Bean to be examined (may be a {@link DynaBean}
461 * @param name Property name to be evaluated
462 * @return {@code true} if the property is writable, otherwise {@code false}
463 * @throws IllegalArgumentException if {@code bean} or {@code name</code> is <code>null}
464 * @see PropertyUtilsBean#isWriteable
465 * @since 1.6
466 */
467 public static boolean isWriteable(final Object bean, final String name) {
468 return PropertyUtilsBean.getInstance().isWriteable(bean, name);
469 }
470
471 /**
472 * Removes the specified {@code BeanIntrospector}.
473 *
474 * @param introspector the {@code BeanIntrospector} to be removed
475 * @return <strong>true</strong> if the {@code BeanIntrospector} existed and could be removed, <strong>false</strong> otherwise
476 * @since 1.9
477 */
478 public static boolean removeBeanIntrospector(final BeanIntrospector introspector) {
479 return PropertyUtilsBean.getInstance().removeBeanIntrospector(introspector);
480 }
481
482 /**
483 * Resets the registered {@link BeanIntrospector} objects to the initial default state.
484 *
485 * @since 1.9
486 */
487 public static void resetBeanIntrospectors() {
488 PropertyUtilsBean.getInstance().resetBeanIntrospectors();
489 }
490
491 /**
492 * <p>
493 * Sets the value of the specified indexed property of the specified bean, with no type conversions.
494 * </p>
495 *
496 * <p>
497 * For more details see {@code PropertyUtilsBean}.
498 * </p>
499 *
500 * @param bean Bean whose property is to be set
501 * @param name Simple property name of the property value to be set
502 * @param index Index of the property value to be set
503 * @param value Value to which the indexed property element is to be set
504 * @throws IndexOutOfBoundsException if the specified index is outside the valid range for the underlying property
505 * @throws IllegalAccessException if the caller does not have access to the property accessor method
506 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
507 * @throws InvocationTargetException if the property accessor method throws an exception
508 * @throws NoSuchMethodException if an accessor method for this property cannot be found
509 * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object)
510 */
511 public static void setIndexedProperty(final Object bean, final String name, final int index, final Object value)
512 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
513 PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, index, value);
514 }
515
516 /**
517 * <p>
518 * Sets the value of the specified indexed property of the specified bean, with no type conversions.
519 * </p>
520 *
521 * <p>
522 * For more details see {@code PropertyUtilsBean}.
523 * </p>
524 *
525 * @param bean Bean whose property is to be modified
526 * @param name {@code propertyname[index]} of the property value to be modified
527 * @param value Value to which the specified property element should be set
528 * @throws IndexOutOfBoundsException if the specified index is outside the valid range for the underlying property
529 * @throws IllegalAccessException if the caller does not have access to the property accessor method
530 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
531 * @throws InvocationTargetException if the property accessor method throws an exception
532 * @throws NoSuchMethodException if an accessor method for this property cannot be found
533 * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object)
534 */
535 public static void setIndexedProperty(final Object bean, final String name, final Object value)
536 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
537 PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, value);
538 }
539
540 /**
541 * <p>
542 * Sets the value of the specified mapped property of the specified bean, with no type conversions.
543 * </p>
544 *
545 * <p>
546 * For more details see {@code PropertyUtilsBean}.
547 * </p>
548 *
549 * @param bean Bean whose property is to be set
550 * @param name {@code propertyname(key)} of the property value to be set
551 * @param value The property value to be set
552 * @throws IllegalAccessException if the caller does not have access to the property accessor method
553 * @throws InvocationTargetException if the property accessor method throws an exception
554 * @throws NoSuchMethodException if an accessor method for this property cannot be found
555 * @see PropertyUtilsBean#setMappedProperty(Object, String, Object)
556 */
557 public static void setMappedProperty(final Object bean, final String name, final Object value)
558 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
559 PropertyUtilsBean.getInstance().setMappedProperty(bean, name, value);
560 }
561
562 /**
563 * <p>
564 * Sets the value of the specified mapped property of the specified bean, with no type conversions.
565 * </p>
566 *
567 * <p>
568 * For more details see {@code PropertyUtilsBean}.
569 * </p>
570 *
571 * @param bean Bean whose property is to be set
572 * @param name Mapped property name of the property value to be set
573 * @param key Key of the property value to be set
574 * @param value The property value to be set
575 * @throws IllegalAccessException if the caller does not have access to the property accessor method
576 * @throws InvocationTargetException if the property accessor method throws an exception
577 * @throws NoSuchMethodException if an accessor method for this property cannot be found
578 * @see PropertyUtilsBean#setMappedProperty(Object, String, String, Object)
579 */
580 public static void setMappedProperty(final Object bean, final String name, final String key, final Object value)
581 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
582 PropertyUtilsBean.getInstance().setMappedProperty(bean, name, key, value);
583 }
584
585 /**
586 * <p>
587 * Sets the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
588 * </p>
589 *
590 * <p>
591 * For more details see {@code PropertyUtilsBean}.
592 * </p>
593 *
594 * @param bean Bean whose property is to be modified
595 * @param name Possibly nested name of the property to be modified
596 * @param value Value to which the property is to be set
597 * @throws IllegalAccessException if the caller does not have access to the property accessor method
598 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
599 * @throws IllegalArgumentException if a nested reference to a property returns null
600 * @throws InvocationTargetException if the property accessor method throws an exception
601 * @throws NoSuchMethodException if an accessor method for this property cannot be found
602 * @see PropertyUtilsBean#setNestedProperty
603 */
604 public static void setNestedProperty(final Object bean, final String name, final Object value)
605 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
606 PropertyUtilsBean.getInstance().setNestedProperty(bean, name, value);
607 }
608
609 /**
610 * <p>
611 * Set the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
612 * </p>
613 *
614 * <p>
615 * For more details see {@code PropertyUtilsBean}.
616 * </p>
617 *
618 * @param bean Bean whose property is to be modified
619 * @param name Possibly indexed and/or nested name of the property to be modified
620 * @param value Value to which this property is to be set
621 * @throws IllegalAccessException if the caller does not have access to the property accessor method
622 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
623 * @throws InvocationTargetException if the property accessor method throws an exception
624 * @throws NoSuchMethodException if an accessor method for this property cannot be found
625 * @see PropertyUtilsBean#setProperty
626 */
627 public static void setProperty(final Object bean, final String name, final Object value)
628 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
629 PropertyUtilsBean.getInstance().setProperty(bean, name, value);
630 }
631
632 /**
633 * <p>
634 * Set the value of the specified simple property of the specified bean, with no type conversions.
635 * </p>
636 *
637 * <p>
638 * For more details see {@code PropertyUtilsBean}.
639 * </p>
640 *
641 * @param bean Bean whose property is to be modified
642 * @param name Name of the property to be modified
643 * @param value Value to which the property should be set
644 * @throws IllegalAccessException if the caller does not have access to the property accessor method
645 * @throws IllegalArgumentException if {@code bean} or {@code name} is null
646 * @throws IllegalArgumentException if the property name is nested or indexed
647 * @throws InvocationTargetException if the property accessor method throws an exception
648 * @throws NoSuchMethodException if an accessor method for this property cannot be found
649 * @see PropertyUtilsBean#setSimpleProperty
650 */
651 public static void setSimpleProperty(final Object bean, final String name, final Object value)
652 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
653 PropertyUtilsBean.getInstance().setSimpleProperty(bean, name, value);
654 }
655
656 private PropertyUtils() {
657 // empty
658 }
659 }