All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.internal.jaxb.AccessorFactoryWrapper Maven / Gradle / Ivy

There is a newer version: 4.0.2
Show newest version
/*
 * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Matt MacIvor - 2.4 - initial implementation
package org.eclipse.persistence.internal.jaxb;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.eclipse.persistence.exceptions.JAXBException;
import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;

/**
 * 

Purpose: This class provides a wrapper for an instance of AccessorFactory. * The instance can be from either the internal or public package. This class will * reflectively invoke the createFieldAccessor and createPropertyAccessor methods * on the underlying AccessorFactory to create Accessor instances. *

* @author mmacivor * @since EclipseLink 2.4 * */ public class AccessorFactoryWrapper { private static final String ACCESSOR_FACTORY_CREATE_FIELD_ACCESSOR = "createFieldAccessor"; private static final String ACCESSOR_FACTORY_CREATE_PROPERTY_ACCESSOR = "createPropertyAccessor"; private Object accessorFactory; private Method createFieldAccessorMethod; private Method createPropertyAccessorMethod; public AccessorFactoryWrapper(Object factory) { this.accessorFactory = factory; Class accessorClass = factory.getClass(); try { createPropertyAccessorMethod = PrivilegedAccessHelper.getDeclaredMethod(accessorClass, ACCESSOR_FACTORY_CREATE_PROPERTY_ACCESSOR, new Class[]{Class.class, Method.class, Method.class}); createFieldAccessorMethod = PrivilegedAccessHelper.getDeclaredMethod(accessorClass, ACCESSOR_FACTORY_CREATE_FIELD_ACCESSOR, new Class[]{Class.class, Field.class, boolean.class}); } catch(Exception ex) { throw JAXBException.invalidAccessorFactory(accessorClass, ex); } } public Object createFieldAccessor(Class beanClass, Field field, boolean isReadOnly) { try { return PrivilegedAccessHelper.invokeMethod(createFieldAccessorMethod, accessorFactory, new Object[]{beanClass, field, isReadOnly}); } catch(Exception ex) { throw JAXBException.errorCreatingFieldAccessor(accessorFactory, ex); } } public Object createPropertyAccessor(Class beanClass, Method getMethod, Method setMethod) { try { return PrivilegedAccessHelper.invokeMethod(createPropertyAccessorMethod, accessorFactory, new Object[]{beanClass, getMethod, setMethod}); } catch(Exception ex) { throw JAXBException.errorCreatingPropertyAccessor(accessorFactory, ex); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy