如何在 JavaCallout 中使用属性

您正在查看的是 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 代码库下载此项目。

  1. api-platform-samples 下载或克隆到您的系统中。
  2. 在您选择的终端或代码编辑器中,转到 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,我们也提供了示例。

  1. 确保您已安装 Maven:
    mvn -version
    
  2. 执行脚本 java-properties/buildsetup.sh。此脚本会在本地 Maven 代码库中安装所需的 JAR 依赖项。
  3. 使用 cd 命令转到 java-properties/callout 目录。
  4. 执行 Maven:
    mvn clean package
    
  5. 如果需要,请验证 JAR 文件 edge-custom-policy-java-properties.jar 是否已复制到 java-properties/apiproxy/resources/java。要使用代理部署的 JAR 文件必须存放在该位置。

使用 javac 编译(可选)

如果您要使用 javac 编译代码,可以从 java-properties 目录执行类似如下的操作。java-properties/lib 目录中提供了所需的 JAR 文件。

  1. 使用 cd 命令转到 api-platform-samples/doc-samples/java-properties
  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/JavaProperties.java
    
  4. 创建 JAR 文件:

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. 将 JAR 文件复制到 apiproxy/resources/java 目录。要使用代理部署的 JAR 文件必须存放在该位置。
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java
    

部署和调用代理

./java-properties 目录中提供了部署脚本。但在运行前,您需要进行快速设置。

  1. 使用 cd 命令转到 api-platform-samples/doc-samples/java-properties
  2. 打开文件 ../../setup/setenv.sh,然后按照 Apigee 帐号信息的指示进行修改:您的用户名(与您的帐号关联的电子邮件地址)、您的组织名称,以及您用于进行 API 管理调用的网域。例如,对于 Edge Cloud,网域为 https://api.enterprise.apigee.com;但是,如果您使用的是 Edge Private Cloud,则您的网域可能会有所不同。
  3. 保存 setenv.sh 文件。
  4. 执行部署脚本:
    ./deploy.sh
    
  5. 如果部署成功,请执行调用脚本:
    ./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"));