You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2022/12/02 13:34:12 UTC
[shenyu] branch master updated: [type:refactor] refactor sdk test and processArgument. (#4226)
This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 8ed89a82a [type:refactor] refactor sdk test and processArgument. (#4226)
8ed89a82a is described below
commit 8ed89a82a7f89d3e2cc8cc8623ad34430de20131
Author: yunlongn <yu...@outlook.com>
AuthorDate: Fri Dec 2 21:34:03 2022 +0800
[type:refactor] refactor sdk test and processArgument. (#4226)
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
* [type:refactor] refactor sdk test and processArgument.
---
.../consumer/api/ShenyuAlibabaDubboClientApi.java | 5 +-
.../consumer/api/ShenyuApacheDubboClientApi.java | 5 +-
.../src/main/http/sdk-http-test-api.http | 6 +--
.../examples/sdk/http/api/ShenyuHttpClientApi.java | 3 +-
.../org/apache/shenyu/sdk/core/ShenyuRequest.java | 53 ++++++++++++++++------
.../sdk/core/client/AbstractShenyuSdkClient.java | 8 ++--
.../shenyu/sdk/core/common/RequestTemplate.java | 2 +-
.../shenyu/sdk/spring/ShenyuClientsRegistrar.java | 5 +-
.../annotation/CookieValueParameterProcessor.java | 11 +++--
.../annotation/PathVariableParameterProcessor.java | 6 ++-
.../annotation/RequestBodyParameterProcessor.java | 8 ++--
.../RequestHeaderParameterProcessor.java | 14 ++++--
.../annotation/RequestParamParameterProcessor.java | 6 ++-
.../factory/AnnotatedParameterProcessor.java | 6 +--
.../proxy/ShenyuClientInvocationHandler.java | 3 +-
.../spring/proxy/ShenyuClientMethodHandler.java | 5 +-
16 files changed, 96 insertions(+), 50 deletions(-)
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
index 7e4f5cc25..c35822feb 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
@@ -17,7 +17,6 @@
package org.apache.shenyu.examples.sdk.alibaba.dubbo.consumer.api;
-import java.util.List;
import org.apache.shenyu.examples.dubbo.api.entity.ComplexBeanTest;
import org.apache.shenyu.examples.dubbo.api.entity.DubboTest;
import org.apache.shenyu.examples.dubbo.api.entity.ListResp;
@@ -29,10 +28,12 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
+import java.util.List;
+
/**
* ShenyuApacheDubboClientApi.
*/
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
public interface ShenyuAlibabaDubboClientApi {
/**
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
index 9900186fd..b183c3d93 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
@@ -17,7 +17,6 @@
package org.apache.shenyu.examples.sdk.apache.dubbo.consumer.api;
-import java.util.List;
import org.apache.shenyu.examples.dubbo.api.entity.ComplexBeanTest;
import org.apache.shenyu.examples.dubbo.api.entity.DubboTest;
import org.apache.shenyu.examples.dubbo.api.entity.ListResp;
@@ -29,10 +28,12 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
+import java.util.List;
+
/**
* ShenyuApacheDubboClientApi.
*/
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
public interface ShenyuApacheDubboClientApi {
/**
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
index f2e3be4e9..83b4215ce 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
@@ -17,12 +17,12 @@
### shengyu sdk http findById
-GET http://localhost:8899/sdk/findById?id=1
+GET http://localhost:8899/sdk/http/findById?id=1
Accept: application/json
Content-Type: application/json
-### shengyu sdk annoTest
-POST http://localhost:8899/sdk/annoTest
+### shengyu sdk http annoTest
+POST http://localhost:8899/sdk/http/annoTest
Accept: application/json
Content-Type: application/json
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
index 4d77f2566..e37ab6c15 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
@@ -29,8 +29,9 @@ import org.springframework.web.bind.annotation.RequestParam;
/**
* ShenyuHttpClientApi.
+ * request local HttpServiceController.
*/
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
public interface ShenyuHttpClientApi {
/**
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
index 1ccc785e7..b5dad1a4e 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
@@ -32,13 +32,13 @@ public final class ShenyuRequest implements Serializable {
private final HttpMethod httpMethod;
- private final String url;
+ private String url;
- private final String contextId;
+ private final String name;
- private final Map<String, Collection<String>> headers;
+ private Map<String, Collection<String>> headers;
- private final String body;
+ private String body;
private final RequestTemplate requestTemplate;
@@ -55,14 +55,14 @@ public final class ShenyuRequest implements Serializable {
final String url,
final Map<String, Collection<String>> headers,
final String body,
- final String contextId,
+ final String name,
final RequestTemplate requestTemplate) {
this.httpMethod = checkNotNull(method, "httpMethod of %s", method.name());
this.url = checkNotNull(url, "url");
this.headers = checkNotNull(headers, "headers of %s %s", method, url);
this.body = body;
this.requestTemplate = requestTemplate;
- this.contextId = contextId;
+ this.name = name;
}
public enum HttpMethod {
@@ -81,16 +81,16 @@ public final class ShenyuRequest implements Serializable {
* @param headers to include.
* @param body of the request, can be {@literal null}
* @param requestTemplate requestTemplate
- * @param contextId contextId
+ * @param name contextId
* @return a Request
*/
public static ShenyuRequest create(final HttpMethod httpMethod,
final String url,
final Map<String, Collection<String>> headers,
final String body,
- final String contextId,
+ final String name,
final RequestTemplate requestTemplate) {
- return new ShenyuRequest(httpMethod, url, headers, body, contextId, requestTemplate);
+ return new ShenyuRequest(httpMethod, url, headers, body, name, requestTemplate);
}
/**
@@ -101,7 +101,7 @@ public final class ShenyuRequest implements Serializable {
* @return a Request
*/
public static ShenyuRequest create(final String url, final ShenyuRequest request) {
- return new ShenyuRequest(request.getHttpMethod(), url, request.getHeaders(), request.getBody(), request.getContextId(), request.getRequestTemplate());
+ return new ShenyuRequest(request.getHttpMethod(), url, request.getHeaders(), request.getBody(), request.getName(), request.getRequestTemplate());
}
/**
@@ -150,11 +150,38 @@ public final class ShenyuRequest implements Serializable {
}
/**
- * getContextId.
+ * getName.
*
* @return {@link String}
*/
- public String getContextId() {
- return contextId;
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * setUrl.
+ *
+ * @param url url
+ */
+ public void setUrl(final String url) {
+ this.url = url;
+ }
+
+ /**
+ * setHeaders.
+ *
+ * @param headers headers
+ */
+ public void setHeaders(final Map<String, Collection<String>> headers) {
+ this.headers = headers;
+ }
+
+ /**
+ * setBody.
+ *
+ * @param body body
+ */
+ public void setBody(final String body) {
+ this.body = body;
}
}
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
index b07674748..5f5d2412a 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
@@ -162,11 +162,11 @@ public abstract class AbstractShenyuSdkClient implements ShenyuSdkClient {
.map(serverAddress -> Upstream.builder().url(UriUtils.appendScheme(serverAddress, scheme)).build())
.collect(Collectors.toList());
} else {
- List<InstanceEntity> instanceRegisters = watcherInstanceRegisterMap.get(request.getContextId());
+ List<InstanceEntity> instanceRegisters = watcherInstanceRegisterMap.get(request.getName());
if (instanceRegisters == null) {
- instanceRegisters = registerRepository.selectInstancesAndWatcher(request.getContextId(),
- instanceRegisterDTOs -> watcherInstanceRegisterMap.put(request.getContextId(), instanceRegisterDTOs));
- watcherInstanceRegisterMap.put(request.getContextId(), instanceRegisters);
+ instanceRegisters = registerRepository.selectInstancesAndWatcher(request.getName(),
+ instanceRegisterDTOs -> watcherInstanceRegisterMap.put(request.getName(), instanceRegisterDTOs));
+ watcherInstanceRegisterMap.put(request.getName(), instanceRegisters);
}
if (ObjectUtils.isEmpty(instanceRegisters)) {
throw new ShenyuException("Gateway address not found from registry.");
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
index fcaf7b2f8..d2d9df6c1 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
@@ -79,7 +79,7 @@ public final class RequestTemplate {
* @return {@link ShenyuRequest}
*/
public ShenyuRequest request() {
- return ShenyuRequest.create(this.httpMethod, this.url + this.path, this.headers, this.body, contextId, this);
+ return ShenyuRequest.create(this.httpMethod, this.url + this.path, new HashMap<>(this.headers), this.body, name, this);
}
/**
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
index 9ca40a52b..6d2c9f7a9 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
@@ -53,6 +53,7 @@ import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
/**
@@ -172,7 +173,7 @@ public class ShenyuClientsRegistrar implements ImportBeanDefinitionRegistrar, Re
String[] qualifiers = getQualifiers(attributes);
if (ObjectUtils.isEmpty(qualifiers)) {
- qualifiers = new String[] {contextId + "ShenyuClient"};
+ qualifiers = new String[] {Optional.ofNullable(contextId).orElse(name) + "ShenyuClient"};
}
BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, className, qualifiers);
BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
@@ -181,7 +182,7 @@ public class ShenyuClientsRegistrar implements ImportBeanDefinitionRegistrar, Re
private void validate(final Map<String, Object> attributes) {
AnnotationAttributes annotation = AnnotationAttributes.fromMap(attributes);
- // This blows up if an aliased property is overspecified
+ // This blows up if an aliased property is over specified
validateFallback(annotation.getClass("fallback"));
validateFallbackFactory(annotation.getClass("fallbackFactory"));
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
index 6016c93d4..208e7acf6 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.sdk.spring.annotation;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import org.apache.shenyu.sdk.core.common.RequestTemplate;
import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
import org.springframework.http.HttpHeaders;
@@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.CookieValue;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
import static com.google.common.base.Strings.emptyToNull;
import static org.apache.shenyu.sdk.core.util.Util.checkState;
@@ -43,14 +45,17 @@ public class CookieValueParameterProcessor implements AnnotatedParameterProcesso
}
@Override
- public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+ public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
+ RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
CookieValue cookie = ANNOTATION.cast(annotation);
String name = cookie.value().trim();
checkState(emptyToNull(name) != null, "Cookie.name() was empty on parameter %s", requestTemplate.getMethod());
Collection<String> cookieExpression = requestTemplate.getHeaders().getOrDefault(HttpHeaders.COOKIE, new ArrayList<>());
cookieExpression.add(String.format("%s=%s", name, arg));
- requestTemplate.getHeaders().remove(HttpHeaders.COOKIE);
- requestTemplate.getHeaders().put(HttpHeaders.COOKIE, cookieExpression);
+ Map<String, Collection<String>> headers = shenyuRequest.getHeaders();
+ headers.remove(HttpHeaders.COOKIE);
+ headers.put(HttpHeaders.COOKIE, cookieExpression);
+ shenyuRequest.setHeaders(headers);
return true;
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
index 4456da951..5822ee752 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
@@ -18,6 +18,7 @@
package org.apache.shenyu.sdk.spring.annotation;
import org.apache.commons.lang3.RegExUtils;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import org.apache.shenyu.sdk.core.common.RequestTemplate;
import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
import org.springframework.web.bind.annotation.PathVariable;
@@ -40,14 +41,15 @@ public class PathVariableParameterProcessor implements AnnotatedParameterProcess
}
@Override
- public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+ public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
String name = ANNOTATION.cast(annotation).value();
+ RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
checkState(emptyToNull(name) != null, "PathVariable annotation was empty on param %s.", requestTemplate.getMethod());
checkState(arg instanceof String, "PathVariable Object class pls is String %s.", requestTemplate.getMethod());
String varName = "{" + name + "}";
String varNameRegex = "\\{" + name + "\\}";
if (requestTemplate.getPath().contains(varName)) {
- requestTemplate.setPath(RegExUtils.replaceAll(requestTemplate.getPath(), varNameRegex, String.valueOf(arg)));
+ shenyuRequest.setUrl(requestTemplate.getUrl() + RegExUtils.replaceAll(requestTemplate.getPath(), varNameRegex, String.valueOf(arg)));
}
return true;
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
index 27e06e1a2..b00575363 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
@@ -18,7 +18,7 @@
package org.apache.shenyu.sdk.spring.annotation;
import org.apache.shenyu.common.utils.JsonUtils;
-import org.apache.shenyu.sdk.core.common.RequestTemplate;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
import org.springframework.web.bind.annotation.RequestBody;
@@ -37,11 +37,11 @@ public class RequestBodyParameterProcessor implements AnnotatedParameterProcesso
}
@Override
- public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+ public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
if (arg instanceof String) {
- requestTemplate.setBody((String) arg);
+ shenyuRequest.setBody((String) arg);
} else {
- requestTemplate.setBody(JsonUtils.toJson(arg));
+ shenyuRequest.setBody(JsonUtils.toJson(arg));
}
return true;
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
index c3d7119df..2ec40efe6 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.sdk.spring.annotation;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import org.apache.shenyu.sdk.core.common.RequestTemplate;
import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
import org.springframework.web.bind.annotation.RequestHeader;
@@ -43,20 +44,23 @@ public class RequestHeaderParameterProcessor implements AnnotatedParameterProces
}
@Override
- public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+ public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
String name = ANNOTATION.cast(annotation).value();
+ RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
checkState(emptyToNull(name) != null, "RequestHeader.value() was empty on parameter %s", requestTemplate.getMethod().getName());
- final Map<String, Collection<String>> requestTemplateHeaders = requestTemplate.getHeaders();
+ Map<String, Collection<String>> headers = shenyuRequest.getHeaders();
if (arg instanceof Map) {
((Map<?, ?>) arg).forEach((key, value) -> {
if (key instanceof String && value instanceof Collection) {
- requestTemplateHeaders.put((String) key, (Collection) value);
+ headers.put((String) key, (Collection) value);
+ shenyuRequest.setHeaders(headers);
}
});
} else if (arg instanceof String) {
- Collection<String> headerColl = Optional.ofNullable(requestTemplate.getHeaders().get(name)).orElseGet(ArrayList::new);
+ Collection<String> headerColl = Optional.ofNullable(headers.get(name)).orElseGet(ArrayList::new);
headerColl.add((String) arg);
- requestTemplate.getHeaders().put(name, headerColl);
+ headers.put(name, headerColl);
+ shenyuRequest.setHeaders(headers);
}
return true;
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
index 58746a9a3..c9f5854d9 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.sdk.spring.annotation;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import org.apache.shenyu.sdk.core.common.RequestTemplate;
import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
import org.springframework.web.bind.annotation.RequestParam;
@@ -40,7 +41,8 @@ public class RequestParamParameterProcessor implements AnnotatedParameterProcess
}
@Override
- public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+ public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
+ RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
RequestParam requestParam = ANNOTATION.cast(annotation);
String name = requestParam.value();
checkState(emptyToNull(name) != null, "RequestParam.value() was empty on parameter %s#%s",
@@ -58,7 +60,7 @@ public class RequestParamParameterProcessor implements AnnotatedParameterProcess
pathResult.append(key).append("=").append(value);
});
}
- requestTemplate.setPath(pathResult.toString());
+ shenyuRequest.setUrl(requestTemplate.getUrl() + pathResult);
return true;
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
index f7e7e933f..73673a011 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
@@ -17,7 +17,7 @@
package org.apache.shenyu.sdk.spring.factory;
-import org.apache.shenyu.sdk.core.common.RequestTemplate;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
import java.lang.annotation.Annotation;
@@ -45,11 +45,11 @@ public interface AnnotatedParameterProcessor {
/**
* Process the annotated parameter.
*
- * @param requestTemplate requestTemplate
+ * @param shenyuRequest shenyuRequest
* @param annotation annotation
* @param arg arg
* @return {@link boolean}
*/
- boolean processArgument(RequestTemplate requestTemplate, Annotation annotation, Object arg);
+ boolean processArgument(ShenyuRequest shenyuRequest, Annotation annotation, Object arg);
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
index 15aca3699..277bcc161 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
@@ -36,6 +36,7 @@ import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@@ -82,7 +83,7 @@ public class ShenyuClientInvocationHandler implements InvocationHandler {
for (RequestTemplate requestTemplate : requestTemplates) {
requestTemplate.setUrl(shenyuClientFactoryBean.getUrl());
requestTemplate.setName(shenyuClientFactoryBean.getName());
- requestTemplate.setContextId(shenyuClientFactoryBean.getContextId());
+ requestTemplate.setContextId(Optional.ofNullable(shenyuClientFactoryBean.getContextId()).orElse(shenyuClientFactoryBean.getName()));
if (StringUtils.hasText(shenyuClientFactoryBean.getPath())) {
requestTemplate.setPath(shenyuClientFactoryBean.getPath() + "/" + requestTemplate.getPath());
}
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
index 03f115bde..71f6b3483 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
@@ -81,6 +81,7 @@ public class ShenyuClientMethodHandler {
private ShenyuRequest targetProcessor(final RequestTemplate requestTemplate, final Object[] args) {
final RequestTemplate requestTemplateFrom = RequestTemplate.from(requestTemplate);
+ ShenyuRequest request = requestTemplateFrom.request();
for (RequestTemplate.ParamMetadata paramMetadata : requestTemplateFrom.getParamMetadataList()) {
final Annotation[] paramAnnotations = paramMetadata.getParamAnnotations();
for (Annotation paramAnnotation : paramAnnotations) {
@@ -88,9 +89,9 @@ public class ShenyuClientMethodHandler {
if (ObjectUtils.isEmpty(processor)) {
continue;
}
- processor.processArgument(requestTemplateFrom, paramAnnotation, args[paramMetadata.getParamIndexOnMethod()]);
+ processor.processArgument(request, paramAnnotation, args[paramMetadata.getParamIndexOnMethod()]);
}
}
- return requestTemplateFrom.request();
+ return request;
}
}