Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

본 프로젝트는 NiFi에서 제공하는 API를 Java 호출할 수 있도록 Java API를 제공합니다. Github Repository는 https://github.com/TheOpenCloudEngine/nifi-api-java 입니다.

Overview

  • NiFi 소스코드를 다운로드하여 swagger.json 파일의 위치를 확인합니다.
  • Swagger Codegen으로 swagger.json 파일을 로딩하여 Java로 변환합니다.
  • 변환된 코드에서 NiFi 상위버전 부터 SSL 필수이므로 SSL 인증서 처리 및 OAuth 인증 처리 부분을 수정합니다.
    • OkHTTP를 사용하므로 SSL을 무시하도록 하고 Basic Auth, OAuth2를 추가하도록 합니다.

Swagger Codegen

Swagger Codegen을 이용하여 Client API를 생성합니다.

코드 블럭
languagetext
linenumberstrue
# cd nifi-1.19.1
# mvn -Dmaven.test.skip=true install
# wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
# java -jar swagger-codegen-cli-2.2.1.jar generate -i ../nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/target/swagger-ui/swagger.json -l java


Installation

Maven Install을 통해서 JAR 파일을 다음과 같이 생성합니다.

코드 블럭
languagetext
linenumberstrue
# mvn install

API 호출

API 호출을 위해서 Basic Auth로 Access Token을 얻습니다.

코드 블럭
languagejava
linenumberstrue
import io.swagger.client.*;
import io.swagger.client.auth.*;
import io.swagger.client.model.*;
import io.swagger.client.api.AccessApi;

import java.io.File;
import java.util.*;

public class AccessApiExample {

    public static void main(String[] args) {
        AccessApi accessApi = new AccessApi();
        ApiClient client = new ApiClient(true);
        client.setDebugging(true);
        client.addDefaultHeader("Authorization", getBasicAuthenticationHeader("admin", "adminadminadmin"));
        client.setBasePath("https://localhost:8443/nifi-api");

        accessApi.setApiClient(client);
        String accessToken = accessApi.createAccessToken("admin", "adminadminadmin");
    }
}

Access Token을 이용하여 API를 호출합니다.

코드 블럭
languagejava
linenumberstrue
import io.swagger.client.*;
import io.swagger.client.auth.*;
import io.swagger.client.model.*;
import io.swagger.client.api.AccessApi;

import java.io.File;
import java.util.*;

public class ResourcesApiExample {

    public static void main(String[] args) {
        ResourcesApi api = new ResourcesApi();

        ApiClient client = new ApiClient(true);
        client.setDebugging(true);
        client.setBasePath("https://localhost:8443/nifi-api");
        client.addDefaultHeader("Authorization", String.format("Bearer %s", accessToken));
        api.setApiClient(client);

        ResourcesEntity response = api.getResources();
    }
}