본 프로젝트는 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를 생성합니다.
# 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 파일을 다음과 같이 생성합니다.
# mvn install
API 호출
API 호출을 위해서 Basic Auth로 Access Token을 얻습니다.
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를 호출합니다.
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(); } }