This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch camel-2.23.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.23.x by this push: new c710131 CAMEL-13513 Test and fix c710131 is described below commit c7101312015645575bbdb9ec71fb004ec484774a Author: Antonio Gagliardi <agagl...@agagliar.remote.csb> AuthorDate: Mon May 13 18:11:57 2019 +0200 CAMEL-13513 Test and fix --- .../cxf/jaxrs/CxfRsBlueprintEndpoint.java | 15 +++++-- .../test/cxf/blueprint/CxfRsEndpointBeansTest.java | 49 +++++++++++++++++++++- .../test/cxf/blueprint/CxfRsEndpointBeans.xml | 19 +++++++++ 3 files changed, 79 insertions(+), 4 deletions(-) diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsBlueprintEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsBlueprintEndpoint.java index d6a3d50..cfb7811 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsBlueprintEndpoint.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsBlueprintEndpoint.java @@ -26,6 +26,7 @@ import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.osgi.framework.BundleContext; import org.osgi.service.blueprint.container.BlueprintContainer; +import org.springframework.util.ReflectionUtils; public class CxfRsBlueprintEndpoint extends CxfRsEndpoint { private AbstractJAXRSFactoryBean bean; @@ -91,9 +92,17 @@ public class CxfRsBlueprintEndpoint extends CxfRsEndpoint { @Override protected JAXRSClientFactoryBean newJAXRSClientFactoryBean() { checkBeanType(bean, JAXRSClientFactoryBean.class); - // TODO Need to find a way to setup the JAXRSClientFactory Bean, as the JAXRSClientFactoryBean properties could be changed by the configurer - return (RsClientBlueprintBean)bean; + return (RsClientBlueprintBean)newInstanceWithCommonProperties(); + } + + private RsClientBlueprintBean newInstanceWithCommonProperties() { + RsClientBlueprintBean cfb = new RsClientBlueprintBean(); + + if (bean instanceof RsClientBlueprintBean) { + ReflectionUtils.shallowCopyFieldState(bean, cfb); + } + + return cfb; } - } diff --git a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java index 7f2131d..bf6d752 100644 --- a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java +++ b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java @@ -16,14 +16,28 @@ */ package org.apache.camel.test.cxf.blueprint; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import javax.ws.rs.ProcessingException; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Produce; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.cxf.common.message.CxfConstants; import org.apache.camel.component.cxf.jaxrs.CxfRsEndpoint; +import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.blueprint.CamelBlueprintTestSupport; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; +import org.junit.Assert; import org.junit.Test; public class CxfRsEndpointBeansTest extends CamelBlueprintTestSupport { + @Produce(uri = "direct:startURLOverride") + private ProducerTemplate pT; + @Override protected String getBlueprintDescriptor() { return "org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeans.xml"; @@ -43,7 +57,40 @@ public class CxfRsEndpointBeansTest extends CamelBlueprintTestSupport { JAXRSClientFactoryBean client = serviceEndpoint.createJAXRSClientFactoryBean(); assertEquals("These cxfrs endpoints don't share the same bus", server.getBus().getId(), client.getBus().getId()); } - + @Test + public void testDestinationOverrideURLHandling() { + + try { + context.getRouteController().startRoute("url-override-route"); + } catch (Exception e) { + fail(e.getMessage()); + } + + List<String> expected = Arrays.asList( + "foo1", + "foo2", + "foo1", + "foo2", + "foo1"); + + expected.forEach(host -> pT.send(exchange -> { + Message in = exchange.getIn(); + in.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, false); + in.setHeader(CxfConstants.OPERATION_NAME, "getCustomer"); + in.setBody("Scott"); + in.setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json"); + in.setHeader(Exchange.DESTINATION_OVERRIDE_URL, "http://" + host); + in.setHeader(Exchange.HTTP_METHOD, "GET"); + })); + + MockEndpoint mockEndpoint = getMockEndpoint("mock:resultURLOverride"); + Assert.assertArrayEquals(expected.toArray(), + mockEndpoint.getExchanges().stream() + .map(exchange -> exchange.getProperty(Exchange.EXCEPTION_CAUGHT, ProcessingException.class).getCause().toString()) + .map(exceptionMessage -> exceptionMessage.split("\\: ")[1]) + .collect(Collectors.toList()).toArray()); + + } } diff --git a/tests/camel-blueprint-cxf-test/src/test/resources/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeans.xml b/tests/camel-blueprint-cxf-test/src/test/resources/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeans.xml index 592cdc8..71da6c8 100644 --- a/tests/camel-blueprint-cxf-test/src/test/resources/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeans.xml +++ b/tests/camel-blueprint-cxf-test/src/test/resources/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeans.xml @@ -45,6 +45,13 @@ </cxf:providers> </cxf:rsClient> + <cxf:rsClient id="restClient" address="http://foo" + serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceResource" + loggingFeatureEnabled="true"> + <cxf:providers> + <ref component-id="jsonProvider" /> + </cxf:providers> + </cxf:rsClient> <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider" /> @@ -55,6 +62,18 @@ <camel:to uri="mock:result" /> </camel:route> + + <camel:route autostart="false" id="url-override-route"> + + <camel:onException> + <camel:exception>javax.ws.rs.ProcessingException</camel:exception> + <camel:to uri="mock:resultURLOverride" /> + </camel:onException> + + <camel:from uri="direct:startURLOverride" /> + <camel:to uri="cxfrs:bean:restClient" /> + </camel:route> + </camel:camelContext> </blueprint>