Skip to content
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

Closed
wants to merge 1 commit into from
Closed

fix:make sure attribute exists #4225

wants to merge 1 commit into from

Conversation

jcsxky
Copy link

@jcsxky jcsxky commented May 31, 2019

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:

  • Make sure there is a GITHUB_issue field for the change (usually before you start working on it). Trivial changes like typos do not require a GITHUB issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
  • Format the pull request title like [Dubbo-XXX] Fix UnknownException when host config not exist #XXX. Each commit in the pull request should have a meaningful subject line and body.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add sample in dubbo samples project.
  • Run mvn clean install -DskipTests=false & mvn clean test-compile failsafe:integration-test to make sure unit-test and integration-test pass.
  • If this contribution is large, please follow the Software Donation Guide.

Copy link
Contributor

@Leishunyu Leishunyu left a 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?

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

chickenlj added a commit that referenced this pull request Dec 20, 2019
@chickenlj
Copy link
Contributor

Thanks. Merged manually to avoid conflicts.

@chickenlj chickenlj closed this Dec 20, 2019
chickenlj added a commit that referenced this pull request Dec 20, 2019
* Fixes #4992, endless recursive call when NetUtils method fails.
* Fixes #4225
* make sure attribute exists
*/
try {
getClass().getField(key);
Copy link
Member

@kylixs kylixs Jul 14, 2021

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;
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants