Hi,

The difference with camel-cxf proxy is that you have 
setHeader("CamelCxfRsUsingHttpAPI", constant("false”)) in the route, which 
means you will use proxy client to invoke the RS server, so the para types must 
match the one in resourceClasses, without camel-cxf proxy you actually use http 
client. If you have setHeader("CamelCxfRsUsingHttpAPI", constant(“true”)) in 
your router the behaviour should be same with or without proxy.

So if you have setHeader("CamelCxfRsUsingHttpAPI", constant("false”)) , ensure 
you have all parameters available in the payload.

I think we probably can enhance here a bit, instead of throw NPE, throwing 
NoSuchMethodException if can’t find match method in the client proxy.
-------------
Freeman(Yue) Fang

Red Hat, Inc. 





> On Jul 9, 2019, at 7:32 AM, Zoltán Balogh <[email protected]> wrote:
> 
> Hi,
> 
> why the cxfrs producer not accept null query params? Should I set an
> additional parameter to pass null value?
> 
> My route:
>        from("cxfrs:http://localhost:8080/tua";
>                + "?resourceClasses="
>                + "hu.fornax.tua.kodtar.protocol.rest.KodtarREST"
>                + "&loggingFeatureEnabled=true"
>                + "&providers=#jsonProvider")
>                        .removeHeader("Content-Type")
>                        .setHeader("CamelCxfRsUsingHttpAPI", constant("false"))
>                        .log(ESBLog.ESB + "REST request: ${headers}")
>                        .to("cxfrs:http://localhost:8080/tua-kodtar/rest";
>                                +
> "?resourceClasses=hu.fornax.tua.kodtar.protocol.rest.KodtarREST&throwExceptionOnFailure=false&loggingFeatureEnabled=true&providers=#jsonProvider")
>                        .otherwise()
> 
> The rest interface:
> 
>    @Path("/{type}")
>    public List<KodtarDto> getKodtarElemListByType(@PathParam("type")
> KodtarType type, @QueryParam("id") Long id);
> 
> If I call the consumer (cxfrs://http://localhost:8080/tua) to proxy the 
> request:
> 
> 13:23:34,882 ERROR [org.apache.camel.processor.DefaultErrorHandler]
> (default task-2) Failed delivery for (MessageId:
> ID-DESKTOP-A2U86J9-59663-1562671187095-11-1 on ExchangeId:
> ID-DESKTOP-A2U86J9-59663-1562671187095-11-2). Exhausted after delivery
> attempt: 1 caught: java.lang.NullPointerException
> 
> Message History
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId              ProcessorId          Processor
>                                                    Elapsed (ms)
> [route15           ] [route15           ]
> [cxfrs://http://localhost:8080/tua?loggingFeatureEnabled=true&providers=%23json]
> [        65]
> [route15           ] [removeHeader1     ] [removeHeader[Content-Type]
>                                                  ] [         1]
> [route15           ] [setHeader3        ]
> [setHeader[CamelCxfRsUsingHttpAPI]
>        ] [         0]
> [route15           ] [log31             ] [log
>                                                  ] [         3]
> [route15           ] [log32             ] [log
>                                                  ] [         1]
> [route15           ] [choice3           ]
> [when[{header{header(CamelHttpUri)} contains
> /tua/api/file}]choice[when[{header] [        54]
> [route15           ] [to8               ]
> [cxfrs:http://localhost:8080/tua-kodtar/rest?resourceClasses=hu.fornax.tua.kodt]
> [        49]
> 
> Stacktrace
> ---------------------------------------------------------------------------------------------------------------------------------------:
> java.lang.NullPointerException
> at 
> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.getParameterTypes(CxfRsProducer.java:524)
> at 
> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeProxyClient(CxfRsProducer.java:430)
> at 
> org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProducer.java:103)
> at 
> org.apache.camel.impl.SynchronousDelegateProducer.process(SynchronousDelegateProducer.java:62)
> at 
> org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)
> at 
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at 
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
> at 
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> at 
> org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:117)
> at 
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
> at 
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
> at 
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
> at 
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> at 
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
> at 
> org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.syncInvoke(CxfRsInvoker.java:139)
> at 
> org.apache.camel.component.cxf.jaxrs.CxfRsInvoker.performInvocation(CxfRsInvoker.java:72)
> 
> 
> If the queryparam is set with value that is not null the route works
> and calling the service consumer directly without adding "id" it works
> as well (cxfrs:http://localhost:8080/tua-kodtar/rest)....
> If I want to proxy the request getting NullPointerException.
> env: WildFly-Camel 4.9.0
> 
> Thanks for your help!
> Topicfun

Reply via email to