001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 019package org.apache.commons.beanutils; 020 021import java.beans.PropertyDescriptor; 022import java.lang.reflect.InvocationTargetException; 023import java.lang.reflect.Method; 024import java.util.Map; 025 026import org.apache.commons.collections.FastHashMap; 027 028 029/** 030 * <p>Utility methods for using Java Reflection APIs to facilitate generic 031 * property getter and setter operations on Java objects.</p> 032 * 033 * <p>The implementations for these methods are provided by <code>PropertyUtilsBean</code>. 034 * For more details see {@link PropertyUtilsBean}.</p> 035 * 036 * @version $Id$ 037 * @see PropertyUtilsBean 038 * @see org.apache.commons.beanutils.expression.Resolver 039 */ 040 041public class PropertyUtils { 042 043 044 // ----------------------------------------------------- Manifest Constants 045 046 047 /** 048 * The delimiter that preceeds the zero-relative subscript for an 049 * indexed reference. 050 * 051 * @deprecated The notation used for property name expressions is now 052 * dependant on the {@link org.apache.commons.beanutils.expression.Resolver} 053 * implementation being used. 054 */ 055 @Deprecated 056 public static final char INDEXED_DELIM = '['; 057 058 059 /** 060 * The delimiter that follows the zero-relative subscript for an 061 * indexed reference. 062 * 063 * @deprecated The notation used for property name expressions is now 064 * dependant on the {@link org.apache.commons.beanutils.expression.Resolver} 065 * implementation being used. 066 */ 067 @Deprecated 068 public static final char INDEXED_DELIM2 = ']'; 069 070 071 /** 072 * The delimiter that preceeds the key of a mapped property. 073 * 074 * @deprecated The notation used for property name expressions is now 075 * dependant on the {@link org.apache.commons.beanutils.expression.Resolver} 076 * implementation being used. 077 */ 078 @Deprecated 079 public static final char MAPPED_DELIM = '('; 080 081 082 /** 083 * The delimiter that follows the key of a mapped property. 084 * 085 * @deprecated The notation used for property name expressions is now 086 * dependant on the {@link org.apache.commons.beanutils.expression.Resolver} 087 * implementation being used. 088 */ 089 @Deprecated 090 public static final char MAPPED_DELIM2 = ')'; 091 092 093 /** 094 * The delimiter that separates the components of a nested reference. 095 * 096 * @deprecated The notation used for property name expressions is now 097 * dependant on the {@link org.apache.commons.beanutils.expression.Resolver} 098 * implementation being used. 099 */ 100 @Deprecated 101 public static final char NESTED_DELIM = '.'; 102 103 104 // ------------------------------------------------------- Static Variables 105 106 107 /** 108 * The debugging detail level for this component. 109 * 110 * Note that this static variable will have unexpected side-effects if 111 * this class is deployed in a shared classloader within a container. 112 * However as it is actually completely ignored by this class due to its 113 * deprecated status, it doesn't do any actual harm. 114 * 115 * @deprecated The <code>debug</code> static property is no longer used 116 */ 117 @Deprecated 118 private static int debug = 0; 119 120 /** 121 * The <code>debug</code> static property is no longer used 122 * @return debug property 123 * @deprecated The <code>debug</code> static property is no longer used 124 */ 125 @Deprecated 126 public static int getDebug() { 127 return (debug); 128 } 129 130 /** 131 * The <code>debug</code> static property is no longer used 132 * @param newDebug debug property 133 * @deprecated The <code>debug</code> static property is no longer used 134 */ 135 @Deprecated 136 public static void setDebug(final int newDebug) { 137 debug = newDebug; 138 } 139 140 // --------------------------------------------------------- Public Methods 141 142 143 /** 144 * Clear any cached property descriptors information for all classes 145 * loaded by any class loaders. This is useful in cases where class 146 * loaders are thrown away to implement class reloading. 147 * 148 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 149 * 150 * @see PropertyUtilsBean#clearDescriptors 151 */ 152 public static void clearDescriptors() { 153 154 PropertyUtilsBean.getInstance().clearDescriptors(); 155 156 } 157 158 /** 159 * Resets the registered {@link BeanIntrospector} objects to the initial default 160 * state. 161 * 162 * @since 1.9 163 */ 164 public static void resetBeanIntrospectors() { 165 PropertyUtilsBean.getInstance().resetBeanIntrospectors(); 166 } 167 168 /** 169 * Adds a <code>BeanIntrospector</code>. This object is invoked when the 170 * property descriptors of a class need to be obtained. 171 * 172 * @param introspector the <code>BeanIntrospector</code> to be added (must 173 * not be <b>null</b> 174 * @throws IllegalArgumentException if the argument is <b>null</b> 175 * @since 1.9 176 */ 177 public static void addBeanIntrospector(final BeanIntrospector introspector) { 178 PropertyUtilsBean.getInstance().addBeanIntrospector(introspector); 179 } 180 181 /** 182 * Removes the specified <code>BeanIntrospector</code>. 183 * 184 * @param introspector the <code>BeanIntrospector</code> to be removed 185 * @return <b>true</b> if the <code>BeanIntrospector</code> existed and 186 * could be removed, <b>false</b> otherwise 187 * @since 1.9 188 */ 189 public static boolean removeBeanIntrospector(final BeanIntrospector introspector) { 190 return PropertyUtilsBean.getInstance().removeBeanIntrospector( 191 introspector); 192 } 193 194 /** 195 * <p>Copy property values from the "origin" bean to the "destination" bean 196 * for all cases where the property names are the same (even though the 197 * actual getter and setter methods might have been customized via 198 * <code>BeanInfo</code> classes).</p> 199 * 200 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 201 * 202 * @param dest Destination bean whose properties are modified 203 * @param orig Origin bean whose properties are retrieved 204 * 205 * @throws IllegalAccessException if the caller does not have 206 * access to the property accessor method 207 * @throws IllegalArgumentException if the <code>dest</code> or 208 * <code>orig</code> argument is null 209 * @throws InvocationTargetException if the property accessor method 210 * throws an exception 211 * @throws NoSuchMethodException if an accessor method for this 212 * propety cannot be found 213 * @see PropertyUtilsBean#copyProperties 214 */ 215 public static void copyProperties(final Object dest, final Object orig) 216 throws IllegalAccessException, InvocationTargetException, 217 NoSuchMethodException { 218 219 PropertyUtilsBean.getInstance().copyProperties(dest, orig); 220 } 221 222 223 /** 224 * <p>Return the entire set of properties for which the specified bean 225 * provides a read method.</p> 226 * 227 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 228 * 229 * @param bean Bean whose properties are to be extracted 230 * @return The set of properties for the bean 231 * 232 * @throws IllegalAccessException if the caller does not have 233 * access to the property accessor method 234 * @throws IllegalArgumentException if <code>bean</code> is null 235 * @throws InvocationTargetException if the property accessor method 236 * throws an exception 237 * @throws NoSuchMethodException if an accessor method for this 238 * propety cannot be found 239 * @see PropertyUtilsBean#describe 240 */ 241 public static Map<String, Object> describe(final Object bean) 242 throws IllegalAccessException, InvocationTargetException, 243 NoSuchMethodException { 244 245 return (PropertyUtilsBean.getInstance().describe(bean)); 246 247 } 248 249 250 /** 251 * <p>Return the value of the specified indexed property of the specified 252 * bean, with no type conversions.</p> 253 * 254 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 255 * 256 * @param bean Bean whose property is to be extracted 257 * @param name <code>propertyname[index]</code> of the property value 258 * to be extracted 259 * @return the indexed property value 260 * 261 * @throws IndexOutOfBoundsException if the specified index 262 * is outside the valid range for the underlying property 263 * @throws IllegalAccessException if the caller does not have 264 * access to the property accessor method 265 * @throws IllegalArgumentException if <code>bean</code> or 266 * <code>name</code> is null 267 * @throws InvocationTargetException if the property accessor method 268 * throws an exception 269 * @throws NoSuchMethodException if an accessor method for this 270 * propety cannot be found 271 * @see PropertyUtilsBean#getIndexedProperty(Object,String) 272 */ 273 public static Object getIndexedProperty(final Object bean, final String name) 274 throws IllegalAccessException, InvocationTargetException, 275 NoSuchMethodException { 276 277 return (PropertyUtilsBean.getInstance().getIndexedProperty(bean, name)); 278 279 } 280 281 282 /** 283 * <p>Return the value of the specified indexed property of the specified 284 * bean, with no type conversions.</p> 285 * 286 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 287 * 288 * @param bean Bean whose property is to be extracted 289 * @param name Simple property name of the property value to be extracted 290 * @param index Index of the property value to be extracted 291 * @return the indexed property value 292 * 293 * @throws IndexOutOfBoundsException if the specified index 294 * is outside the valid range for the underlying property 295 * @throws IllegalAccessException if the caller does not have 296 * access to the property accessor method 297 * @throws IllegalArgumentException if <code>bean</code> or 298 * <code>name</code> is null 299 * @throws InvocationTargetException if the property accessor method 300 * throws an exception 301 * @throws NoSuchMethodException if an accessor method for this 302 * propety cannot be found 303 * @see PropertyUtilsBean#getIndexedProperty(Object,String, int) 304 */ 305 public static Object getIndexedProperty(final Object bean, 306 final String name, final int index) 307 throws IllegalAccessException, InvocationTargetException, 308 NoSuchMethodException { 309 310 return (PropertyUtilsBean.getInstance().getIndexedProperty(bean, name, index)); 311 } 312 313 314 /** 315 * <p>Return the value of the specified mapped property of the 316 * specified bean, with no type conversions.</p> 317 * 318 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 319 * 320 * @param bean Bean whose property is to be extracted 321 * @param name <code>propertyname(key)</code> of the property value 322 * to be extracted 323 * @return the mapped property value 324 * 325 * @throws IllegalAccessException if the caller does not have 326 * access to the property accessor method 327 * @throws InvocationTargetException if the property accessor method 328 * throws an exception 329 * @throws NoSuchMethodException if an accessor method for this 330 * propety cannot be found 331 * @see PropertyUtilsBean#getMappedProperty(Object,String) 332 */ 333 public static Object getMappedProperty(final Object bean, final String name) 334 throws IllegalAccessException, InvocationTargetException, 335 NoSuchMethodException { 336 337 return (PropertyUtilsBean.getInstance().getMappedProperty(bean, name)); 338 339 } 340 341 342 /** 343 * <p>Return the value of the specified mapped property of the specified 344 * bean, with no type conversions.</p> 345 * 346 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 347 * 348 * @param bean Bean whose property is to be extracted 349 * @param name Mapped property name of the property value to be extracted 350 * @param key Key of the property value to be extracted 351 * @return the mapped property value 352 * 353 * @throws IllegalAccessException if the caller does not have 354 * access to the property accessor method 355 * @throws InvocationTargetException if the property accessor method 356 * throws an exception 357 * @throws NoSuchMethodException if an accessor method for this 358 * propety cannot be found 359 * @see PropertyUtilsBean#getMappedProperty(Object,String, String) 360 */ 361 public static Object getMappedProperty(final Object bean, 362 final String name, final String key) 363 throws IllegalAccessException, InvocationTargetException, 364 NoSuchMethodException { 365 366 return PropertyUtilsBean.getInstance().getMappedProperty(bean, name, key); 367 368 } 369 370 371 /** 372 * <p>Return the mapped property descriptors for this bean class.</p> 373 * 374 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 375 * 376 * @param beanClass Bean class to be introspected 377 * @return the mapped property descriptors 378 * @see PropertyUtilsBean#getMappedPropertyDescriptors(Class) 379 * @deprecated This method should not be exposed 380 */ 381 @Deprecated 382 public static FastHashMap getMappedPropertyDescriptors(final Class<?> beanClass) { 383 384 return PropertyUtilsBean.getInstance().getMappedPropertyDescriptors(beanClass); 385 386 } 387 388 389 /** 390 * <p>Return the mapped property descriptors for this bean.</p> 391 * 392 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 393 * 394 * @param bean Bean to be introspected 395 * @return the mapped property descriptors 396 * @see PropertyUtilsBean#getMappedPropertyDescriptors(Object) 397 * @deprecated This method should not be exposed 398 */ 399 @Deprecated 400 public static FastHashMap getMappedPropertyDescriptors(final Object bean) { 401 402 return PropertyUtilsBean.getInstance().getMappedPropertyDescriptors(bean); 403 404 } 405 406 407 /** 408 * <p>Return the value of the (possibly nested) property of the specified 409 * name, for the specified bean, with no type conversions.</p> 410 * 411 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 412 * 413 * @param bean Bean whose property is to be extracted 414 * @param name Possibly nested name of the property to be extracted 415 * @return the nested property value 416 * 417 * @throws IllegalAccessException if the caller does not have 418 * access to the property accessor method 419 * @throws IllegalArgumentException if <code>bean</code> or 420 * <code>name</code> is null 421 * @throws NestedNullException if a nested reference to a 422 * property returns null 423 * @throws InvocationTargetException 424 * if the property accessor method throws an exception 425 * @throws NoSuchMethodException if an accessor method for this 426 * propety cannot be found 427 * @see PropertyUtilsBean#getNestedProperty 428 */ 429 public static Object getNestedProperty(final Object bean, final String name) 430 throws IllegalAccessException, InvocationTargetException, 431 NoSuchMethodException { 432 433 return PropertyUtilsBean.getInstance().getNestedProperty(bean, name); 434 435 } 436 437 438 /** 439 * <p>Return the value of the specified property of the specified bean, 440 * no matter which property reference format is used, with no 441 * type conversions.</p> 442 * 443 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 444 * 445 * @param bean Bean whose property is to be extracted 446 * @param name Possibly indexed and/or nested name of the property 447 * to be extracted 448 * @return the property value 449 * 450 * @throws IllegalAccessException if the caller does not have 451 * access to the property accessor method 452 * @throws IllegalArgumentException if <code>bean</code> or 453 * <code>name</code> is null 454 * @throws InvocationTargetException if the property accessor method 455 * throws an exception 456 * @throws NoSuchMethodException if an accessor method for this 457 * propety cannot be found 458 * @see PropertyUtilsBean#getProperty 459 */ 460 public static Object getProperty(final Object bean, final String name) 461 throws IllegalAccessException, InvocationTargetException, 462 NoSuchMethodException { 463 464 return (PropertyUtilsBean.getInstance().getProperty(bean, name)); 465 466 } 467 468 469 /** 470 * <p>Retrieve the property descriptor for the specified property of the 471 * specified bean, or return <code>null</code> if there is no such 472 * descriptor.</p> 473 * 474 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 475 * 476 * @param bean Bean for which a property descriptor is requested 477 * @param name Possibly indexed and/or nested name of the property for 478 * which a property descriptor is requested 479 * @return the property descriptor 480 * 481 * @throws IllegalAccessException if the caller does not have 482 * access to the property accessor method 483 * @throws IllegalArgumentException if <code>bean</code> or 484 * <code>name</code> is null 485 * @throws IllegalArgumentException if a nested reference to a 486 * property returns null 487 * @throws InvocationTargetException if the property accessor method 488 * throws an exception 489 * @throws NoSuchMethodException if an accessor method for this 490 * propety cannot be found 491 * @see PropertyUtilsBean#getPropertyDescriptor 492 */ 493 public static PropertyDescriptor getPropertyDescriptor(final Object bean, 494 final String name) 495 throws IllegalAccessException, InvocationTargetException, 496 NoSuchMethodException { 497 498 return PropertyUtilsBean.getInstance().getPropertyDescriptor(bean, name); 499 500 } 501 502 503 /** 504 * <p>Retrieve the property descriptors for the specified class, 505 * introspecting and caching them the first time a particular bean class 506 * is encountered.</p> 507 * 508 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 509 * 510 * @param beanClass Bean class for which property descriptors are requested 511 * @return the property descriptors 512 * @throws IllegalArgumentException if <code>beanClass</code> is null 513 * @see PropertyUtilsBean#getPropertyDescriptors(Class) 514 */ 515 public static PropertyDescriptor[] 516 getPropertyDescriptors(final Class<?> beanClass) { 517 518 return PropertyUtilsBean.getInstance().getPropertyDescriptors(beanClass); 519 520 } 521 522 523 /** 524 * <p>Retrieve the property descriptors for the specified bean, 525 * introspecting and caching them the first time a particular bean class 526 * is encountered.</p> 527 * 528 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 529 * 530 * @param bean Bean for which property descriptors are requested 531 * @return the property descriptors 532 * @throws IllegalArgumentException if <code>bean</code> is null 533 * @see PropertyUtilsBean#getPropertyDescriptors(Object) 534 */ 535 public static PropertyDescriptor[] getPropertyDescriptors(final Object bean) { 536 537 return PropertyUtilsBean.getInstance().getPropertyDescriptors(bean); 538 539 } 540 541 542 /** 543 * <p>Return the Java Class repesenting the property editor class that has 544 * been registered for this property (if any).</p> 545 * 546 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 547 * 548 * @param bean Bean for which a property descriptor is requested 549 * @param name Possibly indexed and/or nested name of the property for 550 * which a property descriptor is requested 551 * @return the property editor class 552 * 553 * @throws IllegalAccessException if the caller does not have 554 * access to the property accessor method 555 * @throws IllegalArgumentException if <code>bean</code> or 556 * <code>name</code> is null 557 * @throws IllegalArgumentException if a nested reference to a 558 * property returns null 559 * @throws InvocationTargetException if the property accessor method 560 * throws an exception 561 * @throws NoSuchMethodException if an accessor method for this 562 * propety cannot be found 563 * @see PropertyUtilsBean#getPropertyEditorClass(Object,String) 564 */ 565 public static Class<?> getPropertyEditorClass(final Object bean, final String name) 566 throws IllegalAccessException, InvocationTargetException, 567 NoSuchMethodException { 568 569 return PropertyUtilsBean.getInstance().getPropertyEditorClass(bean, name); 570 571 } 572 573 574 /** 575 * <p>Return the Java Class representing the property type of the specified 576 * property, or <code>null</code> if there is no such property for the 577 * specified bean.</p> 578 * 579 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 580 * 581 * @param bean Bean for which a property descriptor is requested 582 * @param name Possibly indexed and/or nested name of the property for 583 * which a property descriptor is requested 584 * @return The property type 585 * 586 * @throws IllegalAccessException if the caller does not have 587 * access to the property accessor method 588 * @throws IllegalArgumentException if <code>bean</code> or 589 * <code>name</code> is null 590 * @throws IllegalArgumentException if a nested reference to a 591 * property returns null 592 * @throws InvocationTargetException if the property accessor method 593 * throws an exception 594 * @throws NoSuchMethodException if an accessor method for this 595 * propety cannot be found 596 * @see PropertyUtilsBean#getPropertyType(Object, String) 597 */ 598 public static Class<?> getPropertyType(final Object bean, final String name) 599 throws IllegalAccessException, InvocationTargetException, 600 NoSuchMethodException { 601 602 return PropertyUtilsBean.getInstance().getPropertyType(bean, name); 603 } 604 605 606 /** 607 * <p>Return an accessible property getter method for this property, 608 * if there is one; otherwise return <code>null</code>.</p> 609 * 610 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 611 * 612 * @param descriptor Property descriptor to return a getter for 613 * @return The read method 614 * @see PropertyUtilsBean#getReadMethod(PropertyDescriptor) 615 */ 616 public static Method getReadMethod(final PropertyDescriptor descriptor) { 617 618 return (PropertyUtilsBean.getInstance().getReadMethod(descriptor)); 619 620 } 621 622 623 /** 624 * <p>Return the value of the specified simple property of the specified 625 * bean, with no type conversions.</p> 626 * 627 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 628 * 629 * @param bean Bean whose property is to be extracted 630 * @param name Name of the property to be extracted 631 * @return The property value 632 * 633 * @throws IllegalAccessException if the caller does not have 634 * access to the property accessor method 635 * @throws IllegalArgumentException if <code>bean</code> or 636 * <code>name</code> is null 637 * @throws IllegalArgumentException if the property name 638 * is nested or indexed 639 * @throws InvocationTargetException if the property accessor method 640 * throws an exception 641 * @throws NoSuchMethodException if an accessor method for this 642 * propety cannot be found 643 * @see PropertyUtilsBean#getSimpleProperty 644 */ 645 public static Object getSimpleProperty(final Object bean, final String name) 646 throws IllegalAccessException, InvocationTargetException, 647 NoSuchMethodException { 648 649 return PropertyUtilsBean.getInstance().getSimpleProperty(bean, name); 650 651 } 652 653 654 /** 655 * <p>Return an accessible property setter method for this property, 656 * if there is one; otherwise return <code>null</code>.</p> 657 * 658 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 659 * 660 * @param descriptor Property descriptor to return a setter for 661 * @return The write method 662 * @see PropertyUtilsBean#getWriteMethod(PropertyDescriptor) 663 */ 664 public static Method getWriteMethod(final PropertyDescriptor descriptor) { 665 666 return PropertyUtilsBean.getInstance().getWriteMethod(descriptor); 667 668 } 669 670 671 /** 672 * <p>Return <code>true</code> if the specified property name identifies 673 * a readable property on the specified bean; otherwise, return 674 * <code>false</code>.</p> 675 * 676 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 677 * 678 * @param bean Bean to be examined (may be a {@link DynaBean} 679 * @param name Property name to be evaluated 680 * @return <code>true</code> if the property is readable, 681 * otherwise <code>false</code> 682 * 683 * @throws IllegalArgumentException if <code>bean</code> 684 * or <code>name</code> is <code>null</code> 685 * @see PropertyUtilsBean#isReadable 686 * @since BeanUtils 1.6 687 */ 688 public static boolean isReadable(final Object bean, final String name) { 689 690 return PropertyUtilsBean.getInstance().isReadable(bean, name); 691 } 692 693 694 /** 695 * <p>Return <code>true</code> if the specified property name identifies 696 * a writeable property on the specified bean; otherwise, return 697 * <code>false</code>.</p> 698 * 699 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 700 * 701 * @param bean Bean to be examined (may be a {@link DynaBean} 702 * @param name Property name to be evaluated 703 * @return <code>true</code> if the property is writeable, 704 * otherwise <code>false</code> 705 * 706 * @throws IllegalArgumentException if <code>bean</code> 707 * or <code>name</code> is <code>null</code> 708 * @see PropertyUtilsBean#isWriteable 709 * @since BeanUtils 1.6 710 */ 711 public static boolean isWriteable(final Object bean, final String name) { 712 713 return PropertyUtilsBean.getInstance().isWriteable(bean, name); 714 } 715 716 717 /** 718 * <p>Sets the value of the specified indexed property of the specified 719 * bean, with no type conversions.</p> 720 * 721 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 722 * 723 * @param bean Bean whose property is to be modified 724 * @param name <code>propertyname[index]</code> of the property value 725 * to be modified 726 * @param value Value to which the specified property element 727 * should be set 728 * 729 * @throws IndexOutOfBoundsException if the specified index 730 * is outside the valid range for the underlying property 731 * @throws IllegalAccessException if the caller does not have 732 * access to the property accessor method 733 * @throws IllegalArgumentException if <code>bean</code> or 734 * <code>name</code> is null 735 * @throws InvocationTargetException if the property accessor method 736 * throws an exception 737 * @throws NoSuchMethodException if an accessor method for this 738 * propety cannot be found 739 * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object) 740 */ 741 public static void setIndexedProperty(final Object bean, final String name, 742 final Object value) 743 throws IllegalAccessException, InvocationTargetException, 744 NoSuchMethodException { 745 746 PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, value); 747 748 } 749 750 751 /** 752 * <p>Sets the value of the specified indexed property of the specified 753 * bean, with no type conversions.</p> 754 * 755 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 756 * 757 * @param bean Bean whose property is to be set 758 * @param name Simple property name of the property value to be set 759 * @param index Index of the property value to be set 760 * @param value Value to which the indexed property element is to be set 761 * 762 * @throws IndexOutOfBoundsException if the specified index 763 * is outside the valid range for the underlying property 764 * @throws IllegalAccessException if the caller does not have 765 * access to the property accessor method 766 * @throws IllegalArgumentException if <code>bean</code> or 767 * <code>name</code> is null 768 * @throws InvocationTargetException if the property accessor method 769 * throws an exception 770 * @throws NoSuchMethodException if an accessor method for this 771 * propety cannot be found 772 * @see PropertyUtilsBean#setIndexedProperty(Object, String, Object) 773 */ 774 public static void setIndexedProperty(final Object bean, final String name, 775 final int index, final Object value) 776 throws IllegalAccessException, InvocationTargetException, 777 NoSuchMethodException { 778 779 PropertyUtilsBean.getInstance().setIndexedProperty(bean, name, index, value); 780 } 781 782 783 /** 784 * <p>Sets the value of the specified mapped property of the 785 * specified bean, with no type conversions.</p> 786 * 787 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 788 * 789 * @param bean Bean whose property is to be set 790 * @param name <code>propertyname(key)</code> of the property value 791 * to be set 792 * @param value The property value to be set 793 * 794 * @throws IllegalAccessException if the caller does not have 795 * access to the property accessor method 796 * @throws InvocationTargetException if the property accessor method 797 * throws an exception 798 * @throws NoSuchMethodException if an accessor method for this 799 * propety cannot be found 800 * @see PropertyUtilsBean#setMappedProperty(Object, String, Object) 801 */ 802 public static void setMappedProperty(final Object bean, final String name, 803 final Object value) 804 throws IllegalAccessException, InvocationTargetException, 805 NoSuchMethodException { 806 807 PropertyUtilsBean.getInstance().setMappedProperty(bean, name, value); 808 } 809 810 811 /** 812 * <p>Sets the value of the specified mapped property of the specified 813 * bean, with no type conversions.</p> 814 * 815 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 816 * 817 * @param bean Bean whose property is to be set 818 * @param name Mapped property name of the property value to be set 819 * @param key Key of the property value to be set 820 * @param value The property value to be set 821 * 822 * @throws IllegalAccessException if the caller does not have 823 * access to the property accessor method 824 * @throws InvocationTargetException if the property accessor method 825 * throws an exception 826 * @throws NoSuchMethodException if an accessor method for this 827 * propety cannot be found 828 * @see PropertyUtilsBean#setMappedProperty(Object, String, String, Object) 829 */ 830 public static void setMappedProperty(final Object bean, final String name, 831 final String key, final Object value) 832 throws IllegalAccessException, InvocationTargetException, 833 NoSuchMethodException { 834 835 PropertyUtilsBean.getInstance().setMappedProperty(bean, name, key, value); 836 } 837 838 839 /** 840 * <p>Sets the value of the (possibly nested) property of the specified 841 * name, for the specified bean, with no type conversions.</p> 842 * 843 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 844 * 845 * @param bean Bean whose property is to be modified 846 * @param name Possibly nested name of the property to be modified 847 * @param value Value to which the property is to be set 848 * 849 * @throws IllegalAccessException if the caller does not have 850 * access to the property accessor method 851 * @throws IllegalArgumentException if <code>bean</code> or 852 * <code>name</code> is null 853 * @throws IllegalArgumentException if a nested reference to a 854 * property returns null 855 * @throws InvocationTargetException if the property accessor method 856 * throws an exception 857 * @throws NoSuchMethodException if an accessor method for this 858 * propety cannot be found 859 * @see PropertyUtilsBean#setNestedProperty 860 */ 861 public static void setNestedProperty(final Object bean, 862 final String name, final Object value) 863 throws IllegalAccessException, InvocationTargetException, 864 NoSuchMethodException { 865 866 PropertyUtilsBean.getInstance().setNestedProperty(bean, name, value); 867 } 868 869 870 /** 871 * <p>Set the value of the specified property of the specified bean, 872 * no matter which property reference format is used, with no 873 * type conversions.</p> 874 * 875 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 876 * 877 * @param bean Bean whose property is to be modified 878 * @param name Possibly indexed and/or nested name of the property 879 * to be modified 880 * @param value Value to which this property is to be set 881 * 882 * @throws IllegalAccessException if the caller does not have 883 * access to the property accessor method 884 * @throws IllegalArgumentException if <code>bean</code> or 885 * <code>name</code> is null 886 * @throws InvocationTargetException if the property accessor method 887 * throws an exception 888 * @throws NoSuchMethodException if an accessor method for this 889 * propety cannot be found 890 * @see PropertyUtilsBean#setProperty 891 */ 892 public static void setProperty(final Object bean, final String name, final Object value) 893 throws IllegalAccessException, InvocationTargetException, 894 NoSuchMethodException { 895 896 PropertyUtilsBean.getInstance().setProperty(bean, name, value); 897 898 } 899 900 901 /** 902 * <p>Set the value of the specified simple property of the specified bean, 903 * with no type conversions.</p> 904 * 905 * <p>For more details see <code>PropertyUtilsBean</code>.</p> 906 * 907 * @param bean Bean whose property is to be modified 908 * @param name Name of the property to be modified 909 * @param value Value to which the property should be set 910 * 911 * @throws IllegalAccessException if the caller does not have 912 * access to the property accessor method 913 * @throws IllegalArgumentException if <code>bean</code> or 914 * <code>name</code> is null 915 * @throws IllegalArgumentException if the property name is 916 * nested or indexed 917 * @throws InvocationTargetException if the property accessor method 918 * throws an exception 919 * @throws NoSuchMethodException if an accessor method for this 920 * propety cannot be found 921 * @see PropertyUtilsBean#setSimpleProperty 922 */ 923 public static void setSimpleProperty(final Object bean, 924 final String name, final Object value) 925 throws IllegalAccessException, InvocationTargetException, 926 NoSuchMethodException { 927 928 PropertyUtilsBean.getInstance().setSimpleProperty(bean, name, value); 929 } 930 931 932}