Desenvolver um Fluxo de Mensagens Utilizando um Procedimento Java Definido pelo Usuário

Antes de começar
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.
  1. 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
  2. Crie um fluxo de mensagem chamado addev6, que contenha o seguinte mapeamento: MQInput > Mapeamento > MQOutput.
  3. Abra o mapa e selecione addev6in como a origem e addev6out como o destino.
  4. 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";
  5. 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;
        }
    }
  6. 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.
  7. 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).
  8. Configure o destino fltval para esql:fltFromBinary($source/comp:addev6in/bval).
  9. Configure o destino intval para esql:intFromBinary($source/comp:addev6in/bval).
  10. Expanda o destino Propriedades e configure os valores mostrados:
    MessageType     |     'addev6out
  11. 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>
Você criou os seguintes recursos:
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.
  1. Crie um arquivo bar chamado addev6.
  2. Inclua o conjunto de mensagens MAPPING3_COMPLEX_messages e o fluxo de mensagens addev6 no arquivo bar.
  3. Implemente o arquivo bar no intermediário.
  4. Coloque os documentos da instância na fila de entrada.
A mensagem de saída é parecida com a seguinte:
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>
Você concluiu este cenário.
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ar25251_11_