您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
如果您是第一次尝试使用 Java callout,我们建议您先阅读如何创建 Java callout。
此实用指南示例演示了如何创建简单的 JavaCallout 政策,以在代理流的上下文中执行自定义 Java 代码。
示例代码有何用途?
此示例中的 API 代理会调用一个返回简单 JSON 响应的目标服务。Java Callout 政策放置在目标响应流中。Java 代码会将响应的标头和内容转换为大写字母。这是一个简单的示例,但它说明了如何在 Edge 上的 API 代理上下文中运行自定义 Java 代码。
试用示例
下载项目
为了简化操作,您可以从 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 目录执行类似如下的操作。java-cookbook/lib 目录中提供了所需的 JAR 文件。
- 使用 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/resources/java 目录。要使用代理部署的 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
调用脚本会调用如下所示的 c网址 命令:
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 callout 的指南,请参阅如何创建 Java callout。
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 政策。 请注意,它如何引用 callout 执行的类和 JAR 文件。所有 Java Callout 政策都遵循此模式。另请参阅 JavaCallout 政策。
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>