<ph type="x-smartling-placeholder"></ph>
您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 信息
什么是 JavaCallout?
如果您刚开始接触 Java callout,我们建议您从如何创建 Java callout 开始。
在 Java callout 中使用属性
通过属性,您可以在 Java callout 政策中指定可在运行时从 Java 代码访问的名称/值对。您必须为每个属性指定一个字面量字符串值;您无法在此元素中引用流变量。
我们来看看一个使用属性的简单 Java callout 示例。在此示例中,我们将创建一个包含 Java callout 政策的代理。该政策使用 <Properties>
元素指定名称/值对。在 Java 代码中,我们会检索并使用该值设置响应标头。
下载项目
为了简化操作,您可以从 GitHub 上的 Apigee api-platform-samples 代码库下载此项目。
- 将 api-platform-samples 下载或克隆到您的系统中。
- 在您选择的终端或代码编辑器中,转到
api-platform-samples/doc-samples/java-properties
项目。
Java callout 政策
该政策使用 <Properties>
元素。此元素可让您指定名称/值对。在运行时,您的 Java 代码可以访问政策中指定的属性值,我们将在下文进行介绍。
<JavaCallout name="java-callout"> <ClassName>com.apigeesample.JavaProperties</ClassName> <ResourceURL>java://edge-custom-policy-java-properties.jar</ResourceURL> <Properties> <Property name="prop">WORLD!</Property> </Properties> </JavaCallout>
示例 Java 代码
本示例的 Java 代码展示了如何检索 Java callout 政策中指定的属性。在示例项目中,您可以在 java-properties/callout/src/main/java/JavaProperties.java
中找到源代码。我们将在本主题的后面部分介绍编译和部署此代码的步骤。
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.Map; public class JavaProperties implements Execution { private Map <String,String> properties; // read-only public JavaProperties(Map <String,String> properties) { this.properties = properties; } public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) { try { messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop")); return ExecutionResult.SUCCESS; } catch (Exception e) { return ExecutionResult.ABORT; } } }
使用 Maven 编译代码
项目设置完毕,可以使用 Maven 进行编译。如果您想要使用 javac
,我们也提供了示例。
- 确保已安装 Maven:
mvn -version
- 执行脚本
java-properties/buildsetup.sh
。此脚本会在本地 Maven 代码库中安装所需的 JAR 依赖项。 - 使用 cd 命令转到
java-properties/callout
目录。 - 执行 Maven:
mvn clean package
- 如果需要,请验证 JAR 文件
edge-custom-policy-java-properties.jar
是否已复制到java-properties/apiproxy/resources/java
。要使用代理部署的 JAR 文件必须存放在该位置。
使用 javac 编译(可选)
如果您要使用 javac
编译代码,可以从 java-properties
目录执行类似如下的操作。java-properties/lib
目录中提供了所需的 JAR 文件。
- 使用 cd 命令转到
api-platform-samples/doc-samples/java-properties
。 - 确保您的路径中包含 javac。
javac -version
- 执行以下 javac 命令:
javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
- 创建 JAR 文件:
jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
- 将 JAR 文件复制到 apiproxy/resources/java 目录。要使用代理部署的 JAR 文件必须存放在该位置。
cp edge-custom-policy-java-properties.jar apiproxy/resources/java
部署和调用代理
./java-properties
目录中提供了部署脚本。但在运行前,您需要进行快速设置。
- 使用 cd 命令转到
api-platform-samples/doc-samples/java-properties
- 打开文件
../../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-properties
代理会返回标头:
X-PROPERTY-HELLO: WORLD!
。请注意,在政策中,我们添加了属性名称/值对"prop/WORLD!"
。Java callout 会检索值"WORLD!"
并在名为X-PROPERTY-HELLO
的标头中设置它:messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));