0

我目前正在从事 Pentaho PDI 项目,我需要将报告上传到 BA/BI 服务器存储库(URL:***/api/repo/publish/file)。我想通过使用 HTTP Post 步骤和生成请求实体字段的用户定义的 Java 类步骤来实现这一点。但是我没有设法想出一个工作代码。由于我的老板不希望我使用外部库,所以我坚持使用kettle 部署的 org.apache.commons.httpclient 类。我的方法是创建一个包含 FilePart 和 StringParts 的 Part[] 数组。下一步是创建一个 MultipartRequestEntity,然后将其写入 ByteArrayOutputStream。

File filePart = new File(fileReport);FilePart fileUpload  = new FilePart("fileUpload", filePart);
StringPart applyAclPermissions = new StringPart("applyAclPermissions","true");
StringPart overwriteAclPermissions = new StringPart("overwriteAclPermissions","true");
StringPart overwriteFile  = new StringPart("overwriteFile", "true");
StringPart logLevel = new StringPart("logLevel","TRACE");
StringPart retainOwnership = new StringPart("retainOwnership", "false");
StringPart fileNameOverride = new StringPart("fileNameOverride","blablub.prpt");
StringPart importDir = new StringPart("importDir", "/public");

Part[] parts = {
    fileUpload,
    overwriteFile,
    logLevel,
    retainOwnership,
    fileNameOverride,
    importDir
};

HttpMethodParams params = new HttpMethodParams();
MultipartRequestEntity requestEntity = new MultipartRequestEntity(
parts, params
);

ByteArrayOutputStream bOutput = new ByteArrayOutputStream();
requestEntity.writeRequest(bOutput);
String requestEntityValue = new String(bOutput.toByteArray());
String contentType = requestEntity.getContentType();
String contentLength = String.valueOf(requestEntity.getContentLength());


Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
get(Fields.Out, "requestEntityValue").setValue(outputRow, requestEntityValue);
get(Fields.Out, "contentType").setValue(outputRow, contentType);
get(Fields.Out, "contentLength").setValue(outputRow, contentLength);
putRow(data.outputRowMeta, outputRow);


return true;

在下一步中,数据通过 HTTP Post Step 发送。但是服务器对这种方法并不满意。

你们知道我做错了什么吗?

谢谢你的帮助!

4

1 回答 1

2

从 5.4 开始,有一个与 BA 服务器交互的特殊插件:https ://github.com/pentaho/pdi-platform-utils-plugin 。我强烈建议你看看它。

至于自己实现上传,您可以查看插件源,例如,Pentaho Report Designer 中的此实用程序:https ://github.com/pentaho/pentaho-reporting/blob/master/libraries/libpensol/来源/org/pentaho/reporting/libraries/pensol/PublishRestUtil.java

希望这会有所帮助。

于 2015-11-27T10:05:01.720 回答