[ 
https://issues.apache.org/jira/browse/CAMEL-12541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16492085#comment-16492085
 ] 

ASF GitHub Bot commented on CAMEL-12541:
----------------------------------------

GitHub user willianantunes opened a pull request:

    https://github.com/apache/camel/pull/2350

    CAMEL-12541: rsClient does not work programmatically, only with XML

    When the endpoint is created with the bean (see 
[here](https://github.com/apache/camel/blob/39c0d63d923bfe9236834ecb1c4470bb7e9e7eaa/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsComponent.java#L76)
 how it's found) is always available and is used for the consumer approach (see 
the method 
[newJAXRSServerFactoryBean](https://github.com/apache/camel/blob/39c0d63d923bfe9236834ecb1c4470bb7e9e7eaa/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java#L65)).
 
    
    Now the [same 
behavior](https://github.com/willianantunes/camel/blob/30a4bdbf0975c8efc06d504b751e88ec4af5e64a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java#L71)
 is used for producer approach as nowadays [we always return a new instance of 
SpringJAXRSClientFactoryBean](https://github.com/apache/camel/blob/39c0d63d923bfe9236834ecb1c4470bb7e9e7eaa/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java#L71).

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/willianantunes/camel 
cxfrs-bean-programmatically

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/camel/pull/2350.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #2350
    
----
commit 30a4bdbf0975c8efc06d504b751e88ec4af5e64a
Author: Willian Antunes <willian.lima.antunes@...>
Date:   2018-05-27T16:20:53Z

    CAMEL-12541: Use configured bean instead of creating a new
    
    When the endpoint is created the bean is always available and is used
    for the consumer approach (newJAXRSServerFactoryBean). Now the same
    behavior is used for producer approach (newJAXRSClientFactoryBean).

----


> camel-cxfrs - rsClient does not work programmatically, only with XML
> --------------------------------------------------------------------
>
>                 Key: CAMEL-12541
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12541
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxfrs
>    Affects Versions: 2.21.1
>            Reporter: Willian Antunes
>            Priority: Major
>
> As described in the documentation you can use [camel-cxfrs as 
> producer|https://github.com/apache/camel/blob/39c0d63d923bfe9236834ecb1c4470bb7e9e7eaa/components/camel-cxf/src/main/docs/cxfrs-component.adoc#how-to-configure-the-rest-endpoint-in-camel].
>  You have some approaches like using a proxy created from a interface which 
> maps all the services available in the targeted REST web service (sample 
> [here|https://github.com/willianantunes/honesto-sqn/blob/d4bf48257fc64a4725894c7f07c24bb1a516d410/src/main/java/br/com/willianantunes/serenata/JarbasAPI.java#L14]).
>  As I'm using Spring Boot and Apache Camel I may create a bean through XML or 
> programmatically. 
> h4. Creating the test sample
> I'm testing with the following:
> https://gist.github.com/willianantunes/58979bfb91ee30c7ff4e235940e60880
> You can find a copy of JarbasAPI 
> [here|https://github.com/willianantunes/honesto-sqn/blob/d4bf48257fc64a4725894c7f07c24bb1a516d410/src/main/java/br/com/willianantunes/serenata/JarbasAPI.java#L14].
> h4. When rsClient producer works as expected
> When I do using the first approach using the configuration below everything 
> works fine:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>        xmlns:cxf="http://camel.apache.org/schema/cxf";
>        xmlns:jaxrs="http://cxf.apache.org/jaxrs";
>        xmlns:util="http://www.springframework.org/schema/util";
>        xsi:schemaLocation="
>        http://www.springframework.org/schema/beans 
> http://www.springframework.org/schema/beans/spring-beans.xsd
>        http://www.springframework.org/schema/util 
> http://www.springframework.org/schema/util/spring-util.xsd
>        http://camel.apache.org/schema/cxf 
> http://camel.apache.org/schema/cxf/camel-cxf.xsd
>        http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
>        http://camel.apache.org/schema/spring 
> http://camel.apache.org/schema/spring/camel-spring.xsd";>
>     <cxf:rsClient id="serviceEndpointViaXML"
>                   address="https://jarbas.serenata.ai"; 
>                   serviceClass="br.com.willianantunes.serenata.JarbasAPI"/>
> </beans>
> {code}
> h4. When rsClient producer does not work as expected
> XML works fine, but when I do the same thing programmatically it doesn't.
> {code:java}
>     @Bean("serviceEndpoint")
>     public SpringJAXRSClientFactoryBean serviceEndpoint() {
>         SpringJAXRSClientFactoryBean clientFactoryBean = new 
> SpringJAXRSClientFactoryBean();
>         clientFactoryBean.setAddress("https://jarbas.serenata.ai";);
>         clientFactoryBean.setServiceClass(JarbasAPI.class);
>         return clientFactoryBean;
>     }
> {code}
> Although it has no difference compared to XML, it does not work.
> h4. When does it fail?
> Debugging you can see the following:
> * The bean is correctly got 
> [here|https://github.com/apache/camel/blob/a4cfea6823d31eacf57489ffffe1ffeead9a256b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsComponent.java#L76]
>  is CxfRsComponent.
> * When a message is sent and there is a to command with the URI 
> cxfrs:bean:serviceEndpoint, I see the message arriving 
> [here|https://github.com/apache/camel/blob/a4cfea6823d31eacf57489ffffe1ffeead9a256b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java#L94]
>  in CxfRsProducer.
> * The method 
> [invokeProxyClient|https://github.com/apache/camel/blob/a4cfea6823d31eacf57489ffffe1ffeead9a256b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java#L103]
>  is called.
> * The SpringJAXRSClientFactoryBean which I provided as bean is ignored. A new 
> one is created 
> [here|https://github.com/apache/camel/blob/834a59910e4b6b8d089e229b39f6c8673e7c3f9a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java#L414]
>  and when it arrives to the next line the method invoked is from 
> [CxfRsSpringEndpoint|https://github.com/apache/camel/blob/834a59910e4b6b8d089e229b39f6c8673e7c3f9a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java]
>  which uses 
> [configurer.ConfigureBean|https://github.com/apache/camel/blob/834a59910e4b6b8d089e229b39f6c8673e7c3f9a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java#L77]
>  that only works with XML.
> h4. Versions used
> * Spring Boot: 1.5.12.RELEASE
> * Apache Camel: 2.21.1
> h4. Proposal to make it works
> The idea obviously is to make both approaches work, maybe merging the 
> configuration or as long as the user is providing a custom 
> SpringJAXRSClientFactoryBean then making it the standard instead of creating 
> a new one for each request as it is available in the CxfRsSpringEndpoint from 
> the start.
> ----
> If you want to understand more read starts from 
> [here|https://gitter.im/apache/apache-camel?at=5b09f7a54eaffb692d5adb43] 
> until the [end of 
> conversation|https://gitter.im/apache/apache-camel?at=5b0a13cb54ce23136159a2c0]
>  on Gitter.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to