cniElementAsBitstream

Esta función obtiene la representación de corriente de bits del elemento especificado. El analizador asociado con el elemento serializa el elemento y todos los elementos dependientes de dicho elemento. El resultado se copia en la memoria asignada por el canal de llamada. El usuario puede invocar esta función sólo en el cuerpo del mensaje, es decir, el último elemento dependiente del mensaje. En el caso especial de que todas las opciones especificadas coincidan con las opciones de la corriente de bits original, por ejemplo, una lectura de corriente de bits desde una cola de WebSphere MQ por parte del nodo MQInput, y el mensaje no se haya modificado desde que se recibiera la corriente de bits original, esta corriente de bits original se copia en la memoria asignada por el usuario. Es este caso, no es necesario que el analizador analice el mensaje ni vuelva a serializarlo.

Sintaxis

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
Código de retorno de la función (salida). La especificación de un puntero NULL, significa que el nodo no desea gestionar errores. Si la entrada no es NULL, la salida indica que el estado de la llamada es correcto. Las excepciones emitidas durante la ejecución de esta llamada vuelven a emitirse en el siguiente nodo en sentido ascendente del flujo. Invoque cciGetLastExceptionData para obtener información detallada de la excepción.
element
Elemento de sintaxis que se va a serializar (entrada). Debe ser el último elemento dependiente de la raíz del mensaje.
value
Puntero a una estructura CciByteArray que contiene un puntero a una región de memoria asignada por el canal de llamada, y el tamaño en CciBytes de esta memoria (salida).
messageType
Definición de tipo de mensaje utilizada para crear la corriente de bits desde el árbol de elementos (entrada). Un puntero NULL significa que se omite este parámetro. Además, si el analizador asociado con el elemento no tiene interés en este valor, por ejemplo, si es un analizador XML genérico, se omite el parámetro.
messageSet
Definición de conjunto de mensajes utilizada para crear la corriente de bits desde el árbol de elementos (entrada). Un puntero NULL significa que se omite este parámetro. Además, si el analizador asociado con el elemento no tiene interés en este valor, por ejemplo, si es un analizador XML genérico, se omite también el parámetro.
messageFormat
Formato utilizado para crear la corriente de bits desde el árbol de elementos (entrada). Un puntero NULL significa que se omite este parámetro. Además, si el analizador asociado con el elemento no tiene interés en este valor, por ejemplo, si es un analizador XML genérico, se omite el parámetro.
encoding
Codificación utilizada al escribir la corriente de bits (entrada). Este parámetro es obligatorio. Puede especificar el valor 0 para indicar que debe utilizarse la codificación del gestor de colas.
ccsid
Identificador de juego de caracteres codificado que se utiliza al escribir la corriente de bits (entrada). Este parámetro es obligatorio. Puede especificar el valor 0 para indicar que debe utilizarse el ccsid del gestor de colas. Un ccsid de -1 indica que la corriente de bits se va a generar utilizando información del ccsid contenida en el subárbol que consta del campo al que apunta el elemento y sus elementos dependientes. Actualmente, ningún analizador da soporte a esta opción.
options
Es un marcador de posición, y siempre debe ser 0.

Valores de retorno

  • Si la función se ejecuta correctamente, se devuelve el tamaño correcto de memoria necesaria para retener la corriente de bits.
  • Si la memoria asignada por el canal de llamada es insuficiente, returnCode se establece en CCI_BUFFER_TOO_SMALL.
  • Si se produce una excepción durante la ejecución, returnCode se establece en CCI_EXCEPTION.

Ejemplo

En este ejemplo, el nodo solicita a la carpeta de propiedades que determine los parámetros messageSet, messageType, messageFormat, encoding, y la corriente de bits. A continuación, utiliza esta información para obtener la representación de corriente de bits del cuerpo del mensaje.

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

Conceptos relacionados
Nodos de proceso de mensajes definidos por el usuario
Nodos de salida definidos por el usuario

Tareas relacionadas
Creación de un nodo de proceso de mensajes en C

Referencia relacionada
cniElementName
cniElementType
Grupo cniElementValue
cniElementValueState
cniElementValueType
cniElementValueValue
cciGetLastExceptionData