Hi, For this kind of question please use the users mailing list. http://camel.apache.org/mailing-lists.html
Cheers, Thomas. > Am 20.03.2016 um 02:54 schrieb Phillip Rhodes <motley.crue....@gmail.com>: > > Camel gang: > > I'm using the Camel CXFRS support to publish a REST service using Camel. > What I want is for the incoming request to actually invoke my service > class, and the response from that to go into the Camel route for further > processing. That appears to happen just fine when using the > performInvocation=true option, BUT... when I do that, it appears that the > method on the resource class is called twice for each incoming REST call. > > My beans.xml looks like this: > > ------------------------------------------------- > <?xml version="1.0" ?> > > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:camel="http://camel.apache.org/schema/spring" > xmlns:cxf="http://camel.apache.org/schema/cxf" > xmlns:jaxrs="http://cxf.apache.org/jaxrs" > xsi:schemaLocation=" > http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd > http://camel.apache.org/schema/spring > http://camel.apache.org/schema/spring/camel-spring.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"> > > <bean id="myTypeConverter" > class="com.fogbeam.exp.camel.cxfrs.typeconverter.MyTypeConverter" /> > <!-- <bean id="jsonProvider" > class="org.apache.cxf.jaxrs.provider.json.JSONProvider" /> --> > <bean id="jsonProvider" > class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" /> > > <cxf:rsServer id="rsServer" > address="http://localhost:9090/CxfRsRouterTest/route" > serviceClass="com.fogbeam.exp.camel.cxfrs.jaxrs.beans.CustomerService" > loggingFeatureEnabled="true" loggingSizeLimit="20"> > <cxf:providers> > <ref bean="jsonProvider" /> > </cxf:providers> > </cxf:rsServer> > > <!-- The camel route context --> > <camel:camelContext id="camelContext"> > <camel:route> > <camel:from uri="cxfrs:bean:rsServer?performInvocation=true" /> > <camel:to uri="log:body?level=INFO" /> > <camel:to uri="file:data/outbox" /> > </camel:route> > </camel:camelContext> > > </beans> > ------------------------------------------------------- > > and the Java code for the class in question looks like this: > > ------------------------------------------------------------------------------- > @Path("/customerservice/") > @Consumes( MediaType.APPLICATION_JSON ) > @Produces( MediaType.APPLICATION_JSON ) > public class CustomerService > { > private static long invocationCount = 0; > Map<Long, Customer> customers = new HashMap<Long, Customer>(); > @POST > @Path("/customers/") > public Customer insertCustomer(Customer customer) { > > System.out.println( "invocationCount: " + (invocationCount++)); > System.out.println("----------------\ninvoking insertCustomer, Customer > name is: " + customer.getName() + > "\n*********************************************" ); > > customers.put(customer.getId(), customer); > > return customer; > } > > } > --------------------------------------------------------------------------------------- > > When I run this, the Camel process logs as follows: > > Mar 19, 2016 9:32:30 PM org.apache.cxf.endpoint.ServerImpl initDestination > INFO: Setting the server's publish address to be > http://localhost:9090/CxfRsRouterTest/route > Mar 19, 2016 9:32:55 PM org.apache.cxf.interceptor.LoggingInInterceptor > INFO: Inbound Message > ---------------------------- > ID: 1 > Address: > http://localhost:9090/CxfRsRouterTest/route/customerservice/customers > Encoding: UTF-8 > Http-Method: POST > Content-Type: application/json > Headers: {accept-encoding=[gzip,deflate], connection=[keep-alive], > Content-Length=[39], content-type=[application/json], > Host=[localhost:9090], User-Agent=[CxfRSClientMain]} > Payload: { "id":"123", "name" > -------------------------------------- > invocationCount: 0 > ---------------- > invoking insertCustomer, Customer name is: Phillip Rhodes > ********************************************* > invocationCount: 1 > ---------------- > invoking insertCustomer, Customer name is: Phillip Rhodes > ********************************************* > Mar 19, 2016 9:32:56 PM org.apache.cxf.interceptor.LoggingOutInterceptor > INFO: Outbound Message > --------------------------- > ID: 1 > Response-Code: 200 > Content-Type: application/json > Headers: {Content-Type=[application/json], Date=[Sun, 20 Mar 2016 01:32:55 > GMT]} > Messages: (message truncated to 20 bytes) > > Payload: {"id":123,"name":"Ph > -------------------------------------- > > > This behavior seems wrong to me. I wouldn't expect my service method to be > called twice when somebody hits the REST endpoint. Can anybody confirm if > this is invalid, and if so, comment if there's a way to fix this? Or is it > a bug in Camel or CXF? Any and all help is much appreciated. > > This is using Camel 2.16.2, FWIW. > > Also, there's a question up on StackOverflow from somebody having what > appears to be the same issue. > > http://stackoverflow.com/questions/35958121/apache-camel-cxfrsendpoint-performinvocation-setting-triggers-invokation-twice > > > Thanks, > > Phil > --- > This message optimized for indexing by NSA PRISM