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 rótulo/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 rótulo/valor
para ( int i=0; i < nvals; i ++ ) {
// obter posição inicial
int st = i * 14;
// o rótulo tem comprimento 6
int endl = st + 6;
// o valor tem comprimento 8
int endv = endl + 8;
// extrair rótulo e valor da cadeia
label[i] = hexstr.substring( st, endl);
value[i] = hexstr.substring( (endl+1), endv);
// Verificar se o par atual possui o rótulo solicitado
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:
<comp:addev6in xmlns:comp="http://www.complex.net">
<bval>
<![CDATA[64656376616c20202031342e3238666c7476616c
2020312e34452b32696e7476616c2020202020313230]]>
</bval>
</comp:addev6in>
Agora implemente o conjunto de mensagens e fluxo de mensagens.