1 /* 2 * Copyright (c) 1997, 2013, 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 26 package com.sun.xml.internal.ws.spi.db; 27 28 import java.lang.reflect.Field; 29 import java.security.AccessController; 30 import java.security.PrivilegedActionException; 31 import java.security.PrivilegedExceptionAction; 32 33 34 /** 35 * FieldGetter gets the value of a field from an instance. 36 * 37 * @author shih-chang.chen@oracle.com 38 * @exclude 39 */ 40 public class FieldGetter extends PropertyGetterBase { 41 42 protected Field field; 43 44 public FieldGetter(Field f) { 45 field = f; 46 type = f.getType(); 47 } 48 49 public Field getField() { 50 return field; 51 } 52 53 static class PrivilegedGetter implements PrivilegedExceptionAction { 54 private Object value; 55 private Field field; 56 private Object instance; 57 public PrivilegedGetter(Field field, Object instance) { 58 super(); 59 this.field = field; 60 this.instance = instance; 61 } 62 public Object run() throws IllegalAccessException { 63 if (!field.isAccessible()) { 64 field.setAccessible(true); 65 } 66 value = field.get(instance); 67 return null; 68 } 69 } 70 71 public Object get(final Object instance) { 72 if (field.isAccessible()) { 73 try { 74 return field.get(instance); 75 } catch (Exception e) { 76 // TODO Auto-generated catch block 77 e.printStackTrace(); 78 } 79 } else { 80 PrivilegedGetter privilegedGetter = new PrivilegedGetter(field, instance); 81 try { 82 AccessController.doPrivileged(privilegedGetter); 83 } catch (PrivilegedActionException e) { 84 // TODO Auto-generated catch block 85 e.printStackTrace(); 86 } 87 return privilegedGetter.value; 88 } 89 return null; 90 } 91 92 public <A> A getAnnotation(Class<A> annotationType) { 93 Class c = annotationType; 94 return (A) field.getAnnotation(c); 95 } 96 } | 1 /* 2 * Copyright (c) 1997, 2014, 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 26 package com.sun.xml.internal.ws.spi.db; 27 28 import java.lang.reflect.Field; 29 import javax.xml.ws.WebServiceException; 30 31 32 /** 33 * FieldGetter gets the value of a field from an instance. 34 * 35 * @author shih-chang.chen@oracle.com 36 * @exclude 37 */ 38 public class FieldGetter extends PropertyGetterBase { 39 40 protected Field field; 41 42 public FieldGetter(Field f) { 43 verifyWrapperType(f.getDeclaringClass()); 44 field = f; 45 type = f.getType(); 46 } 47 48 public Field getField() { 49 return field; 50 } 51 52 public Object get(final Object instance) { 53 try { 54 return field.get(instance); 55 } catch (Exception e) { 56 throw new WebServiceException(e); 57 } 58 } 59 60 public <A> A getAnnotation(Class<A> annotationType) { 61 Class c = annotationType; 62 return (A) field.getAnnotation(c); 63 } 64 } |