gpt4 book ai didi

erlang - 使用 exmpp 函数时函数子句错误

转载 作者:行者123 更新时间:2023-12-04 18:09:57 25 4
gpt4 key购买 nike

以前我在 ejabberd 2.1.10 中使用 xml:get_tag_attr_s("type", Packet) 作为调试行,但这在 ejabberd 13.03 中不再起作用。可能是因为根据文档( http://www.process-one.net/docs/exmpp/devdoc/trunk/xml.html#get_attr_s-2 )它已被弃用,所以我尝试使用 exmpp 库中的函数。

我在第二个 DEBUG 行上遇到错误(第一个调试行工作正常)。以及如何从属性中获取值的想法?

代码摘录:

 on_user_send_packet(From, To, Packet) ->
?DEBUG("Sent packet (1): ~p", [Packet]),
Type = exmpp_xml:get_attribute(Packet, <<"type">>, <<"unknown">>),
?DEBUG("Sent packet from (2): ~p", [From]),

日志:
  =INFO REPORT==== 2013-05-25 09:58:50 ===
D(<0.1625.0>:mod_stanza_ack:59) : Sent packet (1): {xmlel,<<"message">>,
[{<<"to">>,
<<"31600000002@whatsupp_dev">>},
{<<"from">>,
<<"31600000001@whatsupp_dev/webapp">>},
{<<"type">>,<<"chat">>},
{<<"id">>,<<"4834">>}],
[{xmlel,<<"body">>,[],
[{xmlcdata,
<<"SHOOOOOT">>}]},
{xmlel,<<"request">>,
[{<<"xmlns">>,
<<"urn:xmpp:receipts">>}],
[]}]}

=ERROR REPORT==== 2013-05-25 09:58:50 ===
E(<0.1625.0>:ejabberd_hooks:315) : {function_clause,
[{exmpp_xml,get_attribute,
[{xmlel,<<"message">>,
[{<<"to">>,
<<"31600000002@whatsupp_dev">>},
{<<"from">>,
<<"31600000001@whatsupp_dev/webapp">>},
{<<"type">>,<<"chat">>},
{<<"id">>,<<"4834">>}],
[{xmlel,<<"body">>,[],
[{xmlcdata,<<"SHOOOOOT">>}]},
{xmlel,<<"request">>,
[{<<"xmlns">>,
<<"urn:xmpp:receipts">>}],
[]}]},
<<"from">>,<<"unknown">>],
[{file,"./core/exmpp_xml.erl"},
{line,1173}]},
{mod_stanza_ack,on_user_send_packet,3,
[{file,"mod_stanza_ack.erl"},{line,60}]},
{ejabberd_hooks,run1,3,
[{file,"ejabberd_hooks.erl"},
{line,311}]},
{ejabberd_c2s,session_established2,2,
[{file,"ejabberd_c2s.erl"},{line,1136}]},
{p1_fsm,handle_msg,10,
[{file,"p1_fsm.erl"},{line,578}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,239}]}]}

最佳答案

Packet你正在传递给 exmpp_xml:get_attributexmlel记录包含三个字段:元素名称、属性和子元素。但是,exmpp 定义了 xmlel具有五个元素的记录( definition from here ):

% Elements.
-record(xmlel, {
ns = undefined :: xmlname() | undefined,
declared_ns = [] :: [{xmlname(), string() | none}],
name :: xmlname(),
attrs = [] :: [xmlattr()],
children = [] :: [#xmlel{} | xmlcdata()] | undefined
}).

我快速查看了 ejabberd 13.03 源代码,它看起来像 xml:get_tag_attr_s应该可以正常工作,所以我怀疑 ejabberd 13.03 与 exmpp 不兼容。 (虽然我最近没有密切关注 ejabberd 的开发,所以如果能更深入地了解这一点将不胜感激。)我认为你最好尝试找出原因 get_tag_attr_s为你休息。

关于erlang - 使用 exmpp 函数时函数子句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com