<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
자바 콜아웃이란 무엇인가요?
자바 콜아웃을 처음 사용하는 경우 먼저 자바 콜아웃을 만드는 방법부터 살펴보는 것이 좋습니다.
자바 콜아웃의 오류 처리
자바 콜아웃을 작성할 때 Java 코드에서 커스텀 오류 처리를 수행할 수 있습니다. 대상 예를 들어 커스텀 오류 메시지와 헤더를 반환하거나 오류 정보를 확인할 수 있습니다
기본적인 커스텀 오류 처리 패턴을 보여주는 간단한 자바 콜아웃 예시를 살펴보겠습니다. 샘플은 예외 발생 시 커스텀 오류 메시지를 반환합니다. 또한 오류 스택 추적을 흐름 변수에 배치합니다. 이는 편리한 디버깅 기법일 수 있습니다.
프로젝트 다운로드
간단하게 하기 위해 GitHub의 Apigee api-platform-samples 저장소에서 이 프로젝트를 다운로드할 수 있습니다.
- api-platform-samples를 시스템에 다운로드하거나 복제합니다.
- 원하는 터미널 또는 코드 편집기에서
api-platform-samples/doc-samples/java-error
프로젝트로 이동합니다.
샘플 자바 코드
오류 처리 패턴은 간단합니다. 현재
messageContext.setVariable()
메서드를 사용하는 에지 흐름 컨텍스트 커스텀 오류 정보를 반환하려면 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
를 사용하려는 경우 예시도 포함합니다.
- Maven이 설치되어 있는지 확인합니다.
mvn -version
java-error/buildsetup.sh
스크립트를 실행합니다. 이 스크립트는 로컬 Maven 저장소에 필요한 JAR 종속 항목을 설치합니다.- cd 명령어로
java-error/callout
디렉터리로 이동합니다. - Maven을 실행합니다.
mvn clean package
- 원하는 경우 JAR 파일
edge-custom-policy-java-error.jar
가java-error/apiproxy/resources/java
에 복사되었는지 확인합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.
javac로 컴파일
javac
을 사용하여 코드를 컴파일하려면 java-error
디렉터리에서 다음과 유사한 작업을 수행할 수 있습니다. 필수 JAR 파일은 java-error/lib
디렉터리에 제공됩니다.
- cd 명령어로
api-platform-samples/doc-samples/java-error
로 이동합니다. - 경로에 javac가 있는지 확인합니다.
javac -version
- 다음 javac 명령어를 실행합니다.
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
- JAR 파일을 apiproxy/리소스/자바 디렉터리에 복사합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
프록시 배포 및 호출
배포 스크립트는 ./java-error
디렉터리에서 제공됩니다. 하지만 실행하기 전에 빠른 설정을 수행해야 합니다.
- cd 명령어로
api-platform-samples/doc-samples/java-error
로 이동합니다. - 아직 열지 않았다면
../../setup/setenv.sh
파일을 열고 수정합니다. 사용자 이름 (사용자 이름, 이메일 주소)을 계정, 조직 이름, API 생성에 사용하는 도메인 등 관리 호출도 가능합니다. 예를 들어 에지 클라우드의 경우 도메인은https://api.enterprise.apigee.com
하지만 사용하는 경우 도메인이 다를 수 있습니다 사용할 수 있습니다 setenv.sh
파일을 저장합니다.- 배포 스크립트를 실행합니다.
./deploy.sh
- 배포에 성공하면 호출 스크립트를 실행합니다.
./invoke.sh
호출 스크립트는 다음과 같은 cURL 명령어를 호출합니다.
curl http://$org-$env.$api_domain/java-error
호출에 '이름' 쿼리 매개변수가 포함되어 있지 않으므로 자바 코드에서 런타임 오류가 발생합니다. 프록시는 이 메시지와 헤더를 반환합니다.
- 오류 메시지:
Please specify a name parameter!
- 헤더:
ExceptionClass: java.lang.RuntimeException