cniElementAsBitstream

指定したエレメントのビット・ストリーム表現を取得します。 エレメントに関連したパーサーは、このエレメントとそのすべての子を直列化します。 結果は、呼び出し側によって割り振られたメモリーにコピーされます。 この関数は、メッセージ本体、つまりメッセージ・ルートの最後の子に対してのみ呼び出すことができます。 指定されたすべてのオプションがオリジナルのビット・ストリーム (たとえば、MQInput ノードによって WebSphere MQ キューから読み取られたビット・ストリーム) のオプションと一致しており、オリジナルのビット・ストリームを受け取った後でメッセージが変更されていない特殊なケースでは、このオリジナルのビット・ストリームはユーザーによって割り振られたメモリーにコピーされます。 この場合、パーサーは構文解析を行ってメッセージを再び直列化する必要はありません。

構文

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

パラメーター

returnCode
関数からの戻りコード (出力)。NULL ポインターを指定すると、ノードがエラーを処理しないことを示します。 入力が NULL でない場合、出力は呼び出しの成功状況を示します。 この呼び出しの実行時にスローされた例外は、フロー内の次のアップストリーム・ノードに対して再度スローされます。 この例外の詳細については、cciGetLastExceptionData を呼び出してください。
element
直列化される構文エレメント (入力)。 これはメッセージ・ルートの最後の子でなければなりません。
value
呼び出し側によって割り振られたメモリー領域へのポインターを含む CciByteArray 構造へのポインター。 このメモリーの CciBytes 単位のサイズでもあります (出力)。
messageType
エレメント・ツリーからビット・ストリームを作成するために使用されるメッセージ・タイプ定義 (入力)。 NULL ポインターはこのパラメーターが無視されることを意味します。 また、エレメントに関連したパーサーがこの値を必要としない場合 (たとえば、汎用 XML パーサーの場合)、このパラメーターは無視されます。
messageSet
エレメント・ツリーからビット・ストリームを作成するために使用されるメッセージ・セット定義 (入力)。 NULL ポインターはこのパラメーターが無視されることを意味します。 また、エレメントに関連したパーサーがこの値を必要としない場合 (たとえば、汎用 XML パーサーの場合)、このパラメーターは無視されます。
messageFormat
エレメント・ツリーからビット・ストリームを作成するために使用される形式 (入力)。 NULL ポインターはこのパラメーターが無視されることを意味します。 また、エレメントに関連したパーサーがこの値を必要としない場合 (たとえば、汎用 XML パーサーの場合)、このパラメーターは無視されます。
encoding
ビット・ストリームを作成する際に使用するエンコード方式 (入力)。 このパラメーターは必須です。 値 0 を指定して、キュー・マネージャーのエンコード方式を使用するように指示することができます。
ccsid
ビット・ストリームを作成する際に使用する Coded Character Set Identifier (入力)。 このパラメーターは必須です。 値 0 を指定して、キュー・マネージャーの CCSID を使用するように指示することができます。 ccsid が -1 の場合は、エレメントによって指し示されるフィールドとその子で構成されるサブツリー内の CCSID 情報を使用して、ビット・ストリームが生成されることを示します。 現在、このオプションをサポートするパーサーはありません。
options
これはプレースホルダーで、いつも 0 であるべきです。

戻り値

  • 成功した場合、ビット・ストリームを保持するために必要なメモリーの正しいサイズが戻されます。
  • 呼び出し側によって割り振られたメモリーが不十分な場合、returnCode が CCI_BUFFER_TOO_SMALL に設定されます。
  • 実行時に例外が発生する場合、returnCode が CCI_EXCEPTION に設定されます。

この例では、ノードはプロパティー・フォルダーを照会して、messageSet、messageType、messageFormat、エンコード、およびビット・ストリームを判別します。 次いで、この情報を使用して、メッセージ本体のビット・ストリーム表現を取得します。

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

関連概念
ユーザー定義のメッセージ処理ノード
ユーザー定義の出力ノード

関連タスク
C でのメッセージ処理ノードの作成

関連資料
cniElementName
cniElementType
cniElementValue グループ
cniElementValueState
cniElementValueType
cniElementValueValue
cciGetLastExceptionData