cniElementAsBitstream

Obtém a representação de fluxo de bits do elemento especificado. O analisador associado ao elemento serializa o elemento e todos os seus filhos. O resultado é copiado para a memória alocada pelo responsável pela chamada. Essa função pode ser chamada somente no corpo da mensagem, ou seja, no último filho da raiz da mensagem. No caso especial em que todas as opções especificadas correspondem às do fluxo de bits original, por exemplo, um fluxo de bits lido de uma fila do pelo nó MQInput, e a mensagem não foi modificada desde que recebeu o fluxo de bits original, esse fluxo de bits original é copiado para a memória alocada pelo usuário. Nesse caso, o analisador não precisa analisar e serializar novamente a mensagem.

Sintaxe

CciSize cniElementAsBitstream(
    int*            returnCode,
    CciElement*      element,
    const struct CciByteArray* value,
    CciChar*                   messageType,
    CciChar*                   messageSet,
    CciChar*                   messageFormat,
    int            encoding,
    int            ccsid,
    int                        options);

Parâmetros

returnCode
O código de retorno da função (saída). Especificar um ponteiro NULL significa que o nó não deseja lidar com erros. Se a entrada não for NULL, a saída significa o status de êxito da chamada. Quaisquer exceções lançadas durante a execução desta chamada serão lançadas novamente para o próximo nó acima no fluxo. Chame cciGetLastExceptionData para obter detalhes da exceção.
elemento
O elemento de sintaxe a ser serializado (entrada). Deve ser o último filho da raiz da mensagem.
value
Um ponteiro para uma estrutura CciByteArray contendo um ponteiro para uma região de memória alocada pelo responsável pela chamada, e o tamanho em CciBytes dessa memória (saída).
messageType
A definição de tipo de mensagem utilizada para criar o fluxo de bits a partir da árvore de elementos (entrada). Um ponteiro NULL significa que este parâmetro é ignorado. Além disso, se o analisador associado ao elemento não tiver interesse neste valor, por exemplo, se ele for um analisador XML genérico, o parâmetro é ignorado.
messageSet
A definição de conjunto de mensagem utilizada para criar o fluxo de bits a partir da árvore de elementos (entrada). Um ponteiro NULL significa que este parâmetro é ignorado. Além disso, se o analisador associado ao elemento não tiver interesse neste valor, por exemplo, se ele for um analisador XML genérico, o parâmetro também é ignorado.
messageFormat
O formato utilizado para criar o fluxo de bits a partir da árvore de elementos (entrada). Um ponteiro NULL significa que este parâmetro é ignorado. Além disso, se o analisador associado ao elemento não tiver interesse neste valor, por exemplo, se ele for um analisador XML genérico, o parâmetro é ignorado.
encoding
A codificação a ser utilizada ao gravar o fluxo de bits (entrada). Esse parâmetro é obrigatório. Você pode especificar um valor de 0 para indicar que a codificação do gerenciador de filas deve ser utilizada.
ccsid
O identificador do conjunto de caracteres codificado a ser utilizado ao gravar o fluxo de bits (entrada). Esse parâmetro é obrigatório. Você pode especificar um valor de 0 para indicar que o ccsid do gerenciador de filas deve ser utilizado. Um ccsid de -1 indica que o fluxo de bits deve ser gerado, utilizando informações de ccsid contidas na subárvore, consistindo no campo apontado pelo elemento e seus filhos. Atualmente nenhum analisador suporta essa função.
options
Este é um marcador e deve sempre ser 0.

Valores de Retorno

  • Se bem-sucedida, o tamanho correto de memória necessária para conter o fluxo de bits é retornado.
  • Se a memória alocada pelo responsável pela chamada era insuficiente, returnCode é definido como CCI_BUFFER_TOO_SMALL.
  • Se uma exceção ocorrer durante a execução, returnCode é definido como CCI_EXCEPTION.

Exemplo

Neste exemplo, o nó consulta a pasta properties para determinar o messageSet, messageType, messageFormat, a codificação e o fluxo de bits. Em seguida ele utiliza essas informações para obter a representação de fluxo de bits do corpo da mensagem.

  inRootElement=cniRootElement(&rc, message);
  checkRC(rc);

  inBodyRoot = cniLastChild(&rc, inRootElement);
  checkRC(rc);

  inMQMD = cniSearchFirstChild(&rc,
                               inRootElement,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("MQMD",BIP_DEF_COMP_CCSID));
  checkRC(rc);
  

  inPropertiesFolder =cniSearchFirstChild(&rc,
                               inRootElement,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("Properties",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  encodingElement  = cniSearchFirstChild(&rc,
                               inPropertiesFolder,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("Encoding",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  ccsidElement  = cniSearchFirstChild(&rc,
                               inPropertiesFolder,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("CodedCharSetId",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  messageSetElement = cniSearchFirstChild(&rc,
                               inPropertiesFolder,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("MessageSet",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  messageTypeElement = cniSearchFirstChild(&rc,
                               inPropertiesFolder,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("MessageType",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  messageFormatElement = cniSearchFirstChild(&rc,
                               inPropertiesFolder,
                               CCI_COMPARE_MODE_NAME,
                               0,
                               CciString("MessageFormat",BIP_DEF_COMP_CCSID));
  checkRC(rc);

  
  encoding = cniElementIntegerValue(&rc, encodingElement);
  checkRC(rc);

  ccsid    = cniElementIntegerValue(&rc, ccsidElement);
  checkRC(rc);

  messageSetLength=512;
  messageSet       = (CciChar*)malloc(messageSetLength * sizeof(CciChar));
  messageSetLength = cniElementCharacterValue(&rc,
                                        messageSetElement,
                                        messageSet,
                                        messageSetLength);
  checkRC(rc);

  messageTypeLength=512;
  messageType       = (CciChar*)malloc(messageTypeLength * sizeof(CciChar));
  messageTypeLength = cniElementCharacterValue(&rc,
                                        messageTypeElement,
                                        messageType,
                                        messageTypeLength);
   checkRC(rc);

  messageFormatLength=512;
  messageFormat       = (CciChar*)malloc(messageFormatLength * sizeof(CciChar));
  messageFormatLength = cniElementCharacterValue(&rc,
                                        messageFormatElement,
                                        messageFormat,
                                        messageFormatLength);
  checkRC(rc);

  bitstream.size=512;
  bitstream.pointer=(CciByte*)malloc(sizeof(CciByte) * 512);
  
  bufLength = cniElementAsBitstream(&rc,
                        inBodyRoot,
                        &bitstream,
                        messageType,
                        messageSet,
                        messageFormat,
                        encoding,
                        ccsid,
                        0);
  
  checkRC(rc);
  bitstream.size=bufLength;

  convertMessage(&bitstream.pointer, &bitstream.size);

Conceitos relacionados
Nós de Processamento de Mensagem Definidos pelo Usuário
Nós de Saída Definidos pelo Usuário

Tarefas relacionadas
Criando um Nó de Processamento de Mensagem em C

Referências relacionadas
cniElementName
cniElementType
Grupo cniElementValue
cniElementValueState
cniElementValueType
cniElementValueValue
cciGetLastExceptionData