Este é o décimo-primeiro estágio do cenário para executar enriquecimento de mensagem simples. Este tópico demonstra como desenvolver um fluxo de mensagens utilizando um procedimento Java definido pelo usuário. Também envolve o desenvolvimento de modelos de mensagens correspondentes e documentos de instâncias.
Na definição de mensagem COMPLEX, no espaço de nomes www.complex.net,
crie mensagens chamadas addev6in e addev6out, que têm as seguintes estruturas:
addev6in
hexdata (xsd:hexBinary) elemento local
addev6out
decval (xsd:decimal) elemento local
fltval (xsd:float) elemento local
intval (xsd:int) elemento local
Crie um fluxo de mensagem chamado addev6, que contenha o seguinte mapeamento:
MQInput > Mapeamento > MQOutput.
Abra o mapa e selecione addev6in como a origem e addev6out como o destino.
No projeto MAPPING3_COMPLEX_flows, crie um arquivo ESQL chamado addev6
e coloque estas funções nele:
CREATE PROCEDURE decFromBinary( IN hexval BLOB )
RETURNS DECIMAL
LANGUAGE JAVA
EXTERNAL NAME "addev6.decFromBinary";
CREATE PROCEDURE fltFromBinary( IN hexval BLOB )
RETURNS DECIMAL
LANGUAGE JAVA
EXTERNAL NAME "addev6.fltFromBinary";
CREATE PROCEDURE intFromBinary( IN hexval BLOB )
RETURNS DECIMAL
LANGUAGE JAVA
EXTERNAL NAME "addev6.intFromBinary";
Crie um arquivo de origem Java chamado addev6.java, que possui o seguinte conteúdo:
import java.lang.*;
import java.math.*;
public class addev6 {
//
// Retorne o elemento decimal da cadeia binária
//
public static BigDecimal decFromBinary( byte[] hexval) {
// Procure o elemento nomeado decval
String search = "decval";
String snval = findElement(hexval ,search );
// Converta o valor em tipo decimal
BigDecimal numval = new BigDecimal(snval);
return numval;
}
//
// Retorne o elemento float da cadeia binária
//
public static Double fltFromBinary( byte[] hexval) {
// Procure o elemento denominado fltval
String search = "fltval";
String snval = findElement(hexval ,search );
// Converta o valor em tipo float
Double numval = new Double(snval);
return numval;
}
//
// Retorne o elemento integer da cadeia binária
//
public static Long intFromBinary( byte[] hexval) {
// Procure o elemento denominado intval
String search = "intval";
String snval = findElement(hexval ,search );
// Converta o valor em tipo integer
Long numval = new Long(snval);
return numval;
}
//
// Localize o elemento nomeado e seu valor nos dados binários
//
private static String findElement( byte[] hexval, String search ) {
// Converter bytes em cadeia
String hexstr = new String(hexval);
// Pares etiqueta/valor de comprimento fixo (length=14)
int nvals = hexstr.length() / 14;
String numval = "";
String[] label = new String[nvals];
String[] value = new String[nvals];
// Loop sobre o número de pares etiqueta/valor
para ( int i=0; i < nvals; i ++ ) {
// obter posição inicial
int st = i * 14;
// a etiqueta tem comprimento 6
int endl = st + 6;
// o valor tem comprimento 8
int endv = endl + 8;
// extrair etiqueta e valor da cadeia
label[i] = hexstr.substring( st, endl);
value[i] = hexstr.substring( (endl+1), endv);
// Verificar se o par atual possui a etiqueta solicitada
se ( label[i].compareTo( search) == 0 ) {
// ajustar preenchimento do valor
numval = value[i].trim();
}
}
return numval;
}
}
Compile o código Java e inclua o local do arquivo de classe no caminho de classe do sistema. Pode ser necessário reiniciar o Windows se você editar o
CLASSPATH.
Na área de janela Planilha do Editor de Mapeamento de Mensagens,
expanda a mensagem de destino e configure o destino decval para o valor esql:decFromBinary($source/comp:addev6in/bval).
Configure o destino fltval para esql:fltFromBinary($source/comp:addev6in/bval).
Configure o destino intval para esql:intFromBinary($source/comp:addev6in/bval).
Expanda o destino Propriedades e configure os valores mostrados:
MessageType | 'addev6out
Crie a mensagem de instância a seguir com os cabeçalhos RFH2 apropriados:
mensagens chamadas addev6in e addev6out em uma definição de mensagem chamada COMPLEX
um fluxo de mensagens chamado addev6, que contém o arquivo de mapeamento addev6_Mapping.msgmap e o arquivo ESQL
addev6.esql
uma arquivo de origem Java chamado addev6.java e um arquivo de classe compilado chamado
addev6.class em um local onde o CLASSPATH do sistema possa localizá-los
arquivos que contêm mensagens de instância
Agora implemente o conjunto de mensagens e fluxo de mensagens.
Implementar o Conjunto de Mensagens e o Fluxo de Mensagens
Este é o estágio final do cenário para executar enriquecimento de mensagem simples. Este tópico demonstra como implementar o conjunto de mensagens e o fluxo de mensagens e executar a mensagem da instância através do intermediário.
Crie um arquivo bar chamado addev6.
Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev6 no arquivo bar.
Implemente o arquivo bar no intermediário.
Coloque os documentos da instância na fila de entrada.