Search code examples
javaproxycglib

Exception trying to change a CGLib proxy field value


I created a CGLib dynamic proxy of a class, but when I try to access any field declared in the original class, I obtain java.lang.NoSuchFieldException. I need to obtain the field in order to change its value.

By the way, this is the class the proxy is based on:

public class Person {

    private String name;
    ....
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    ...
}

And this is the code snippet (inside the "intercept" method of the "MethodInterceptor") that is raising the mentioned exception (more specifically the first line):

public Object intercept(Object instance, Method jdkMethod, Object[] args, MethodProxy method) throws Throwable {
...
Field field = instance.getClass().getField("name");
field.setAccessible(true);
field.set(instance, "foo");
....

Do you know any other way to access the needed field or change its value?

Thanks.


Solution

  • Apparently, a CGLib proxy is a subclass of the original class. So, the following code worked well:

    Field field = instance.getClass().getSuperclass().getDeclaredField("name");