camel cxf 只接受第一个参数

Only first parameter accepted in camel cxf

我有一个 cxf 服务器在 camel.xml 中定义为:

<cxf:rsServer id="rsServer" address="http://0.0.0.0:9090/orderservice"
    serviceClass="my.pakcage.myClass" />

我有一个 REST 服务定义为:

@POST
@Path("/orders/{id}/something")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response changeOrderSomething(@PathParam("id") String orderId, @Body String somethingPayload) {
    return null;
}

在 Java DSL 中,我有骆驼路线:

from("rsServer?bindingStyle=Default").log("rsServerlogging: ${body}")
            .recipientList(simple("direct-vm:${header.operationName}"));

我在 /orders/1/something 上调用 POST 并且在正文中我传递 json: {"somethingId":"3"} 后来我有一条路线接受 direct-vm:changeOrderSomething 并将其传递给处理器:

@Override
public void process(Exchange exchange) throws Exception {
    String body = exchange.getIn().getBody(String.class);
    LOG.info("exchange.getIn body is: {}", body);
}

我面临的问题是,在日志中,正文只有“1”,这是路径参数,这意味着我没有得到我在 POST 请求中作为正文传递的内容。如果我将 REST 服务中的参数顺序更改为 @Body String somethingPayload, @PathParam("id") String orderId,我得到的是我传递的 json 而不是路径参数。 我该怎么做才能获得我在 REST 中作为参数传递的所有内容?

更新

我在某处调用 Object[] 时出错,因此抛出异常:

org.apache.cxf.interceptor.Fault: Failed to invoke method: [0] on null due to: java.lang.IndexOutOfBoundsException: Key: 0 not found in bean: 1 of type: java.lang.String using OGNL path [[0]] while invoking public javax.ws.rs.core.Response my.package.myClass.changeOrderSomething(java.lang.String,java.lang.String) with params [1, {
"somethingId":"3"}]

我认为这意味着 REST 网络服务正在获取参数,但只有第一个参数以某种方式传递给 direct-vm:${header.operationName}。也许我在这里遗漏了什么?

所以我想通了。输入 POST body 可以作为第一个参数。这使得 Exchange object 的 body 成为传递的 body。 @PathParam 或任何其他参数可以稍后放置并通过 exchange.getIn().getHeader("id") 访问,因为所有此类参数都是从 headers.

访问的