Repository: camel
Updated Branches:
  refs/heads/master 56f2b24a2 -> 3e7b1cfdd


http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java
 
b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java
deleted file mode 100644
index d1c3a7f..0000000
--- 
a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudLoadBalancerAutoConfiguration.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.spring.cloud;
-
-import org.apache.camel.cloud.LoadBalancer;
-import org.apache.camel.spring.boot.cloud.CamelCloudAutoConfiguration;
-import org.apache.camel.spring.boot.cloud.CamelCloudConfigurationProperties;
-import 
org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscoveryAutoConfiguration;
-import org.apache.camel.spring.boot.util.GroupCondition;
-import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
-import 
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration;
-import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Conditional;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@ConditionalOnBean({ CamelCloudAutoConfiguration.class, 
LoadBalancerClient.class })
-@AutoConfigureAfter({ LoadBalancerAutoConfiguration.class, 
CamelCloudServiceDiscoveryAutoConfiguration.class })
-@EnableConfigurationProperties(CamelCloudConfigurationProperties.class)
-@Conditional(CamelSpringCloudLoadBalancerAutoConfiguration.LoadBalancerCondition.class)
-public class CamelSpringCloudLoadBalancerAutoConfiguration {
-
-    @Bean(name = "load-balancer")
-    @ConditionalOnMissingBean
-    public LoadBalancer cloudLoadBalancer(LoadBalancerClient 
loadBalancerClient) {
-        return new CamelSpringCloudLoadBalancer(loadBalancerClient);
-    }
-
-    // *******************************
-    // Condition
-    // *******************************
-
-    public static class LoadBalancerCondition extends GroupCondition {
-        public LoadBalancerCondition() {
-            super(
-                "camel.cloud",
-                "camel.cloud.load-balancer"
-            );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
 
b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
new file mode 100644
index 0000000..50447f7
--- /dev/null
+++ 
b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.spring.cloud;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.cloud.ServiceDefinition;
+import org.apache.camel.cloud.ServiceLoadBalancer;
+import org.apache.camel.cloud.ServiceLoadBalancerFunction;
+import org.apache.camel.impl.cloud.DefaultServiceDefinition;
+import org.apache.camel.support.ServiceSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
+
+public class CamelSpringCloudServiceLoadBalancer extends ServiceSupport 
implements CamelContextAware, ServiceLoadBalancer {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(CamelSpringCloudServiceLoadBalancer.class);
+
+    private final LoadBalancerClient loadBalancerClient;
+    private CamelContext camelContext;
+
+    public CamelSpringCloudServiceLoadBalancer(LoadBalancerClient 
loadBalancerClient) {
+        this.loadBalancerClient = loadBalancerClient;
+    }
+
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        ObjectHelper.notNull(camelContext, "camelContext");
+        ObjectHelper.notNull(loadBalancerClient, "loadBalancerClient");
+
+        LOGGER.info("ServiceCall is using cloud load balancer of type: {}", 
loadBalancerClient.getClass());
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+    }
+
+    @Override
+    public <T> T process(String serviceName, ServiceLoadBalancerFunction<T> 
function) throws Exception {
+        return loadBalancerClient.execute(serviceName,  i -> 
function.apply(instanceToDefinition(i)));
+    }
+
+    // *******************************
+    // Helpers
+    // *******************************
+
+    private ServiceDefinition instanceToDefinition(ServiceInstance instance) {
+        return new DefaultServiceDefinition(
+            instance.getServiceId(),
+            instance.getHost(),
+            instance.getPort(),
+            instance.getMetadata()
+        );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java
 
b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java
new file mode 100644
index 0000000..eab3441
--- /dev/null
+++ 
b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancerAutoConfiguration.java
@@ -0,0 +1,59 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.spring.cloud;
+
+import org.apache.camel.cloud.ServiceLoadBalancer;
+import org.apache.camel.spring.boot.cloud.CamelCloudAutoConfiguration;
+import org.apache.camel.spring.boot.cloud.CamelCloudConfigurationProperties;
+import 
org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscoveryAutoConfiguration;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import 
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration;
+import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConditionalOnBean({ CamelCloudAutoConfiguration.class, 
LoadBalancerClient.class })
+@AutoConfigureAfter({ LoadBalancerAutoConfiguration.class, 
CamelCloudServiceDiscoveryAutoConfiguration.class })
+@EnableConfigurationProperties(CamelCloudConfigurationProperties.class)
+@Conditional(CamelSpringCloudServiceLoadBalancerAutoConfiguration.LoadBalancerCondition.class)
+public class CamelSpringCloudServiceLoadBalancerAutoConfiguration {
+
+    @Bean(name = "load-balancer")
+    @ConditionalOnMissingBean
+    public ServiceLoadBalancer cloudLoadBalancer(LoadBalancerClient 
loadBalancerClient) {
+        return new CamelSpringCloudServiceLoadBalancer(loadBalancerClient);
+    }
+
+    // *******************************
+    // Condition
+    // *******************************
+
+    public static class LoadBalancerCondition extends GroupCondition {
+        public LoadBalancerCondition() {
+            super(
+                "camel.cloud",
+                "camel.cloud.load-balancer"
+            );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories
----------------------------------------------------------------------
diff --git 
a/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories 
b/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories
index fc59127..9de8f8b 100644
--- a/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories
+++ b/components/camel-spring-cloud/src/main/resources/META-INF/spring.factories
@@ -16,4 +16,4 @@
 #
 
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
-org.apache.camel.spring.cloud.CamelSpringCloudLoadBalancerAutoConfiguration
+org.apache.camel.spring.cloud.CamelSpringCloudServiceLoadBalancerAutoConfiguration

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java
 
b/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java
index ed60528..556277e 100644
--- 
a/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java
+++ 
b/components/camel-spring/src/test/java/org/apache/camel/spring/cloud/ServiceCallConfigurationTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.impl.cloud.ServiceCallConstants;
 import 
org.apache.camel.model.cloud.AggregatingServiceCallServiceDiscoveryConfiguration;
 import 
org.apache.camel.model.cloud.BlacklistServiceCallServiceFilterConfiguration;
 import 
org.apache.camel.model.cloud.ChainedServiceCallServiceFilterConfiguration;
-import 
org.apache.camel.model.cloud.DefaultServiceCallLoadBalancerConfiguration;
+import 
org.apache.camel.model.cloud.DefaultServiceCallServiceLoadBalancerConfiguration;
 import 
org.apache.camel.model.cloud.HealthyServiceCallServiceFilterConfiguration;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.cloud.ServiceCallExpressionConfiguration;
@@ -49,7 +49,7 @@ public class ServiceCallConfigurationTest {
         assertNotNull("No ServiceCallConfiguration (1)", conf);
         assertNotNull("No ServiceDiscoveryConfiguration (1)", 
conf.getServiceDiscoveryConfiguration());
         assertNotNull("No ServiceCallLoadBalancerConfiguration (1)", 
conf.getLoadBalancerConfiguration());
-        assertTrue(conf.getLoadBalancerConfiguration() instanceof 
DefaultServiceCallLoadBalancerConfiguration);
+        assertTrue(conf.getLoadBalancerConfiguration() instanceof 
DefaultServiceCallServiceLoadBalancerConfiguration);
 
         ServiceCallExpressionConfiguration expConf1 = 
conf.getExpressionConfiguration();
         assertNull(expConf1.getExpression());

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java
deleted file mode 100644
index d25dc3d..0000000
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationCommon.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.model.cloud.springboot;
-
-import java.util.Map;
-import javax.annotation.Generated;
-
-/**
- * Generated by camel-package-maven-plugin - do not edit this file!
- */
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-public class RibbonServiceCallLoadBalancerConfigurationCommon {
-
-    /**
-     * The namespace
-     */
-    private String namespace;
-    /**
-     * The username
-     */
-    private String username;
-    /**
-     * The password
-     */
-    private String password;
-    /**
-     * Sets the Ribbon client name
-     */
-    private String clientName;
-    /**
-     * Set client properties to use. These properties are specific to what
-     * service call implementation are in use. For example if using ribbon then
-     * the client properties are define in
-     * com.netflix.client.config.CommonClientConfigKey.
-     */
-    private Map<String, String> properties;
-
-    public String getNamespace() {
-        return namespace;
-    }
-
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getClientName() {
-        return clientName;
-    }
-
-    public void setClientName(String clientName) {
-        this.clientName = clientName;
-    }
-
-    public Map<String, String> getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Map<String, String> properties) {
-        this.properties = properties;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java
deleted file mode 100644
index d0f230a..0000000
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallLoadBalancerConfigurationProperties.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.camel.model.cloud.springboot;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.Generated;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-@ConfigurationProperties(prefix = "camel.cloud.ribbon.load-balancer")
-public class RibbonServiceCallLoadBalancerConfigurationProperties
-        extends
-            RibbonServiceCallLoadBalancerConfigurationCommon {
-
-    /**
-     * Enable the component
-     */
-    private boolean enabled = true;
-    /**
-     * Define additional configuration definitions
-     */
-    private Map<String, RibbonServiceCallLoadBalancerConfigurationCommon> 
configurations = new HashMap<>();
-
-    public Map<String, RibbonServiceCallLoadBalancerConfigurationCommon> 
getConfigurations() {
-        return configurations;
-    }
-
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.enabled = enabled;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
new file mode 100644
index 0000000..ba78f35
--- /dev/null
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.model.cloud.springboot;
+
+import java.util.Map;
+import javax.annotation.Generated;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+public class RibbonServiceCallServiceLoadBalancerConfigurationCommon {
+
+    /**
+     * The namespace
+     */
+    private String namespace;
+    /**
+     * The username
+     */
+    private String username;
+    /**
+     * The password
+     */
+    private String password;
+    /**
+     * Sets the Ribbon client name
+     */
+    private String clientName;
+    /**
+     * Set client properties to use. These properties are specific to what
+     * service call implementation are in use. For example if using ribbon then
+     * the client properties are define in
+     * com.netflix.client.config.CommonClientConfigKey.
+     */
+    private Map<String, String> properties;
+
+    public String getNamespace() {
+        return namespace;
+    }
+
+    public void setNamespace(String namespace) {
+        this.namespace = namespace;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getClientName() {
+        return clientName;
+    }
+
+    public void setClientName(String clientName) {
+        this.clientName = clientName;
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, String> properties) {
+        this.properties = properties;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
new file mode 100644
index 0000000..a670bf6
--- /dev/null
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.model.cloud.springboot;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.cloud.ribbon.load-balancer")
+public class RibbonServiceCallServiceLoadBalancerConfigurationProperties
+        extends
+            RibbonServiceCallServiceLoadBalancerConfigurationCommon {
+
+    /**
+     * Enable the component
+     */
+    private boolean enabled = true;
+    /**
+     * Define additional configuration definitions
+     */
+    private Map<String, 
RibbonServiceCallServiceLoadBalancerConfigurationCommon> configurations = new 
HashMap<>();
+
+    public Map<String, 
RibbonServiceCallServiceLoadBalancerConfigurationCommon> getConfigurations() {
+        return configurations;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml
index 24aba7b..6295637 100644
--- a/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/pom.xml
@@ -55,5 +55,10 @@
       <artifactId>camel-spring-boot-starter</artifactId>
     </dependency>
     <!--END OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jetty</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
index 8a58108..0135e07 100644
--- 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
@@ -21,10 +21,10 @@ import java.util.Map;
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.cloud.LoadBalancer;
-import org.apache.camel.component.ribbon.cloud.RibbonLoadBalancerFactory;
-import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationCommon;
-import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties;
+import org.apache.camel.cloud.ServiceLoadBalancer;
+import 
org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancerFactory;
+import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationCommon;
+import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
@@ -44,20 +44,20 @@ import org.springframework.context.annotation.Lazy;
 @ConditionalOnBean(CamelAutoConfiguration.class)
 @Conditional(RibbonCloudAutoConfiguration.Condition.class)
 @AutoConfigureAfter(CamelAutoConfiguration.class)
-@EnableConfigurationProperties(RibbonServiceCallLoadBalancerConfigurationProperties.class)
+@EnableConfigurationProperties(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class)
 public class RibbonCloudAutoConfiguration {
     @Autowired
     private CamelContext camelContext;
     @Autowired
-    private RibbonServiceCallLoadBalancerConfigurationProperties configuration;
+    private RibbonServiceCallServiceLoadBalancerConfigurationProperties 
configuration;
     @Autowired
     private ConfigurableBeanFactory beanFactory;
 
     @Lazy
     @Bean(name = "ribbon-load-balancer")
     @ConditionalOnClass(CamelContext.class)
-    public LoadBalancer configureLoadBalancerFactory() throws Exception {
-        RibbonLoadBalancerFactory factory = new RibbonLoadBalancerFactory();
+    public ServiceLoadBalancer configureLoadBalancerFactory() throws Exception 
{
+        RibbonServiceLoadBalancerFactory factory = new 
RibbonServiceLoadBalancerFactory();
 
         IntrospectionSupport.setProperties(
             camelContext,
@@ -73,12 +73,12 @@ public class RibbonCloudAutoConfiguration {
         if (beanFactory != null) {
             Map<String, Object> parameters = new HashMap<>();
 
-            for (Map.Entry<String, 
RibbonServiceCallLoadBalancerConfigurationCommon> entry : 
configuration.getConfigurations().entrySet()) {
+            for (Map.Entry<String, 
RibbonServiceCallServiceLoadBalancerConfigurationCommon> entry : 
configuration.getConfigurations().entrySet()) {
                 // clean up params
                 parameters.clear();
 
                 // The instance factory
-                RibbonLoadBalancerFactory factory = new 
RibbonLoadBalancerFactory();
+                RibbonServiceLoadBalancerFactory factory = new 
RibbonServiceLoadBalancerFactory();
 
                 try {
                     IntrospectionSupport.getProperties(entry.getValue(), 
parameters, null, false);

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java
 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java
index e2e322f..082a8aa 100644
--- 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java
+++ 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerDisabledTest.java
@@ -18,8 +18,8 @@ package org.apache.camel.component.ribbon.springboot.cloud;
 
 import java.util.Map;
 
-import org.apache.camel.cloud.LoadBalancer;
-import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties;
+import org.apache.camel.cloud.ServiceLoadBalancer;
+import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,10 +50,10 @@ public class RibbonLoadBalancerDisabledTest {
     public void testConfiguration() throws Exception {
         Map<String, ?> beans;
 
-        beans = 
context.getBeansOfType(RibbonServiceCallLoadBalancerConfigurationProperties.class);
+        beans = 
context.getBeansOfType(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class);
         Assert.assertTrue(beans.isEmpty());
 
-        beans = context.getBeansOfType(LoadBalancer.class);
+        beans = context.getBeansOfType(ServiceLoadBalancer.class);
         Assert.assertTrue(beans.isEmpty());
         Assert.assertFalse(beans.containsKey("ribbon-load-balancer"));
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java
 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java
index b7e2780..9a25722 100644
--- 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java
+++ 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerEnabledTest.java
@@ -18,8 +18,8 @@ package org.apache.camel.component.ribbon.springboot.cloud;
 
 import java.util.Map;
 
-import org.apache.camel.cloud.LoadBalancer;
-import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallLoadBalancerConfigurationProperties;
+import org.apache.camel.cloud.ServiceLoadBalancer;
+import 
org.apache.camel.model.cloud.springboot.RibbonServiceCallServiceLoadBalancerConfigurationProperties;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,11 +50,11 @@ public class RibbonLoadBalancerEnabledTest {
     public void testConfiguration() throws Exception {
         Map<String, ?> beans;
 
-        beans = 
context.getBeansOfType(RibbonServiceCallLoadBalancerConfigurationProperties.class);
+        beans = 
context.getBeansOfType(RibbonServiceCallServiceLoadBalancerConfigurationProperties.class);
         Assert.assertFalse(beans.isEmpty());
         Assert.assertEquals(1, beans.size());
 
-        beans = context.getBeansOfType(LoadBalancer.class);
+        beans = context.getBeansOfType(ServiceLoadBalancer.class);
         Assert.assertFalse(beans.isEmpty());
         Assert.assertTrue(beans.containsKey("ribbon-load-balancer"));
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/ecc81927/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
new file mode 100644
index 0000000..c021b00
--- /dev/null
+++ 
b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
@@ -0,0 +1,124 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.camel.component.ribbon.springboot.cloud;
+
+import java.util.Optional;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Navigate;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.Route;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancer;
+import org.apache.camel.impl.cloud.DefaultServiceCallProcessor;
+import org.apache.camel.spring.boot.cloud.CamelCloudServiceDiscovery;
+import org.apache.camel.spring.boot.cloud.CamelCloudServiceFilter;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@DirtiesContext
+@SpringBootApplication
+@SpringBootTest(
+    classes = {
+        RibbonLoadBalancerTest.TestConfiguration.class
+    },
+    properties = {
+        "debug=false",
+        
"camel.cloud.service-discovery.services[myService]=localhost:9090,localhost:9091",
+        "camel.cloud.ribbon.load-balancer.enabled=true"
+})
+public class RibbonLoadBalancerTest {
+    @Autowired
+    private CamelContext context;
+    @Autowired
+    private ProducerTemplate template;
+
+    @Test
+    public void testLoadBalancer() throws Exception {
+        DefaultServiceCallProcessor processor = findServiceCallProcessor();
+
+        Assert.assertNotNull(processor.getLoadBalancer());
+        Assert.assertTrue(processor.getLoadBalancer() instanceof 
RibbonServiceLoadBalancer);
+
+        RibbonServiceLoadBalancer loadBalancer = 
(RibbonServiceLoadBalancer)processor.getLoadBalancer();
+        Assert.assertTrue(loadBalancer.getServiceDiscovery() instanceof 
CamelCloudServiceDiscovery);
+        Assert.assertTrue(loadBalancer.getServiceFilter() instanceof 
CamelCloudServiceFilter);
+
+        Assert.assertEquals("9091", template.requestBody("direct:start", null, 
String.class));
+        Assert.assertEquals("9090", template.requestBody("direct:start", null, 
String.class));
+    }
+
+    @Configuration
+    public static class TestConfiguration {
+        @Bean
+        public RoutesBuilder routeBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:start")
+                        .routeId("scall")
+                        .serviceCall()
+                            .name("myService")
+                            .uri("jetty:http://myService";)
+                            .end();
+                    from("jetty:http://localhost:9090";).routeId("9090")
+                        .transform().constant("9090");
+                    from("jetty:http://localhost:9091";).routeId("9091")
+                        .transform().constant("9091");
+                }
+            };
+        }
+    }
+
+    // ************************************
+    // Helpers
+    // ************************************
+
+    protected DefaultServiceCallProcessor findServiceCallProcessor() {
+        Route route = context.getRoute("scall");
+
+        Assert.assertNotNull("ServiceCall Route should be present", route);
+
+        return findServiceCallProcessor(route.navigate())
+            .orElseThrow(() -> new IllegalStateException("Unable to find a 
ServiceCallProcessor"));
+    }
+
+    protected Optional<DefaultServiceCallProcessor> 
findServiceCallProcessor(Navigate<Processor> navigate) {
+        for (Processor processor : navigate.next()) {
+            if (processor instanceof DefaultServiceCallProcessor) {
+                return 
Optional.ofNullable((DefaultServiceCallProcessor)processor);
+            }
+
+            if (processor instanceof Navigate) {
+                return 
findServiceCallProcessor((Navigate<Processor>)processor);
+            }
+        }
+
+        return Optional.empty();
+    }
+}

Reply via email to