Search in sources :

Example 1 with RpcBindingMethodInfo

use of com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo in project sofa-boot by sofastack.

the class ConsumerConfigHelper method convertToMethodConfig.

private List<MethodConfig> convertToMethodConfig(List<RpcBindingMethodInfo> methodInfos) {
    List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>();
    if (!CollectionUtils.isEmpty(methodInfos)) {
        for (RpcBindingMethodInfo info : methodInfos) {
            String name = info.getName();
            Integer timeout = info.getTimeout();
            Integer retries = info.getRetries();
            String type = info.getType();
            Object callbackHandler = info.getCallbackHandler();
            MethodConfig methodConfig = new MethodConfig();
            methodConfig.setName(name);
            if (timeout != null) {
                methodConfig.setTimeout(timeout);
            }
            if (retries != null) {
                methodConfig.setRetries(retries);
            }
            if (StringUtils.hasText(type)) {
                methodConfig.setInvokeType(type);
            }
            if (callbackHandler != null) {
                if (callbackHandler instanceof SofaResponseCallback) {
                    methodConfig.setOnReturn((SofaResponseCallback) callbackHandler);
                } else {
                    throw new SofaBootRpcRuntimeException("callback handler must implement SofaResponseCallback [" + callbackHandler + "]");
                }
            }
            methodConfigs.add(methodConfig);
        }
    }
    return methodConfigs;
}
Also used : MethodConfig(com.alipay.sofa.rpc.config.MethodConfig) SofaBootRpcRuntimeException(com.alipay.sofa.rpc.boot.common.SofaBootRpcRuntimeException) ArrayList(java.util.ArrayList) SofaResponseCallback(com.alipay.sofa.rpc.core.invoke.SofaResponseCallback) RpcBindingMethodInfo(com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)

Example 2 with RpcBindingMethodInfo

use of com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo in project sofa-boot by sofastack.

the class RpcBindingConverter method parseMethod.

protected void parseMethod(List<Element> elements, RpcBindingParam param) {
    if (CollectionUtils.isEmpty(elements)) {
        return;
    }
    List<RpcBindingMethodInfo> boltBindingMethodInfos = new ArrayList<RpcBindingMethodInfo>();
    for (Element element : elements) {
        if (element.getNodeType() == Node.ELEMENT_NODE && element.getLocalName().equals(RpcBindingXmlConstants.TAG_METHOD)) {
            String name = element.getAttribute(RpcBindingXmlConstants.TAG_NAME);
            Integer timeout = SofaBootRpcParserUtil.parseInteger(element.getAttribute(RpcBindingXmlConstants.TAG_TIMEOUT));
            Integer retries = SofaBootRpcParserUtil.parseInteger(element.getAttribute(RpcBindingXmlConstants.TAG_RETRIES));
            String type = element.getAttribute(RpcBindingXmlConstants.TAG_TYPE);
            RpcBindingMethodInfo boltBindingMethodInfo = new RpcBindingMethodInfo();
            if (StringUtils.hasText(name)) {
                boltBindingMethodInfo.setName(name);
            }
            if (timeout != null) {
                boltBindingMethodInfo.setTimeout(timeout);
            }
            if (retries != null) {
                boltBindingMethodInfo.setRetries(retries);
            }
            if (StringUtils.hasText(type)) {
                boltBindingMethodInfo.setType(type);
            }
            if (type.equalsIgnoreCase(RpcBindingXmlConstants.TYPE_CALLBACK)) {
                String callbackRef = element.getAttribute(RpcBindingXmlConstants.TAG_CALLBACK_REF);
                String callbackClass = element.getAttribute(RpcBindingXmlConstants.TAG_CALLBACK_CLASS);
                boltBindingMethodInfo.setCallbackRef(callbackRef);
                boltBindingMethodInfo.setCallbackClass(callbackClass);
            }
            boltBindingMethodInfos.add(boltBindingMethodInfo);
        }
    }
    param.setMethodInfos(boltBindingMethodInfos);
}
Also used : Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) RpcBindingMethodInfo(com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)

Example 3 with RpcBindingMethodInfo

use of com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo in project sofa-boot by sofastack.

the class RpcBindingConverter method setCallback.

protected void setCallback(RpcBindingParam bindingParam, BindingConverterContext bindingConverterContext) {
    // global
    if (bindingParam.getCallbackHandler() == null) {
        Object globalCallbackHandler = SofaBootRpcSpringUtil.getSpringBean(bindingParam.getCallbackRef(), bindingParam.getCallbackClass(), bindingConverterContext.getApplicationContext(), bindingConverterContext.getAppClassLoader(), bindingConverterContext.getAppName());
        if (globalCallbackHandler != null) {
            bindingParam.setCallbackHandler(globalCallbackHandler);
        }
    }
    // method
    if (!CollectionUtils.isEmpty(bindingParam.getMethodInfos())) {
        for (RpcBindingMethodInfo methodInfo : bindingParam.getMethodInfos()) {
            Object methodCallbackHandler = methodInfo.getCallbackHandler();
            if (methodCallbackHandler == null) {
                methodCallbackHandler = SofaBootRpcSpringUtil.getSpringBean(methodInfo.getCallbackRef(), methodInfo.getCallbackClass(), bindingConverterContext.getApplicationContext(), bindingConverterContext.getAppClassLoader(), bindingConverterContext.getAppName());
                methodInfo.setCallbackHandler(methodCallbackHandler);
            }
        }
    }
}
Also used : RpcBindingMethodInfo(com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)

Example 4 with RpcBindingMethodInfo

use of com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo in project sofa-boot by alipay.

the class ConsumerConfigHelper method convertToMethodConfig.

private List<MethodConfig> convertToMethodConfig(List<RpcBindingMethodInfo> methodInfos) {
    List<MethodConfig> methodConfigs = new ArrayList<MethodConfig>();
    if (!CollectionUtils.isEmpty(methodInfos)) {
        for (RpcBindingMethodInfo info : methodInfos) {
            String name = info.getName();
            Integer timeout = info.getTimeout();
            Integer retries = info.getRetries();
            String type = info.getType();
            Object callbackHandler = info.getCallbackHandler();
            MethodConfig methodConfig = new MethodConfig();
            methodConfig.setName(name);
            if (timeout != null) {
                methodConfig.setTimeout(timeout);
            }
            if (retries != null) {
                methodConfig.setRetries(retries);
            }
            if (StringUtils.hasText(type)) {
                methodConfig.setInvokeType(type);
            }
            if (callbackHandler != null) {
                if (callbackHandler instanceof SofaResponseCallback) {
                    methodConfig.setOnReturn((SofaResponseCallback) callbackHandler);
                } else {
                    throw new SofaBootRpcRuntimeException("callback handler must implement SofaResponseCallback [" + callbackHandler + "]");
                }
            }
            methodConfigs.add(methodConfig);
        }
    }
    return methodConfigs;
}
Also used : MethodConfig(com.alipay.sofa.rpc.config.MethodConfig) SofaBootRpcRuntimeException(com.alipay.sofa.rpc.boot.common.SofaBootRpcRuntimeException) ArrayList(java.util.ArrayList) SofaResponseCallback(com.alipay.sofa.rpc.core.invoke.SofaResponseCallback) RpcBindingMethodInfo(com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)

Example 5 with RpcBindingMethodInfo

use of com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo in project sofa-boot by alipay.

the class RpcBindingConverter method setCallback.

protected void setCallback(RpcBindingParam bindingParam, BindingConverterContext bindingConverterContext) {
    // global
    if (bindingParam.getCallbackHandler() == null) {
        Object globalCallbackHandler = SofaBootRpcSpringUtil.getSpringBean(bindingParam.getCallbackRef(), bindingParam.getCallbackClass(), bindingConverterContext.getApplicationContext(), bindingConverterContext.getAppClassLoader(), bindingConverterContext.getAppName());
        if (globalCallbackHandler != null) {
            bindingParam.setCallbackHandler(globalCallbackHandler);
        }
    }
    // method
    if (!CollectionUtils.isEmpty(bindingParam.getMethodInfos())) {
        for (RpcBindingMethodInfo methodInfo : bindingParam.getMethodInfos()) {
            Object methodCallbackHandler = methodInfo.getCallbackHandler();
            if (methodCallbackHandler == null) {
                methodCallbackHandler = SofaBootRpcSpringUtil.getSpringBean(methodInfo.getCallbackRef(), methodInfo.getCallbackClass(), bindingConverterContext.getApplicationContext(), bindingConverterContext.getAppClassLoader(), bindingConverterContext.getAppName());
                methodInfo.setCallbackHandler(methodCallbackHandler);
            }
        }
    }
}
Also used : RpcBindingMethodInfo(com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)

Aggregations

RpcBindingMethodInfo (com.alipay.sofa.rpc.boot.runtime.binding.RpcBindingMethodInfo)12 ArrayList (java.util.ArrayList)8 MethodConfig (com.alipay.sofa.rpc.config.MethodConfig)4 SofaBootRpcRuntimeException (com.alipay.sofa.rpc.boot.common.SofaBootRpcRuntimeException)2 BoltBindingConverter (com.alipay.sofa.rpc.boot.runtime.converter.BoltBindingConverter)2 RpcBindingConverter (com.alipay.sofa.rpc.boot.runtime.converter.RpcBindingConverter)2 SofaResponseCallback (com.alipay.sofa.rpc.core.invoke.SofaResponseCallback)2 SofaMethod (com.alipay.sofa.runtime.api.annotation.SofaMethod)2 SofaReference (com.alipay.sofa.runtime.api.annotation.SofaReference)2 Test (org.junit.Test)2 Element (org.w3c.dom.Element)2