【问题标题】:Uploading a template in apache NiFi using Rest API in Java使用 Java 中的 Rest API 在 apache NiFi 中上传模板
【发布时间】:2017-09-28 11:44:55
【问题描述】:

我正在尝试创建一个 REST API 调用以将模板导入到我的 NiFi UI 帖子中,该帖子实例化相同。

下面是我试过的代码,

String siteUrl = "localhost";
String portNumber = "8080";
String pId = "f80896d4-c71f-3395-d527-8c6bd69f44d0";
String pathname = "D:\\Users\\bramasam\\Downloads\\BalaBackUp.xml";
String restString = "http://" + siteUrl + ":" + portNumber + "/nifi-api/process-groups/" + pId + "/templates/upload";
HttpPost httpPost = new HttpPost(restString);

File fileObj = new File(pathname);

httpPost.addHeader("Content-type", "multipart/form-data");

FileEntity fileEntity = new FileEntity(fileObj, ContentType.MULTIPART_FORM_DATA);

httpPost.setEntity(fileEntity);

HttpClient httpClient = HttpClientBuilder.create().build();
HttpResponse response = httpClient.execute(httpPost);
StatusLine status = response.getStatusLine();
System.out.println(status.getStatusCode());

下面是我尝试从中导入的 BalaBackUp.xml 文件中的 {id}

<?xml version="1.0" ?>
<template encoding-version="1.1">
  <description></description>
  <groupId>bd5dba8b-015d-1000-1fd5-450ede38b7a5</groupId>
  <name>BalaBackUp</name>
  <snippet>
    <processGroups>
      <id>f80896d4-c71f-3395-0000-000000000000</id>
      <parentGroupId>29a5776d-9728-3fee-0000-000000000000</parentGroupId>
      <position>
        <x>0.0</x>
        <y>0.0</y>
      </position>
      <comments></comments>
      <contents>
        <connections>
          <id>c0d0e26d-5ee2-3d60-0000-000000000000</id>
          <parentGroupId>f80896d4-c71f-3395-0000-000000000000</parentGroupId>
          <backPressureDataSizeThreshold>1 GB</backPressureDataSizeThreshold>
          <backPressureObjectThreshold>10000</backPressureObjectThreshold>
          <destination>
            <groupId>f80896d4-c71f-3395-0000-000000000000</groupId>
            <id>1f9e926a-71fc-356f-0000-000000000000</id>
            <type>PROCESSOR</type>

我收到 500 的响应代码和以下响应

HttpResponseProxy{HTTP/1.1 500 Internal Server Error [Date: Thu, 28 Sep 2017 09:43:28 GMT, X-Frame-Options: SAMEORIGIN, Content-Type: text/plain, Transfer-Encoding: chunked, Server: Jetty(9.4.3.v20170317)] ResponseEntityProxy{[Content-Type: text/plain,Chunked: true]}}

你能帮我解决我所缺少的吗?

【问题讨论】:

    标签: java apache rest apache-nifi


    【解决方案1】:

    HttpClient 应该使用DefaultHttpClient() 而不是HttpClientBuilder 构建。下面是代码sn-p。此外,您必须 addPart 名称“模板”,以便 nifi 将其识别为模板

    File file = new File(pathname);
    
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(restString);
    
    FileBody uploadFilePart = new FileBody(file);
    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("template", uploadFilePart);
    httpPost.setEntity(reqEntity);
    
    HttpResponse response = httpclient.execute(httpPost);
    

    MultipartEntity() POST 请求的参考网址如下 How can I make a multipart/form-data POST request using Java?

    【讨论】:

      【解决方案2】:

      您需要检查logs/nifi-app.log 文件中的错误,该文件将解释HTTP 500 异常是什么。当您通过 Apache NiFi UI 上传模板时,请尝试使用浏览器的开发人员工具面板检查底层网络请求,因为这些请求与以编程方式执行此操作所需的请求相同。

      我假设复制的模板 XML 不完整,因为它不是一个有效的模板,如果按原样提供肯定会导致内部服务器异常。

      【讨论】:

      • 我验证了 XML 文件并且它是完整的(并且我能够手动上传它)。另外,我检查了 nifi-app.log,但找不到 HTTP 500 异常的任何错误。是我将 XML 文件构建为“multipart/form-data”的方式吗?
      • 也许是这样,但您的 XML 文件仅显示 24 行,并且它不会关闭任何开始标签。我看到的不是有效的 XML。内部 NiFi 框架或处理器执行中的任何错误都会导致错误堆栈跟踪打印到 nifi-app 日志。我不确定为什么您看不到导致 HTTP 500 错误的错误。
      • 很抱歉沟通中的失误。我只粘贴了 XML 示例以显示我从哪里获得 {id} 字段。它是一个完整的 XML。
      • 我在以下链接中的 Hortornworks 社区有另一个建议。但是,这也行不通community.hortonworks.com/questions/139475/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多