diff --git a/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java b/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java index fc1e1bf..bbc7417 100644 --- a/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java +++ b/src/main/java/org/apache/dubbo/proxy/dao/ServiceDefinition.java @@ -1,6 +1,8 @@ package org.apache.dubbo.proxy.dao; +import java.util.Map; + public class ServiceDefinition { private String application; @@ -8,6 +10,8 @@ public class ServiceDefinition { private String methodName; private Object[] paramValues; private String[] paramTypes; + private Map attachments; + public String getApplication() { return application; @@ -48,4 +52,13 @@ public String[] getParamTypes() { public void setParamTypes(String[] paramTypes) { this.paramTypes = paramTypes; } + + + public Map getAttachments() { + return attachments; + } + + public void setAttachments(Map attachments) { + this.attachments = attachments; + } } diff --git a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java index eccdcd8..cfc56f4 100644 --- a/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java +++ b/src/main/java/org/apache/dubbo/proxy/service/GenericInvoke.java @@ -1,10 +1,12 @@ package org.apache.dubbo.proxy.service; +import org.apache.dubbo.proxy.dao.ServiceDefinition; import org.apache.dubbo.proxy.utils.ResultCode; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.registry.Registry; +import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.service.GenericService; import org.slf4j.Logger; @@ -37,8 +39,7 @@ private static void init() { private static Logger logger = LoggerFactory.getLogger(GenericInvoke.class); public static Object genericCall(String interfaceName, String group, - String version, String methodName, String[] paramTypes, - Object[] paramObjs) { + String version, ServiceDefinition serviceDefinition) { if (init.compareAndSet(false, true)) { init(); } @@ -47,14 +48,18 @@ public static Object genericCall(String interfaceName, String group, try { GenericService svc = reference.get(); + if (serviceDefinition.getAttachments() != null && !serviceDefinition.getAttachments().isEmpty()) { + RpcContext.getContext().setAttachments(serviceDefinition.getAttachments()); + } logger.info("dubbo generic invoke, service is {}, method is {} , paramTypes is {} , paramObjs is {} , svc" + " is {}.", interfaceName + , methodName,paramTypes,paramObjs,svc); return svc.$invoke(methodName, paramTypes, paramObjs); } catch (Exception e) { - logger.error("Generic invoke failed",e); + logger.error("Generic invoke failed", e); if (e instanceof RpcException) { - RpcException e1 = (RpcException)e; + RpcException e1 = (RpcException) e; if (e1.isTimeout()) { return ResultCode.TIMEOUT; } @@ -72,6 +77,7 @@ public static Object genericCall(String interfaceName, String group, } } + private static ReferenceConfig addNewReference(String interfaceName, String group, String version) { ReferenceConfig reference; @@ -90,6 +96,7 @@ private static ReferenceConfig addNewReference(String interfaceN return reference; } + private static ReferenceConfig initReference(String interfaceName, String group, String version) { ReferenceConfig reference = new ReferenceConfig<>(); diff --git a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java index cc89b83..3af5930 100644 --- a/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java +++ b/src/main/java/org/apache/dubbo/proxy/worker/RequestWorker.java @@ -69,8 +69,7 @@ public void run() { Object result; try { result = GenericInvoke.genericCall(interfaze,group, version, - serviceDefinition.getMethodName(), - serviceDefinition.getParamTypes(), serviceDefinition.getParamValues()); + serviceDefinition); } catch (Exception e) { e.printStackTrace(); result = e;