1 /* 2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package com.sun.jmx.mbeanserver; 26 27 import java.lang.reflect.Constructor; 28 import java.lang.reflect.Method; 29 import jdk.internal.misc.JavaBeansAccess; 30 import jdk.internal.misc.SharedSecrets; 31 32 /** 33 * A centralized place for gaining access to java.beans related functionality - 34 * if available. 35 */ 36 class JavaBeansAccessor { 37 static { 38 // ensure that java.beans.Introspector is initialized (if present) 39 // it will fill in the SharedSecrets 40 try { 41 Class.forName("java.beans.Introspector", true, 42 JavaBeansAccessor.class.getClassLoader()); 43 } catch (ClassNotFoundException ignore) { } 44 } 45 46 private static JavaBeansAccess getJavaBeansAccess() { 47 return SharedSecrets.getJavaBeansAccess(); 48 } 49 50 static boolean isAvailable() { 51 return getJavaBeansAccess() != null; 52 } 53 54 /** 55 * Returns the getter method for a property of the given name 56 * @param clazz The JavaBeans class 57 * @param property The property name 58 * @return The resolved property getter name or null 59 * @throws Exception 60 */ 61 static Method getReadMethod(Class<?> clazz, String property) throws Exception { 62 JavaBeansAccess jba = getJavaBeansAccess(); 63 return jba != null ? jba.getReadMethod(clazz, property) : null; 64 } 65 66 /** 67 * Return the <b>value</b> attribute of the associated 68 * <code>@ConstructorProperties</code> annotation if that is present. 69 * @param ctr The constructor to extract the annotation value from 70 * @return The {@code value} attribute of the <code>@ConstructorProperties</code> 71 * annotation or {@code null} if the constructor is not annotated by 72 * this annotation or the annotation is not accessible. 73 */ 74 static String[] getConstructorPropertiesValue(Constructor<?> ctr) { 75 JavaBeansAccess jba = getJavaBeansAccess(); 76 return jba != null ? jba.getConstructorPropertiesValue(ctr) : null; 77 } 78 }