<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
如果您是第一次试用 Java 调用程序,建议您先查看如何创建 Java 标注。
此实战宝典示例演示了如何创建可执行的简单 JavaCallout 政策 自定义 Java 代码。
示例代码有何用途?
此示例中的 API 代理调用返回简单 JSON 响应的目标服务。通过 Java 调用程序政策放置在目标响应流中。Java 代码会转换标头, 对大写字母的响应的内容。这是一个简单的例子:但它说明了 ,让自定义 Java 代码在 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
目录执行类似如下的操作。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"}
代理流
这是跟踪工具的屏幕截图,显示了代理的流程:
代理结构
这是代理的结构。请注意,它包含 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 调用程序政策运行以下 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 调用程序政策。 请注意它如何引用调用程序执行的类和 JAR 文件。所有 Java 调用程序 政策遵循此模式另请参阅 Java 调用程序政策。
<JavaCallout name="responseUppercase"> <ClassName>com.apigeesample.ResponseUppercase</ClassName> <ResourceURL>java://ResponseUppercase.jar</ResourceURL> </JavaCallout>