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