camel http v/s cxfrs component to consume REST service

2015-08-19 Thread calyan.bandi
Hi,

I am trying to consume a REST webservice using the cxfrs component. The code
looks as below:

http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet";
serviceClass="org.examples.camel.camel_cxfrs_client.HelloWorldIntf">








And the corresponding route is as follows. From my java program i am
invoking this route which invokes the service and i am able to see the
response.




GET



 



In the console output i can see the following output:

ID: 1
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: text/plain
Headers: {content-type=[text/plain], Date=[Wed, 19 Aug 2015 12:18:31 GMT],
Server=[Apache-Coyote/1.1], transfer-encoding=[chunked]}
Payload: Hi There!!!
--
[  main] Tracer INFO  >>>
(route1) cxfrs://bean:restClient?synchronous=true --> log[response received
from service is.${body}] <<< Pattern:InOnly,
Headers:{CamelHttpMethod=GET, BodyType:null, Body:[Body is null]
[  main] route1 INFO 
response received from service is.
[  main] Tracer INFO  >>>
(route1) log[response received from service is.${body}] -->
ref:responseProcessor <<< Pattern:InOnly, Headers:{CamelHttpMethod=GET,
BodyType:null, Body:[Body is null]


As you can see i am getting my response from the Web service in the Payload
part. It is a simple GET request that returns a string - "Hi There!!!". I am
trying to display the same using the ${body} in the log component,  but what
i am getting is null Body and the BodyType too is set to null.

I tried the same using camel http component. The route looks as below:
   



GET

http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet";
/>  

 




Console Output looks as below.

[ main] Tracer INFO  >>> (route1) from(direct://start) --> log[invoking the
rest service] <<< Pattern:InOnly, Headers: BodyType:null, Body:[Body is
null]
[ main] route1 INFO  invoking the rest service
[ main] Tracer INFO  >>> (route1) log[invoking the rest service] -->
setHeader[CamelHttpMethod] <<< Pattern:InOnly, Headers: BodyType:null,
Body:[Body is null]
[ main] Tracer INFO  >>> (route1) setHeader[CamelHttpMethod] -->
http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet <<<
Pattern:InOnly, Headers:{CamelHttpMethod=GET}, BodyType:null, Body:[Body is
null]
[ main] Tracer INFO  >>> (route1)
http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet -->
log[response received from service is.${body}] <<< Pattern:InOnly,
Headers:{Content-Type=text/plain, CamelHttpResponseCode=200,
Server=Apache-Coyote/1.1, Transfer-Encoding=chunked, CamelHttpMethod=GET,
Date=Wed, 19 Aug 2015 12:22:56 GMT},
BodyType:org.apache.camel.converter.stream.CachedOutputStream.WrappedInputStream,
Body:[Body is instance of java.io.InputStream]
[ main] route1 INFO  response received from service is.Hi There!!!



Using http component, i am able to capture the response in the ${body} which
i can use further down in the route. I looked into the documentatino for the
cxfrs component to understand the behavior of the rs:Client module but it is
of less use. 

Can some body please provide some explaination on the below points.  

1) Why is it that for cxfrs component the payload was not set in the message
body? 
2) Any advantages/disadvantages of choosing cxfrs over http and vice-versa?
3) When using the cxfrs component, there is an option to set  httpClientAPI
to either true/false. When this value is set to true, CxfRsProducer will use
HttpClientAPI to invoke the service. What does this mean? Are there other
APIs available to invoke the service?  

Camel core and components Version - 2.13.2
CXF Version - 2.7.11

Thanks,
Kalyan





--
View this message in context: 
http://camel.465427.n5.nabble.com/camel-http-v-s-cxfrs-component-to-consume-REST-service-tp5770829.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: camel http v/s cxfrs component to consume REST service

2015-08-19 Thread Sergey Beryozkin

Hi

I've checked the latest source, I see:

// set response
 if (exchange.getPattern().isOutCapable()) {
 // ... 
exchange.getOut().setBody(binding.bindResponseToCamelBody(response, 
exchange));

}


The producer can optionally invoke against the proxy interface 
representing the target server API.


CXFRS depends on CXF JAX-RS implementation. If working with CXF or 
JAX-RS is not important then you'll find many alternatives in Camel...


Thanks, Sergey

On 19/08/15 13:40, calyan.bandi wrote:

Hi,

I am trying to consume a REST webservice using the cxfrs component. The code
looks as below:

http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet";
serviceClass="org.examples.camel.camel_cxfrs_client.HelloWorldIntf">








And the corresponding route is as follows. From my java program i am
invoking this route which invokes the service and i am able to see the
response.




GET



 

 

In the console output i can see the following output:

ID: 1
Response-Code: 200
Encoding: ISO-8859-1
Content-Type: text/plain
Headers: {content-type=[text/plain], Date=[Wed, 19 Aug 2015 12:18:31 GMT],
Server=[Apache-Coyote/1.1], transfer-encoding=[chunked]}
Payload: Hi There!!!
--
[  main] Tracer INFO  >>>
(route1) cxfrs://bean:restClient?synchronous=true --> log[response received
from service is.${body}] <<< Pattern:InOnly,
Headers:{CamelHttpMethod=GET, BodyType:null, Body:[Body is null]
[  main] route1 INFO
response received from service is.
[  main] Tracer INFO  >>>
(route1) log[response received from service is.${body}] -->
ref:responseProcessor <<< Pattern:InOnly, Headers:{CamelHttpMethod=GET,
BodyType:null, Body:[Body is null]


As you can see i am getting my response from the Web service in the Payload
part. It is a simple GET request that returns a string - "Hi There!!!". I am
trying to display the same using the ${body} in the log component,  but what
i am getting is null Body and the BodyType too is set to null.

I tried the same using camel http component. The route looks as below:




GET

http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet";
/>   

 

 


Console Output looks as below.

[ main] Tracer INFO  >>> (route1) from(direct://start) --> log[invoking the
rest service] <<< Pattern:InOnly, Headers: BodyType:null, Body:[Body is
null]
[ main] route1 INFO  invoking the rest service
[ main] Tracer INFO  >>> (route1) log[invoking the rest service] -->
setHeader[CamelHttpMethod] <<< Pattern:InOnly, Headers: BodyType:null,
Body:[Body is null]
[ main] Tracer INFO  >>> (route1) setHeader[CamelHttpMethod] -->
http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet <<<
Pattern:InOnly, Headers:{CamelHttpMethod=GET}, BodyType:null, Body:[Body is
null]
[ main] Tracer INFO  >>> (route1)
http://localhost:8080/camel-cxf-rest/webapi/myapp/hello/greet -->
log[response received from service is.${body}] <<< Pattern:InOnly,
Headers:{Content-Type=text/plain, CamelHttpResponseCode=200,
Server=Apache-Coyote/1.1, Transfer-Encoding=chunked, CamelHttpMethod=GET,
Date=Wed, 19 Aug 2015 12:22:56 GMT},
BodyType:org.apache.camel.converter.stream.CachedOutputStream.WrappedInputStream,
Body:[Body is instance of java.io.InputStream]
[ main] route1 INFO  response received from service is.Hi There!!!



Using http component, i am able to capture the response in the ${body} which
i can use further down in the route. I looked into the documentatino for the
cxfrs component to understand the behavior of the rs:Client module but it is
of less use.

Can some body please provide some explaination on the below points.

1) Why is it that for cxfrs component the payload was not set in the message
body?
2) Any advantages/disadvantages of choosing cxfrs over http and vice-versa?
3) When using the cxfrs component, there is an option to set  httpClientAPI
to either true/false. When this value is set to true, CxfRsProducer will use
HttpClientAPI to invoke the service. What does this mean? Are there other
APIs available to invoke the service?

Camel core and components Version - 2.13.2
CXF Version - 2.7.11

Thanks,
Kalyan





--
View this message in context: 
http://camel.465427.n5.nabble.com/camel-http-v-s-cxfrs-component-to-consume-REST-service-tp5770829.html
Sent from the Camel - Users mailing list archive at Nabble.com.