这里我试图将Json数据转换为CSV格式,最后将此文件发送到Ofbiz服务器api,但是当我在URL中发送参数时api端点需要一些身份验证内容我得到了下面的输出。
{“_ ERROR_MESSAGE _”:“调用事件时出错:org.apache.ofbiz.webapp.event.EventHandlerException:找到的URL参数[configId]通过uri [uploadAndImportFileFromCSVFile]传递给安全(https)请求映射调用服务[uploadAndImportFile]的事件;出于安全原因,这是不允许的!数据应该通过使其成为请求主体(表单字段)的一部分而不是请求URL来加密。此外,如果您可以创建https://issues.apache.org/jira/browse/OFBIZ-2330的Jira子任务(如果不存在此错误的子任务,则检查之前)。如果您不确定如何创建Jira问题,请在https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Contributors+Best+Practices之前查看,谢谢提前帮助。“,”sessionId“:” someId .jvm1“,”removePathAlias“:false,”loggedIn“:true,”USERNAME“:”_ _“,”_ LOGIN_PASSED_“:” TRUE”, “webSiteId”: “API”}
之后我使用MultipartBuilder发送请求。
exchange.getIn().setHeader("bearer",token);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
File file =new File("//home/r2/Desktop/ofBizFile/orderFile.csv");
builder.addPart("configId",new StringBody("CON_ID"));
builder.addPart("fileTypeEnumId",new StringBody("CSV_FILE"));
builder.addPart("_uploadedFile_contentType",new StringBody("text/csv"));
builder.addPart("uploadedFile",new FileBody(file));
exchange.getIn().setBody(builder.build());
我也试过这样的事情。
exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69");
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE");
这是我的骆驼路线
//Route 1
from("couchdb:http://localhost:5984/order")
.process(new JsonToCsvProcessor())
//Storing file into local directory
.to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=order-${date:now:yyyyMMdd}.csv");
.to("direct:jsonToCsv");
//Route 2
from("direct:jsonToCsv")
.setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__"))
//For get token
.to("https4://SomeAddress.com/centerAPI/getAuthenticationToken")
//Get the token and set required parameter for route 3
.process(new ProcessorGetToken())
.to("direct:hold");
//Route 3
from("direct:hold")
.setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__"))
.to("https4://SomeAddress.com/centerAPI/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false")
//How I know the file is submited successfuly ?
.to("stream:out").end();
问题是我如何在 Route2 ProcessorGetToken 中为下一个 Route3 发送数据?
答案 0 :(得分:0)
我会在这里向黑暗中射击。阅读您的错误消息:
应该通过将数据作为请求正文(表单字段)的一部分而不是请求URL来加密数据
您是否有关于此集成的文档?我认为您需要对此过程进行更多说明,以及在发送数据之前加密数据需要什么。
另外,尝试将Exchange.HTTP_METHOD
设置为POST
到您的路线中,如下所示:
exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69");
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE");
查看this unit test,了解更多通过HTTP
发送数据的示例。那里还有许多其他测试。