자바 콜아웃 오류 처리 방법

Apigee X 문서를 보고 있습니다.
Apigee Edge 문서 보기

자바 콜아웃이란 무엇인가요?

자바 콜아웃을 처음 사용하는 경우 먼저 자바 콜아웃을 만드는 방법부터 살펴보는 것이 좋습니다.

자바 콜아웃의 오류 처리

자바 콜아웃을 작성할 때 Java 코드에서 커스텀 오류 처리를 수행할 수 있습니다. 예를 들어 커스텀 오류 메시지와 헤더를 반환하거나 Apigee의 프록시 흐름에 오류 정보가 있는 흐름 변수를 설정할 수 있습니다.

기본적인 커스텀 오류 처리 패턴을 보여주는 간단한 자바 콜아웃 예시를 살펴보겠습니다. 샘플은 예외 발생 시 커스텀 오류 메시지를 반환합니다. 또한 오류 스택 추적을 흐름 변수에 배치합니다. 이는 편리한 디버깅 기법일 수 있습니다.

프로젝트 다운로드

간단하게 하기 위해 GitHub의 Apigee api-platform-samples 저장소에서 이 프로젝트를 다운로드할 수 있습니다.

  1. api-platform-samples를 시스템에 다운로드하거나 복제합니다.
  2. 원하는 터미널 또는 코드 편집기에서 api-platform-samples/doc-samples/java-error 프로젝트로 이동합니다.

샘플 자바 코드

오류 처리 패턴은 간단합니다. messageContext.setVariable() 메서드를 사용하여 현재 Apigee 흐름 컨텍스트에서 흐름 변수를 설정할 수 있습니다. 커스텀 오류 정보를 반환하려면 ExecutionResult 인스턴스를 생성하고 해당 인스턴스에 메서드를 호출하여 오류 응답 및 헤더를 설정합니다.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;
import com.apigee.flow.execution.Action;

import org.apache.commons.lang.exception.ExceptionUtils;

public class JavaError implements Execution {
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

        try {

                String name = messageContext.getMessage().getHeader("username");

                if (name != null && name.length()>0) {
                        messageContext.getMessage().setContent("Hello, " + name + "!");
                        messageContext.getMessage().removeHeader("username");

                } else {
                        throw new RuntimeException("Please specify a name parameter!");
                }

                return ExecutionResult.SUCCESS;

        } catch (RuntimeException ex) {

            ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT);

            //--Returns custom error message and header
            executionResult.setErrorResponse(ex.getMessage());
            executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName());

            //--Set flow variables -- may be useful for debugging.
            messageContext.setVariable("JAVA_ERROR", ex.getMessage());
            messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex));
            return executionResult;
        }
    }
}


Maven으로 코드 컴파일

Maven로 컴파일할 수 있도록 프로젝트가 설정되었습니다. javac를 사용하려는 경우 예시도 포함합니다.

  1. Maven이 설치되어 있는지 확인합니다.
    mvn -version
    
  2. java-error/buildsetup.sh 스크립트를 실행합니다. 이 스크립트는 로컬 Maven 저장소에 필요한 JAR 종속 항목을 설치합니다.
  3. cd 명령어로 java-error/callout 디렉터리로 이동합니다.
  4. Maven을 실행합니다.
    mvn clean package
    
  5. 원하는 경우 JAR 파일 edge-custom-policy-java-error.jarjava-error/apiproxy/resources/java에 복사되었는지 확인합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.

javac로 컴파일

javac을 사용하여 코드를 컴파일하려면 java-error 디렉터리에서 다음과 유사한 작업을 수행할 수 있습니다. 필수 JAR 파일은 java-error/lib 디렉터리에 제공됩니다.

  1. cd 명령어로 api-platform-samples/doc-samples/java-error로 이동합니다.
  2. 경로에 javac가 있는지 확인합니다.

    javac -version
    
  3. 다음 javac 명령어를 실행합니다.

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
    
  4. JAR 파일을 apiproxy/리소스/자바 디렉터리에 복사합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java
    

프록시 배포 및 호출

배포 스크립트는 ./java-error 디렉터리에서 제공됩니다. 하지만 실행하기 전에 빠른 설정을 수행해야 합니다.

  1. cd 명령어로 api-platform-samples/doc-samples/java-error로 이동합니다.
  2. 프록시를 배포하는 가장 간단한 방법은 ZIP 파일로 번들해서 프록시 번들을 Apigee 조직의 환경에 업로드하는 것입니다. API 프록시 만들기를 참조하세요. 프록시 번들 업로드 옵션을 사용해야 합니다. Apigee 커뮤니티의 프록시 번들에 API 프록시 업로드에 대한 도움말 및 유용한 정보를 참조하세요.
  3. 프록시가 배포되면 다음을 호출합니다.
    curl  https://$HOSTNAME/java-error

    호출에 '이름' 쿼리 매개변수가 포함되어 있지 않으므로 자바 코드에서 런타임 오류가 발생합니다. 프록시는 이 메시지와 헤더를 반환합니다.

  • 오류 메시지: Please specify a name parameter!
  • 헤더: ExceptionClass: java.lang.RuntimeException