001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.model.remote; 018 019import javax.xml.bind.annotation.XmlAccessType; 020import javax.xml.bind.annotation.XmlAccessorType; 021import javax.xml.bind.annotation.XmlAttribute; 022import javax.xml.bind.annotation.XmlElement; 023import javax.xml.bind.annotation.XmlRootElement; 024import javax.xml.bind.annotation.XmlTransient; 025 026import org.apache.camel.ExchangePattern; 027import org.apache.camel.Processor; 028import org.apache.camel.model.NoOutputDefinition; 029import org.apache.camel.spi.Metadata; 030import org.apache.camel.spi.RouteContext; 031import org.apache.camel.spi.ServiceCallLoadBalancer; 032import org.apache.camel.spi.ServiceCallServerListStrategy; 033 034/** 035 * Remote service call 036 */ 037@Metadata(label = "eip,routing") 038@XmlRootElement(name = "serviceCall") 039@XmlAccessorType(XmlAccessType.FIELD) 040public class ServiceCallDefinition extends NoOutputDefinition<ServiceCallDefinition> { 041 042 @XmlAttribute @Metadata(required = "true") 043 private String name; 044 @XmlAttribute @Metadata(required = "true") 045 private String uri; 046 @XmlAttribute 047 private ExchangePattern pattern; 048 @XmlElement 049 private ServiceCallConfigurationDefinition serviceCallConfiguration; 050 @XmlAttribute 051 private String serviceCallConfigurationRef; 052 @XmlAttribute 053 private String loadBalancerRef; 054 // TODO: allow to use custom type as load balancer 055 @XmlTransient 056 private ServiceCallLoadBalancer loadBalancer; 057 @XmlAttribute 058 private String serverListStrategyRef; 059 @XmlTransient 060 private ServiceCallServerListStrategy serverListStrategy; 061 062 public ServiceCallDefinition() { 063 } 064 065 @Override 066 public String toString() { 067 return "ServiceCall[" + name + "]"; 068 } 069 070 @Override 071 public String getLabel() { 072 return "serviceCall"; 073 } 074 075 @Override 076 public Processor createProcessor(RouteContext routeContext) throws Exception { 077 throw new IllegalStateException("Cannot find Camel component supporting the ServiceCall EIP such as camel-kubernetes or camel-ribbon."); 078 } 079 080 // Fluent API 081 // ------------------------------------------------------------------------- 082 083 /** 084 * Sets the optional {@link ExchangePattern} used to invoke this endpoint 085 */ 086 public ServiceCallDefinition pattern(ExchangePattern pattern) { 087 setPattern(pattern); 088 return this; 089 } 090 091 /** 092 * Sets the name of the service to use 093 */ 094 public ServiceCallDefinition name(String name) { 095 setName(name); 096 return this; 097 } 098 099 /** 100 * Sets the uri of the service to use 101 */ 102 public ServiceCallDefinition uri(String uri) { 103 setUri(uri); 104 return this; 105 } 106 107 /** 108 * Configures the Service Call EIP using Kubernetes 109 * <p/> 110 * Use <tt>end</tt> when configuration is complete, to return back to the Service Call EIP. 111 */ 112 public KubernetesConfigurationDefinition kubernetesConfiguration() { 113 serviceCallConfiguration = new KubernetesConfigurationDefinition(this); 114 return (KubernetesConfigurationDefinition) serviceCallConfiguration; 115 } 116 117 /** 118 * Configures the Service Call EIP using Ribbon 119 * <p/> 120 * Use <tt>end</tt> when configuration is complete, to return back to the Service Call EIP. 121 */ 122 public RibbonConfigurationDefinition ribbonConfiguration() { 123 serviceCallConfiguration = new RibbonConfigurationDefinition(this); 124 return (RibbonConfigurationDefinition) serviceCallConfiguration; 125 } 126 127 /** 128 * Configures the Service Call EIP using Consul 129 * <p/> 130 * Use <tt>end</tt> when configuration is complete, to return back to the Service Call EIP. 131 */ 132 public ConsulConfigurationDefinition consulConfiguration() { 133 serviceCallConfiguration = new ConsulConfigurationDefinition(this); 134 return (ConsulConfigurationDefinition) serviceCallConfiguration; 135 } 136 137 /** 138 * Configures the Service Call EIP using Etcd 139 * <p/> 140 * Use <tt>end</tt> when configuration is complete, to return back to the Service Call EIP. 141 */ 142 public EtcdConfigurationDefinition etcdConfiguration() { 143 serviceCallConfiguration = new EtcdConfigurationDefinition(this); 144 return (EtcdConfigurationDefinition) serviceCallConfiguration; 145 } 146 147 /** 148 * Configures the Service Call EIP using Dns 149 * <p/> 150 * Use <tt>end</tt> when configuration is complete, to return back to the Service Call EIP. 151 */ 152 public DnsConfigurationDefinition dnsConfiguration() { 153 serviceCallConfiguration = new DnsConfigurationDefinition(this); 154 return (DnsConfigurationDefinition) serviceCallConfiguration; 155 } 156 157 /** 158 * Configures the ServiceCall using the given configuration 159 */ 160 public ServiceCallDefinition serviceCallConfiguration(ServiceCallConfigurationDefinition configuration) { 161 serviceCallConfiguration = configuration; 162 return this; 163 } 164 165 /** 166 * Refers to a ServiceCall configuration to use 167 */ 168 public ServiceCallDefinition serviceCallConfiguration(String ref) { 169 serviceCallConfigurationRef = ref; 170 return this; 171 } 172 173 /** 174 * Sets a reference to a custom {@link org.apache.camel.spi.ServiceCallLoadBalancer} to use. 175 */ 176 public ServiceCallDefinition loadBalancer(String loadBalancerRef) { 177 setLoadBalancerRef(loadBalancerRef); 178 return this; 179 } 180 181 /** 182 * Sets a custom {@link org.apache.camel.spi.ServiceCallLoadBalancer} to use. 183 */ 184 public ServiceCallDefinition loadBalancer(ServiceCallLoadBalancer loadBalancer) { 185 setLoadBalancer(loadBalancer); 186 return this; 187 } 188 189 /** 190 * Sets a reference to a custom {@link org.apache.camel.spi.ServiceCallServerListStrategy} to use. 191 */ 192 public ServiceCallDefinition serverListStrategy(String serverListStrategyRef) { 193 setServerListStrategyRef(serverListStrategyRef); 194 return this; 195 } 196 197 /** 198 * Sets a custom {@link org.apache.camel.spi.ServiceCallServerListStrategy} to use. 199 */ 200 public ServiceCallDefinition serverListStrategy(ServiceCallServerListStrategy serverListStrategy) { 201 setServerListStrategy(serverListStrategy); 202 return this; 203 } 204 205 // Properties 206 // ------------------------------------------------------------------------- 207 208 public String getName() { 209 return name; 210 } 211 212 public void setName(String name) { 213 this.name = name; 214 } 215 216 public ExchangePattern getPattern() { 217 return pattern; 218 } 219 220 public void setPattern(ExchangePattern pattern) { 221 this.pattern = pattern; 222 } 223 224 public ServiceCallConfigurationDefinition getServiceCallConfiguration() { 225 return serviceCallConfiguration; 226 } 227 228 public void setServiceCallConfiguration(ServiceCallConfigurationDefinition serviceCallConfiguration) { 229 this.serviceCallConfiguration = serviceCallConfiguration; 230 } 231 232 public String getServiceCallConfigurationRef() { 233 return serviceCallConfigurationRef; 234 } 235 236 /** 237 * Refers to a ServiceCall configuration to use 238 */ 239 public void setServiceCallConfigurationRef(String serviceCallConfigurationRef) { 240 this.serviceCallConfigurationRef = serviceCallConfigurationRef; 241 } 242 243 public String getUri() { 244 return uri; 245 } 246 247 /** 248 * The uri of the endpoint to send to. 249 * The uri can be dynamic computed using the {@link org.apache.camel.language.simple.SimpleLanguage} expression. 250 */ 251 public void setUri(String uri) { 252 this.uri = uri; 253 } 254 255 public String getLoadBalancerRef() { 256 return loadBalancerRef; 257 } 258 259 /** 260 * Sets a reference to a custom {@link org.apache.camel.spi.ServiceCallLoadBalancer} to use. 261 */ 262 public void setLoadBalancerRef(String loadBalancerRef) { 263 this.loadBalancerRef = loadBalancerRef; 264 } 265 266 public ServiceCallLoadBalancer getLoadBalancer() { 267 return loadBalancer; 268 } 269 270 public void setLoadBalancer(ServiceCallLoadBalancer loadBalancer) { 271 this.loadBalancer = loadBalancer; 272 } 273 274 public String getServerListStrategyRef() { 275 return serverListStrategyRef; 276 } 277 278 /** 279 * Sets a reference to a custom {@link org.apache.camel.spi.ServiceCallServerListStrategy} to use. 280 */ 281 public void setServerListStrategyRef(String serverListStrategyRef) { 282 this.serverListStrategyRef = serverListStrategyRef; 283 } 284 285 public ServiceCallServerListStrategy getServerListStrategy() { 286 return serverListStrategy; 287 } 288 289 public void setServerListStrategy(ServiceCallServerListStrategy serverListStrategy) { 290 this.serverListStrategy = serverListStrategy; 291 } 292}