Java 콜아웃을 사용하여 응답을 대문자로 변환

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

자바 콜아웃을 처음 사용하는 경우 자바 콜아웃을 만드는 방법부터 시작하는 것이 좋습니다.

이 설명서 샘플은 프록시 흐름의 컨텍스트 내에서 커스텀 자바 코드를 실행하는 간단한 Java콜아웃 정책을 만드는 방법을 보여줍니다.

샘플 코드의 기능은 무엇인가요?

이 샘플의 API 프록시는 간단한 JSON 응답을 반환하는 대상 서비스를 호출합니다. 자바 콜아웃 정책은 타겟 응답 흐름에 배치됩니다. 자바 코드는 응답의 헤더와 콘텐츠를 대문자로 변환합니다. 간단한 예이지만 Edge의 API 프록시 컨텍스트에서 커스텀 자바 코드가 작동하도록 하는 방법을 보여줍니다.

샘플 사용해 보기

프로젝트 다운로드

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

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

Maven으로 코드 컴파일

Maven로 컴파일할 수 있도록 프로젝트가 설정되었습니다. javac를 사용하려면 Maven 예 다음에 예가 포함됩니다.

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

javac로 컴파일

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

  1. cd 명령어로 api-platform-samples/doc-samples/java-cookbook로 이동합니다.
  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/ResponseUppercase.java
    
  4. JAR 파일을 apiproxy/리소스/자바 디렉터리에 복사합니다. 프록시로 배포하려는 JAR 파일에 필요한 위치입니다.

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

프록시 배포 및 호출

배포 스크립트는 ./java-cookbook 디렉터리에서 제공됩니다. 하지만 실행하기 전에 빠른 설정이 필요합니다.

  1. cd 명령어로 api-platform-samples/doc-samples/java-cookbook로 이동합니다.
  2. 아직 수정하지 않았다면 ../../setup/setenv.sh 파일을 열고 Apigee 계정 정보(사용자 이름(계정과 연결된 이메일 주소), 조직 이름, API 관리 호출에 사용하는 도메인)가 표시된 대로 수정합니다. 예를 들어 Edge 클라우드의 경우 도메인은 https://api.enterprise.apigee.com이지만 Edge Private Cloud를 사용하는 경우 도메인이 다를 수 있습니다.
  3. setenv.sh 파일을 저장합니다.
  4. 배포 스크립트를 실행합니다.
    ./deploy.sh
    
  5. 배포에 성공하면 호출 스크립트를 실행합니다.
    ./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"}

프록시 흐름

다음은 프록시의 흐름을 보여주는 트레이스 도구의 장면입니다.

프록시 구조

프록시의 구조는 이렇습니다. 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>