Преобразуйте ответ в верхний регистр с помощью вызова Java

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Если вы впервые пробуете выноску Java, мы рекомендуем начать с раздела «Как создать выноску Java» .

В этом образце кулинарной книги показано, как создать простую политику JavaCallout , которая выполняет пользовательский код Java в контексте потока прокси.

Что делает пример кода?

Прокси-сервер API в этом примере вызывает целевую службу, которая возвращает простой ответ JSON. Политика Java Callout размещается в целевом потоке ответов. Код Java преобразует заголовки и содержимое ответа в прописные буквы. Это простой пример; однако он иллюстрирует, как заставить пользовательский код Java работать в контексте прокси-сервера API в Edge.

Попробуйте образец

Скачать проект

Для простоты вы можете скачать этот проект из репозитория Apigee api-platform-samples на GitHub.

  1. Загрузите или клонируйте образцы API-платформы в свою систему.
  2. В терминале или редакторе кода по вашему выбору перейдите к проекту api-platform-samples/doc-samples/java-cookbook .

Скомпилируйте свой код с помощью Maven

Проект настроен так, что его можно скомпилировать с помощью Maven. Если вы хотите использовать javac , мы также добавим пример, следующий за примером Maven.

  1. Убедитесь, что у вас установлен Maven:
    mvn -version
    
  2. Выполните скрипт java-cookbook/buildsetup.sh . Этот скрипт устанавливает необходимые зависимости JAR в ваш локальный репозиторий Maven.
  3. перейдите в каталог java-cookbool/callout .
  4. Выполнить Maven:
    mvn clean package
    
  5. При желании убедитесь, что файл JAR edge-custom-policy-java-cookbook.jar был скопирован в java-cookbook/apiproxy/resources/java . Это необходимое местоположение для файлов JAR, которые вы хотите развернуть с помощью прокси.

Скомпилировать с помощью javac

Если вы хотите использовать javac для компиляции кода, вы можете сделать что-то похожее на следующее (из каталога java-cookbook ). Необходимые файлы JAR предоставляются вам в каталоге java-cookbook/lib .

  1. перейдите 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/resources/java. Это необходимое местоположение для файлов JAR, которые вы хотите развернуть с помощью прокси.

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

Развертывание и вызов прокси

Скрипт развертывания находится в каталоге ./java-cookbook . Но прежде чем запускать его, необходимо выполнить быструю настройку.

  1. перейдите 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"}

Прокси-поток

Это снимок инструмента трассировки, показывающий поток прокси-сервера:

Структура прокси

Это структура прокси. Обратите внимание, что он включает файл JAR в каталоге apiproxy/resources/java . JAR обязателен. Мы предоставляем его для примера, но если вы выполняете заказную работу, вам нужно собрать его самостоятельно и скопировать в это место. Рекомендации по компиляции и развертыванию выноски Java см. в разделе «Как создать выноску Java» .

java-cookbook

    apiproxy
        java-cookbook.xml
    policies
        responseUppercase.xml
    proxies
        default.xml
    resources
        java
            ResponseUppercase.jar
    targets
        default.xml

О Java-коде

Политика Java Callout запускает следующий код Java, который преобразует заголовки и текст ответа в верхний регистр. Обратите внимание, что программа использует пакеты, специфичные для 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;
        }
    }
}

Изучите образец прокси

Мы оставляем вам возможность открыть прокси и проверить файлы. Вот политика Java Callout. Обратите внимание, как он ссылается на класс, который выполняет выноска, и на файл JAR. Все политики Java Callout следуют этому шаблону. См. также политику Java Callout .

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>