| /** |
| * 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.cxf; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.apache.camel.builder.RouteBuilder; |
| import org.apache.camel.impl.DefaultCamelContext; |
| import org.apache.cxf.clustering.LoadDistributorFeature; |
| import org.apache.cxf.clustering.SequentialStrategy; |
| import org.apache.cxf.frontend.ClientProxyFactoryBean; |
| import org.apache.cxf.frontend.ServerFactoryBean; |
| import org.junit.Assert; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| public class LoadDistributorFeatureTest { |
| |
| private static int port1 = CXFTestSupport.getPort1(); |
| private static int port2 = CXFTestSupport.getPort2(); |
| private static int port3 = CXFTestSupport.getPort3(); |
| |
| |
| private static final String SERVICE_ADDRESS_1 = "http://localhost:" + port1 + "/LoadDistributorFeatureTest/service1"; |
| private static final String SERVICE_ADDRESS_2 = "http://localhost:" + port1 + "/LoadDistributorFeatureTest/service2"; |
| private static final String PAYLOAD_PROXY_ADDRESS = "http://localhost:" + port2 + "/LoadDistributorFeatureTest/proxy"; |
| private static final String POJO_PROXY_ADDRESS = "http://localhost:" + port3 + "/LoadDistributorFeatureTest/proxy"; |
| |
| private DefaultCamelContext context1; |
| private DefaultCamelContext context2; |
| |
| @BeforeClass |
| public static void init() { |
| |
| // publish two web-service |
| ServerFactoryBean factory1 = new ServerFactoryBean(); |
| factory1.setAddress(SERVICE_ADDRESS_1); |
| factory1.setServiceBean(new HelloServiceImpl(" Server1")); |
| factory1.create(); |
| |
| ServerFactoryBean factory2 = new ServerFactoryBean(); |
| factory2.setAddress(SERVICE_ADDRESS_2); |
| factory2.setServiceBean(new HelloServiceImpl(" Server2")); |
| factory2.create(); |
| } |
| |
| @Test |
| public void testPojo() throws Exception { |
| startRoutePojo(); |
| Assert.assertEquals("hello Server1", tryLoadDistributor(POJO_PROXY_ADDRESS)); |
| Assert.assertEquals("hello Server2", tryLoadDistributor(POJO_PROXY_ADDRESS)); |
| if (context2 != null) { |
| context2.stop(); |
| } |
| } |
| |
| @Test |
| public void testPayload() throws Exception { |
| startRoutePayload(); |
| Assert.assertEquals("hello Server1", tryLoadDistributor(PAYLOAD_PROXY_ADDRESS)); |
| Assert.assertEquals("hello Server2", tryLoadDistributor(PAYLOAD_PROXY_ADDRESS)); |
| if (context1 != null) { |
| context1.stop(); |
| } |
| } |
| |
| private void startRoutePayload() throws Exception { |
| |
| String proxy = "cxf://" + PAYLOAD_PROXY_ADDRESS + "?wsdlURL=" + SERVICE_ADDRESS_1 + "?wsdl" |
| + "&dataFormat=PAYLOAD"; |
| |
| String backend = "cxf://" + SERVICE_ADDRESS_1 + "?wsdlURL=" + SERVICE_ADDRESS_1 + "?wsdl" |
| + "&dataFormat=PAYLOAD"; |
| |
| context1 = new DefaultCamelContext(); |
| startRoute(context1, proxy, backend); |
| } |
| |
| private void startRoutePojo() throws Exception { |
| |
| String proxy = "cxf://" + POJO_PROXY_ADDRESS + "?serviceClass=" + "org.apache.camel.component.cxf.HelloService" |
| + "&dataFormat=POJO"; |
| |
| |
| String backend = "cxf://" + SERVICE_ADDRESS_1 + "?serviceClass=" + "org.apache.camel.component.cxf.HelloService" |
| + "&dataFormat=POJO"; |
| |
| context2 = new DefaultCamelContext(); |
| startRoute(context2, proxy, backend); |
| } |
| |
| private void startRoute(DefaultCamelContext ctx, final String proxy, final String real) throws Exception { |
| |
| ctx.addRoutes(new RouteBuilder() { |
| public void configure() { |
| |
| List<String> serviceList = new ArrayList<String>(); |
| serviceList.add(SERVICE_ADDRESS_1); |
| serviceList.add(SERVICE_ADDRESS_2); |
| |
| SequentialStrategy strategy = new SequentialStrategy(); |
| strategy.setAlternateAddresses(serviceList); |
| |
| LoadDistributorFeature ldf = new LoadDistributorFeature(); |
| ldf.setStrategy(strategy); |
| |
| CxfEndpoint endpoint = (CxfEndpoint)(endpoint(real)); |
| endpoint.getFeatures().add(ldf); |
| |
| from(proxy).to(endpoint); |
| } |
| }); |
| ctx.start(); |
| |
| } |
| |
| private String tryLoadDistributor(String url) { |
| |
| ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); |
| |
| factory.setServiceClass(HelloService.class); |
| factory.setAddress(url); |
| |
| |
| HelloService client = (HelloService) factory.create(); |
| return client.sayHello(); |
| } |
| |
| |
| } |