只有camel cxf中接受的第一个参数

时间:2017-05-03 05:37:20

标签: apache-camel cxf apache-servicemix

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

<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);
}

我面临的问题是,在日志中,身体只是&#34; 1&#34;这是路径参数,这意味着我没有得到我在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 Web服务正在获取参数,但只有第一个以某种方式传递给direct-vm:${header.operationName}。也许我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

所以我明白了。输入POST主体可以作为第一个参数。这使得Exchange对象的主体成为传递的主体。 @PathParam或任何其他参数可以稍后放置,并通过exchange.getIn().getHeader("id")访问,因为所有这些参数都是从标题中访问的。