8

utf-8バッファーにSAML1.1およびSAML1.0応答があり、それらをRampart/Cオブジェクトchar *に変換したいと思います。saml_response_t *私の質問はこれです:

saml_response_t文字列からを作成するための正しい方法は何ですか?

理想的には、これを実行し、さまざまなパーサーツールを正しい順序で破棄するCのコードサンプルが必要です。これは、Axis2/Cがメモリを解放する方法について奇妙な考えを持っているためです。

これを行うための私の努力は失敗に終わり、主にメモリ障害が発生しましたが、これが私が持っているものです。deserialize_buffer()このメソッドは、バッファをと言うとおりに実行することを覚えておいてくださいaxiom_node_t *。ただし、私はそれを置き換えることもできます。

/* : get the raw XML from the SAML assertion */
xml_data = Tcl_GetStringFromObj (objv[2], &xml_length);

/* : parse the response XML for processing */
stream = gstream_mem_create (xml_data, xml_length);
node = Axis2_axiom_deserialize_buffer (env, stream);

/* : build a SAML response from the parsed XML */
saml_response = saml_response_create (env);
saml_response_build (saml_response, node, env);
arraylist = saml_response_get_assertions (saml_response, env);

/* : create our return value object */
obj = Tcl_NewListObj (0, NULL);

/* :- convert the SAML assertion into a string */
for (i = 0;
     i < axutil_array_list_size (arraylist, env);
         i++) {
    saml_assertion = (saml_assertion_t *) axutil_array_list_get (arraylist, env, i);
    if (saml_assertion != NULL) {
        assertion_node = saml_assertion_to_om (saml_assertion, NULL, env);

        element = Tcl_NewStringObj (axiom_node_to_string (node, env), -1);
        Tcl_ListObjAppendElement (interp, obj, element);

        axiom_node_free_tree (assertion_node, env);
    }
}
4

0 に答える 0