blob: 319fe368732643703eb28d07ae538b5bbacbf4d5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2013 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 v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Matt MacIvor - 2.4 - Initial Implementation
******************************************************************************/
package org.eclipse.persistence.internal.jaxb;
import java.lang.reflect.Method;
import org.eclipse.persistence.exceptions.DescriptorException;
import org.eclipse.persistence.exceptions.JAXBException;
import org.eclipse.persistence.internal.security.PrivilegedAccessHelper;
import org.eclipse.persistence.mappings.AttributeAccessor;
/**
* <p>
* <b>Purpose:</b> Provides a wrapper around an instance of Accessor. Makes reflective
* calls to the nested accessor's get and set methods. The nested accessor can
* come from either the internal or public package.
*
* @author mmacivor
* @since EclipseLink 2.4
*/
public class CustomAccessorAttributeAccessor extends AttributeAccessor {
private Object accessor;
private Method getMethod;
private Method setMethod;
public CustomAccessorAttributeAccessor(Object accessor) {
this.accessor = accessor;
Class[] getMethodParams = new Class[]{Object.class};
Class[] setMethodParams = new Class[]{Object.class, Object.class};
try {
getMethod = PrivilegedAccessHelper.getDeclaredMethod(accessor.getClass(), "get", getMethodParams);
setMethod = PrivilegedAccessHelper.getDeclaredMethod(accessor.getClass(), "set", setMethodParams);
} catch(Exception ex) {
}
}
public Object getAttributeValueFromObject(Object object) throws DescriptorException {
try {
return PrivilegedAccessHelper.invokeMethod(getMethod, accessor, new Object[]{object});
} catch(Exception ex) {
throw JAXBException.errorInvokingAccessor(this.accessor, "get", ex);
}
}
public void setAttributeValueInObject(Object object, Object value) throws DescriptorException {
try {
PrivilegedAccessHelper.invokeMethod(setMethod, accessor, new Object[]{object, value});
} catch(Exception ex) {
throw JAXBException.errorInvokingAccessor(this.accessor, "set", ex);
}
}
}