-
Notifications
You must be signed in to change notification settings - Fork 26.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix:make sure attribute exists #4225
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you fix the ci And is the log output more detailed?
|
Thanks. Merged manually to avoid conflicts. |
* make sure attribute exists | ||
*/ | ||
try { | ||
getClass().getField(key); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some attribute does not has a corresponding field, but has a pair of getter/setter methods, e.g. String getInterface()/setInterface(String) of ReferenceConfig.
So it’s better to check if the attribute is writable, see aslo: #8289
protected List<Method> computeAttributedMethods() {
Class<? extends AbstractConfig> cls = this.getClass();
BeanInfo beanInfo = getBeanInfo(cls);
List<Method> methods = new ArrayList<>(beanInfo.getMethodDescriptors().length);
for (MethodDescriptor methodDescriptor : beanInfo.getMethodDescriptors()) {
Method method = methodDescriptor.getMethod();
if (MethodUtils.isGetter(method)) {
// filter non attribute
Parameter parameter = method.getAnnotation(Parameter.class);
if (parameter != null && !parameter.attribute()) {
continue;
}
String propertyName = calculateAttributeFromGetter(method.getName());
// filter non writable property, exclude non property methods, fix #4225
if (!isWritableProperty(beanInfo, propertyName)) {
continue;
}
methods.add(method);
}
}
return methods;
}
What is the purpose of the change
make sure attribute exists
Brief changelog
when dubug or call toString method of AbstractConfig,the field may not exist.For example, when getClass refer to ReferenceBean,it will call getObject() and init method in ReferenceConfig,when it is not initialized,interfaceName is null and throws an Exception, but initialized set to be true.this will lead to service bean cannot be created successfully.
Verifying this change
Follow this checklist to help us incorporate your contribution quickly and easily:
[Dubbo-XXX] Fix UnknownException when host config not exist #XXX
. Each commit in the pull request should have a meaningful subject line and body.mvn clean install -DskipTests=false
&mvn clean test-compile failsafe:integration-test
to make sure unit-test and integration-test pass.