【发布时间】:2018-07-10 13:37:11
【问题描述】:
我对简单的 Apache Camel HTTP->Python->HTTP 路由有疑问。
目标是使用 JSON 设置一个接受两个乘法因子的 Camel 路由。格式如下:{"a":5,"b":5}
然后应将传递的 JSON 对象传递给 Python 脚本,在该脚本中计算两个因素的乘积,然后将结果作为 JSON 对象返回。
当我向 Camel 发出 POST 请求并将上述 JSON 传递给正文时,我在 Camel 中收到一条错误消息。
14:33:33.474 [Restlet-698774930] ERROR org.apache.camel.component.exec.ExecProducer - The command ExecCommand [args=[src/main/resources/post.py, RAW({, a, :1,, b, :100})], executable=python, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=false] returned exit value 1
问题似乎是引号。 这些确保 JSON 对象不被识别为一个参数,而是被拆分为多个参数。
在 Camel 的文档中,您会发现一些关于“RAW()”的内容,在这种情况下它不起作用。
当然,Python 脚本会死掉,因为第二个参数不是 JSON 对象。但是,如果您从命令行手动运行它,它可以毫无问题地工作。这意味着错误不在脚本中,而是在 Camel 的调用中。
package com.sample.simplecalc;
import org.apache.camel.builder.RouteBuilder;
public class MyRouteBuilder extends RouteBuilder {
public void configure() throws Exception{
restConfiguration()
.component("restlet")
.host("localhost").port("8080")
.enableCORS(false)
;
rest().path("/api").produces("application/json").consumes("application/json")
.get()
.toD("exec:python?args=src/main/resources/get.py")
.post()
.toD("exec:python?args=src/main/resources/post.py RAW(${body})");
}
}
【问题讨论】:
标签: java json apache-camel