Como usar propriedades no JavaCallout

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

O que é um comando Java?

Se não tem experiência com JavaCallouts, recomendamos que comece por ler o artigo Como criar um Java callout.

Usar propriedades em políticas JavaCallout

As propriedades permitem-lhe especificar pares de nome/valor numa política JavaCallout aos quais pode aceder a partir do seu código Java no tempo de execução. Tem de especificar um valor de string literal para cada propriedade. Não pode fazer referência a variáveis de fluxo neste elemento.

Vejamos um exemplo simples de uma política JavaCallout que usa propriedades. Neste exemplo, criamos um proxy com uma política JavaCallout. A política usa o elemento <Properties> para especificar um par de nome/valor. No código Java, vamos obter o valor e usá-lo para definir um cabeçalho de resposta.

Transfira o projeto

Para simplificar, pode transferir este projeto do repositório api-platform-samples do Apigee no GitHub.

  1. Transfira ou clone api-platform-samples para o seu sistema.
  2. Num terminal ou num editor de código à sua escolha, aceda ao projeto api-platform-samples/doc-samples/java-properties.

A política JavaCallout

A política usa o elemento <Properties>. Este elemento permite especificar pares de nome/valor. Em tempo de execução, o seu código Java pode aceder aos valores das propriedades especificadas na política, como veremos em breve.

<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>

O exemplo de código Java

O código Java deste exemplo mostra como obter uma propriedade especificada na política JavaCallout. No projeto de exemplo, pode encontrar o código-fonte em java-properties/callout/src/main/java/JavaProperties.java. Vamos explicar os passos para compilar e implementar este código mais adiante neste tópico.

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;
		}
	}
}

Compile o seu código com o Maven

O projeto está configurado para que possa compilar com o Maven. Se quiser usar javac, também incluímos um exemplo.

  1. Certifique-se de que tem o Maven instalado:
    mvn -version
  2. Execute o script java-properties/buildsetup.sh. Este script instala as dependências JAR necessárias no seu repositório Maven local.
  3. cd para o diretório java-properties/callout.
  4. Executar Maven:
    mvn clean package
  5. Se quiser, verifique se o ficheiro JAR edge-custom-policy-java-properties.jar foi copiado para java-properties/apiproxy/resources/java. Esta é a localização necessária para os ficheiros JAR que quer implementar com um proxy.

Compilar com javac (opcional)

Se quiser usar o javac para compilar o código, pode fazer algo semelhante ao seguinte (a partir do diretório java-properties). Os ficheiros JAR necessários são fornecidos para si no diretório java-properties/lib.

  1. cd para api-platform-samples/doc-samples/java-properties.
  2. Certifique-se de que tem o javac no seu caminho.

    javac -version
  3. Execute o seguinte comando javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. Crie um ficheiro JAR:

    jar -cvf edge-custom-policy-java-properties.jar ./com/apigeesample/JavaProperties.class
  5. Copie o ficheiro JAR para o diretório apiproxy/resources/java. Esta é a localização necessária para os ficheiros JAR que quer implementar com um proxy.
    cp edge-custom-policy-java-properties.jar apiproxy/resources/java

Implemente e chame o proxy

É fornecido um script de implementação no diretório ./java-properties. No entanto, antes de o executar, tem de fazer uma configuração rápida.

  1. cd para api-platform-samples/doc-samples/java-properties
  2. A forma mais simples de implementar o proxy é incluí-lo num ficheiro ZIP e carregar o pacote do proxy para um ambiente na sua organização do Apigee. Consulte o artigo Criar um proxy de API. Certifique-se de que usa a opção Carregar pacote de proxy. Veja também Sugestões e truques para carregar um proxy de API num pacote de proxies na comunidade do Apigee.
  3. Quando o proxy for implementado, experimente chamá-lo:
    curl  https://$HOSTNAME/java-properties

    O proxy devolve o cabeçalho: X-PROPERTY-HELLO: WORLD!. Lembre-se de que na política adicionámos um par de nome/valor da propriedade "prop/WORLD!". A política JavaCallout obtém o valor "WORLD!" e define-o num cabeçalho denominado X-PROPERTY-HELLO:

    messageContext.getMessage().setHeader("X-PROPERTY-HELLO", this.properties.get("prop"));