Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
자바 콜아웃을 처음 사용해 보는 경우 자바 콜아웃을 만드는 방법부터 시작하는 것이 좋습니다.
이 쿡북 샘플은 프록시 흐름의 컨텍스트 내에서 커스텀 자바 코드를 실행하는 간단한 JavaCallout 정책을 만드는 방법을 보여줍니다.
샘플 코드는 어떤 작업을 하나요?
이 샘플의 API 프록시는 간단한 JSON 응답을 반환하는 대상 서비스를 호출합니다. 자바 콜아웃 정책은 대상 응답 흐름에 배치됩니다. 자바 코드는 응답의 헤더와 콘텐츠를 대문자로 변환합니다. 간단한 예이지만 Edge의 API 프록시 컨텍스트에서 커스텀 자바 코드를 작동시키는 방법을 보여줍니다.
샘플 사용해 보기
프로젝트 다운로드
간단하게 하기 위해 GitHub의 Apigee api-platform-samples 저장소에서 이 프로젝트를 다운로드할 수 있습니다.
- api-platform-samples를 시스템에 다운로드하거나 복제합니다.
- 원하는 터미널 또는 코드 편집기에서
api-platform-samples/doc-samples/java-cookbook프로젝트로 이동합니다.
Maven으로 코드 컴파일
Maven로 컴파일할 수 있도록 프로젝트가 설정되었습니다.
javac를 사용하려면 Maven 예시 다음에 예시도 포함합니다.
- Maven이 설치되어 있는지 확인합니다.
mvn -version
java-cookbook/buildsetup.sh스크립트를 실행합니다. 이 스크립트는 로컬 Maven 저장소에 필요한 JAR 종속 항목을 설치합니다.- cd 명령어로
java-cookbool/callout디렉터리로 이동합니다. - Maven을 실행합니다.
mvn clean package
- 원하는 경우 JAR 파일
edge-custom-policy-java-cookbook.jar가java-cookbook/apiproxy/resources/java에 복사되었는지 확인합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.
javac로 컴파일
javac을 사용하여 코드를 컴파일하려면 java-cookbook 디렉터리에서 다음과 유사한 작업을 수행할 수 있습니다. 필수 JAR 파일은 java-cookbook/lib 디렉터리에 제공됩니다.
- cd 명령어로
api-platform-samples/doc-samples/java-cookbook로 이동합니다. - 경로에 javac가 있는지 확인합니다.
javac -version
- 다음 javac 명령어를 실행합니다.
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
- JAR 파일을 apiproxy/리소스/자바 디렉터리에 복사합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.
cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
프록시 배포 및 호출
배포 스크립트는 ./java-cookbook 디렉터리에서 제공됩니다. 하지만 실행하기 전에
간단한 설정을 해야 합니다.
- cd 명령어로
api-platform-samples/doc-samples/java-cookbook로 이동합니다. - 아직 하지 않은 경우
../../setup/setenv.sh파일을 열고 Apigee 계정 정보(사용자 이름(계정과 연결된 이메일 주소), 조직 이름, API 관리 호출에 사용하는 도메인)를 사용하여 표시된 대로 수정합니다. 예를 들어 Edge 클라우드의 경우 도메인은https://api.enterprise.apigee.com입니다. 하지만 Edge Private Cloud를 사용하는 경우 도메인이 다를 수 있습니다. setenv.sh파일을 저장합니다.- 배포 스크립트를 실행합니다.
./deploy.sh
- 배포가 성공하면 호출 스크립트를 실행합니다.
./invoke.sh
호출 스크립트는 다음과 같은 cURL 명령어를 호출합니다.
curl http://$org-$env.$api_domain/java-cookbook/json
응답은 다음과 같습니다.
< HTTP/1.1 200 OK < Date: Tue, 09 May 2017 20:31:08 GMT < Content-Type: APPLICATION/JSON; CHARSET=UTF-8 < Content-Length: 68 < Connection: keep-alive < Access-Control-Allow-Origin: * < ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG" < X-Powered-By: APIGEE < Server: Apigee Router < * Curl_http_done: called premature == 0 * Connection #0 to host willwitman-test.apigee.net left intact {"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}
프록시 흐름
프록시 흐름을 보여주는 trace 도구의 스크린샷입니다.

프록시 구조
프록시의 구조입니다.
apiproxy/resources/java 디렉터리에 JAR 파일이 포함되어 있습니다. JAR은 필수입니다. 샘플에 제공되지만 커스텀 작업을 하는 경우 직접 빌드하여 이
위치에 복사해야 합니다. 자바 콜아웃 컴파일 및 배포에 관한 안내는 자바 콜아웃을 만드는 방법
을 참고하세요.
java-cookbook apiproxy java-cookbook.xml policies responseUppercase.xml proxies default.xml resources java ResponseUppercase.jar targets default.xml
자바 코드 정보
자바 콜아웃 정책은 응답 헤더와 응답 본문을 대문자로 변환하는 다음 자바 코드를 실행합니다. 프로그램은 Apigee 전용 패키지를 사용합니다. 이러한 패키지는 프록시 흐름과 직접 상호작용하는 데 사용할 수 있는 객체와 메서드를 제공합니다. 흐름 변수, 헤더, 메시지 콘텐츠 등을 가져오고 설정할 수 있는 메서드 가 있습니다.
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 java.util.Set; public class ResponseUppercase implements Execution{ public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { Set headers = messageContext.getMessage().getHeaderNames(); for (String header : headers) { String h = messageContext.getMessage().getHeader(header).toUpperCase(); messageContext.getMessage().setHeader(header, h); } String content = messageContext.getMessage().getContent(); messageContext.getMessage().setContent(content.toUpperCase()); return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
샘플 프록시 검토
프록시를 열고 파일을 검토하는 것은 사용자에게 달려 있습니다. 다음은 자바 콜아웃 정책입니다. 콜아웃이 실행하는 클래스와 JAR 파일을 참조하는 방법을 확인하세요. 모든 자바 콜아웃 정책은 이 패턴을 따릅니다. 자바 콜아웃 정책도 참고하세요.
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>