From 6877f0898f4978173945892119bd9adf96f9d281 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 24 Jun 2016 08:15:12 -0600 Subject: [PATCH] Move RestClientRibbonCommand back to original place. Made it public and undid other refactorings. --- .../netflix/zuul/ZuulProxyConfiguration.java | 2 +- .../route/RestClientRibbonCommand.java | 67 ++++++++++++ .../route/RestClientRibbonCommandFactory.java | 54 ++++++++++ .../route/apache/HttpClientRibbonCommand.java | 41 +++++++ .../HttpClientRibbonCommandFactory.java | 18 +--- .../route/okhttp/OkHttpRibbonCommand.java | 41 +++++++ .../okhttp/OkHttpRibbonCommandFactory.java | 18 +--- .../RestClientRibbonCommandFactory.java | 102 ------------------ ...stClientRibbonCommandIntegrationTests.java | 6 +- 9 files changed, 210 insertions(+), 139 deletions(-) create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java create mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java delete mode 100644 spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandFactory.java diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java index 1d472695..9a6c43a3 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulProxyConfiguration.java @@ -37,7 +37,7 @@ import org.springframework.cloud.netflix.zuul.filters.discovery.ServiceRouteMapp import org.springframework.cloud.netflix.zuul.filters.discovery.SimpleServiceRouteMapper; import org.springframework.cloud.netflix.zuul.filters.pre.PreDecorationFilter; import org.springframework.cloud.netflix.zuul.filters.route.okhttp.OkHttpRibbonCommandFactory; -import org.springframework.cloud.netflix.zuul.filters.route.restclient.RestClientRibbonCommandFactory; +import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter; import org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java new file mode 100644 index 00000000..dae27414 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommand.java @@ -0,0 +1,67 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.zuul.filters.route; + +import com.netflix.client.http.HttpRequest; +import com.netflix.client.http.HttpResponse; +import com.netflix.niws.client.http.RestClient; +import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; + +import java.util.List; + +/** + * Hystrix wrapper around Eureka Ribbon command + * + * see original + * https://github.com/Netflix/zuul/blob/master/zuul-netflix/src/main/java/com/ + * netflix/zuul/dependency/ribbon/hystrix/RibbonCommand.java + */ +@SuppressWarnings("deprecation") +public class RestClientRibbonCommand extends AbstractRibbonCommand { + + public RestClientRibbonCommand(String commandKey, RestClient client, RibbonCommandContext context) { + super(commandKey, client, context); + } + + @Override + protected HttpRequest createRequest() throws Exception { + HttpRequest.Builder builder = HttpRequest.newBuilder() + .verb(RestClientRibbonCommandFactory.getVerb(this.context.getMethod())) + .uri(this.context.uri()) + .entity(this.context.getRequestEntity()); + + if(this.context.getRetryable() != null) { + builder.setRetriable(this.context.getRetryable()); + } + + for (String name : this.context.getHeaders().keySet()) { + List values = this.context.getHeaders().get(name); + for (String value : values) { + builder.header(name, value); + } + } + for (String name : this.context.getParams().keySet()) { + List values = this.context.getParams().get(name); + for (String value : values) { + builder.queryParams(name, value); + } + } + + return builder.build(); + } +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java new file mode 100644 index 00000000..72f006d9 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RestClientRibbonCommandFactory.java @@ -0,0 +1,54 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.zuul.filters.route; + +import com.netflix.client.http.HttpRequest; +import org.springframework.cloud.netflix.ribbon.SpringClientFactory; + +import com.netflix.niws.client.http.RestClient; + +/** + * @author Spencer Gibb + */ +public class RestClientRibbonCommandFactory implements RibbonCommandFactory { + + private final SpringClientFactory clientFactory; + + public RestClientRibbonCommandFactory(SpringClientFactory clientFactory) { + this.clientFactory = clientFactory; + } + + @Override + @SuppressWarnings("deprecation") + public RestClientRibbonCommand create(RibbonCommandContext context) { + RestClient restClient = this.clientFactory.getClient(context.getServiceId(), + RestClient.class); + return new RestClientRibbonCommand(context.getServiceId(), restClient, context); + } + + static HttpRequest.Verb getVerb(String method) { + if (method == null) + return HttpRequest.Verb.GET; + try { + return HttpRequest.Verb.valueOf(method.toUpperCase()); + } + catch (IllegalArgumentException e) { + return HttpRequest.Verb.GET; + } + } +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java new file mode 100644 index 00000000..e9d17d9c --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommand.java @@ -0,0 +1,41 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.zuul.filters.route.apache; + +import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpRequest; +import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpResponse; +import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; +import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; +import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; + +/** + * @author Spencer Gibb + */ +public class HttpClientRibbonCommand extends AbstractRibbonCommand { + + public HttpClientRibbonCommand(final String commandKey, + final RibbonLoadBalancingHttpClient client, RibbonCommandContext context) { + super(commandKey, client, context); + } + + @Override + protected RibbonApacheHttpRequest createRequest() throws Exception { + return new RibbonApacheHttpRequest(this.context); + } + +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java index 4fa6e409..1f3063a6 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/apache/HttpClientRibbonCommandFactory.java @@ -17,12 +17,9 @@ package org.springframework.cloud.netflix.zuul.filters.route.apache; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; -import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpRequest; -import org.springframework.cloud.netflix.ribbon.apache.RibbonApacheHttpResponse; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; -import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; import lombok.RequiredArgsConstructor; @@ -31,7 +28,7 @@ import lombok.RequiredArgsConstructor; */ @RequiredArgsConstructor public class HttpClientRibbonCommandFactory implements - RibbonCommandFactory { + RibbonCommandFactory { private final SpringClientFactory clientFactory; @@ -45,17 +42,4 @@ public class HttpClientRibbonCommandFactory implements return new HttpClientRibbonCommand(serviceId, client, context); } - class HttpClientRibbonCommand extends AbstractRibbonCommand { - - public HttpClientRibbonCommand(final String commandKey, - final RibbonLoadBalancingHttpClient client, RibbonCommandContext context) { - super(commandKey, client, context); - } - - @Override - protected RibbonApacheHttpRequest createRequest() throws Exception { - return new RibbonApacheHttpRequest(this.context); - } - - } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java new file mode 100644 index 00000000..9709ae16 --- /dev/null +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommand.java @@ -0,0 +1,41 @@ +/* + * Copyright 2013-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.zuul.filters.route.okhttp; + +import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient; +import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonRequest; +import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonResponse; +import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; +import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; + +/** + * @author Spencer Gibb + */ +public class OkHttpRibbonCommand extends AbstractRibbonCommand { + + public OkHttpRibbonCommand(final String commandKey, + final OkHttpLoadBalancingClient client, RibbonCommandContext context) { + super(commandKey, client, context); + } + + @Override + protected OkHttpRibbonRequest createRequest() throws Exception { + return new OkHttpRibbonRequest(this.context); + } + +} diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java index ea898972..fc65e683 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/okhttp/OkHttpRibbonCommandFactory.java @@ -18,11 +18,8 @@ package org.springframework.cloud.netflix.zuul.filters.route.okhttp; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient; -import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonRequest; -import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonResponse; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; -import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; import lombok.RequiredArgsConstructor; @@ -31,7 +28,7 @@ import lombok.RequiredArgsConstructor; */ @RequiredArgsConstructor public class OkHttpRibbonCommandFactory implements - RibbonCommandFactory { + RibbonCommandFactory { private final SpringClientFactory clientFactory; @@ -45,17 +42,4 @@ public class OkHttpRibbonCommandFactory implements return new OkHttpRibbonCommand(serviceId, client, context); } - class OkHttpRibbonCommand extends AbstractRibbonCommand { - - public OkHttpRibbonCommand(final String commandKey, - final OkHttpLoadBalancingClient client, RibbonCommandContext context) { - super(commandKey, client, context); - } - - @Override - protected OkHttpRibbonRequest createRequest() throws Exception { - return new OkHttpRibbonRequest(this.context); - } - - } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandFactory.java deleted file mode 100644 index f34fffe9..00000000 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandFactory.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.springframework.cloud.netflix.zuul.filters.route.restclient; - -import com.netflix.client.http.HttpRequest; -import com.netflix.client.http.HttpResponse; -import org.springframework.cloud.netflix.ribbon.SpringClientFactory; - -import com.netflix.niws.client.http.RestClient; -import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; -import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; -import org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand; - -import java.util.List; - -/** - * @author Spencer Gibb - */ -public class RestClientRibbonCommandFactory implements RibbonCommandFactory { - - private final SpringClientFactory clientFactory; - - public RestClientRibbonCommandFactory(SpringClientFactory clientFactory) { - this.clientFactory = clientFactory; - } - - @Override - @SuppressWarnings("deprecation") - public RestClientRibbonCommand create(RibbonCommandContext context) { - RestClient restClient = this.clientFactory.getClient(context.getServiceId(), - RestClient.class); - return new RestClientRibbonCommand(context.getServiceId(), restClient, context); - } - - /** - * Hystrix wrapper around Eureka Ribbon command - * - * see original - * https://github.com/Netflix/zuul/blob/master/zuul-netflix/src/main/java/com/ - * netflix/zuul/dependency/ribbon/hystrix/RibbonCommand.java - */ - @SuppressWarnings("deprecation") - public static class RestClientRibbonCommand extends AbstractRibbonCommand { - - public RestClientRibbonCommand(String commandKey, RestClient client, RibbonCommandContext context) { - super(commandKey, client, context); - } - - @Override - protected HttpRequest createRequest() throws Exception { - HttpRequest.Builder builder = HttpRequest.newBuilder() - .verb(getVerb(this.context.getMethod())) - .uri(this.context.uri()) - .entity(this.context.getRequestEntity()); - - if(this.context.getRetryable() != null) { - builder.setRetriable(this.context.getRetryable()); - } - - for (String name : this.context.getHeaders().keySet()) { - List values = this.context.getHeaders().get(name); - for (String value : values) { - builder.header(name, value); - } - } - for (String name : this.context.getParams().keySet()) { - List values = this.context.getParams().get(name); - for (String value : values) { - builder.queryParams(name, value); - } - } - - return builder.build(); - } - } - - static HttpRequest.Verb getVerb(String method) { - if (method == null) - return HttpRequest.Verb.GET; - try { - return HttpRequest.Verb.valueOf(method.toUpperCase()); - } - catch (IllegalArgumentException e) { - return HttpRequest.Verb.GET; - } - } -} diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java index a135c103..db862e19 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/restclient/RestClientRibbonCommandIntegrationTests.java @@ -43,6 +43,8 @@ import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; +import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonCommand; +import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.support.ZuulProxyTestBase; @@ -312,7 +314,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { @Override @SuppressWarnings("deprecation") @SneakyThrows - public RestClientRibbonCommandFactory.RestClientRibbonCommand create(RibbonCommandContext context) { + public RestClientRibbonCommand create(RibbonCommandContext context) { String uri = context.getUri(); if (uri.startsWith("/throwexception/")) { String code = uri.replace("/throwexception/", ""); @@ -325,7 +327,7 @@ public class RestClientRibbonCommandIntegrationTests extends ZuulProxyTestBase { } } - static class MyCommand extends RestClientRibbonCommandFactory.RestClientRibbonCommand { + static class MyCommand extends RestClientRibbonCommand { private int errorCode;