Ошибка при конвертации binary_to_term.

62 views
Skip to first unread message

Игорь Викторович Проць

unread,
Jul 18, 2013, 10:17:56 AM7/18/13
to erlang-i...@googlegroups.com
Пишу http_handler для cowboya, в котором делаю парсинг приходящего xml запроса библиотекой exomler   https://github.com/kostyushkin/exomler.

handle(Req, State) ->
    {ok, Data, Req2} = cowboy_req:body(Req),
    io:format("Request body: ~p~n",[Data]),
    {Tag, Attrs, Content} = exomler:decode(Data),
    io:format("Attributes: ~p~n", [Attrs]),
    Attr_bin = lists:keyfind(<<"typeId">>, 1, Attrs),
    io:format("Attr value: ~p~n",[Attr_bin]),
    {Name_bin, Value_bin} = Attr_bin,
    io:format("value: ~p~n",[Value_bin]),

    Attr_value = binary_to_term(Value_bin),

    io:format("value: ~p~n",[Attr_value]),
    {ok, Req2, State}.

Определив нужный тег пытаюсь конвертировать его bif функцией binary_to_term(), получаю 

=ERROR REPORT==== 18-Jul-2013::17:10:04 ===
** Cowboy handler store_handler terminating in handle/2
   for the reason error:badarg
** Handler state was undefined_state
.....
** Stacktrace: [{erlang,binary_to_term,[<<"events">>],[]},
                {store_handler,handle,2,
                               [{file,"/home/prots/NetBeansProjects/ProxyNode/src/store_handler.erl"},
                                {line,23}]},
                {cowboy_handler,handler_handle,4,
                                [{file,"src/cowboy_handler.erl"},{line,119}]},
                {cowboy_protocol,execute,4,
                                 [{file,"src/cowboy_protocol.erl"},
                                  {line,523}]}]

В чем может быть проблема? Мне нужно получить строку, по которой я буду выполнять поиск в уже заполненной ets таблице. 

Anton Nikishaev

unread,
Jul 18, 2013, 10:44:43 AM7/18/13
to erlang-i...@googlegroups.com
binary_to_existing_atom/2.

Игорь Викторович Проць

unread,
Jul 18, 2013, 11:25:34 AM7/18/13
to erlang-i...@googlegroups.com
Помогло binary_to_list, учитывая что строка в erlange - список символов.

четверг, 18 июля 2013 г., 17:44:43 UTC+3 пользователь Anton Nikishaev написал:

Сергій Костюшкін

unread,
Jul 18, 2013, 11:30:47 AM7/18/13
to erlang-i...@googlegroups.com
Игорь, а что ты планируешь делать с именем атрибута дальше, так ли нужно его конвертить?

Четвер, 18 липня 2013 р. 18:25:34 UTC+3 користувач Игорь Викторович Проць написав:

Dmytro Starosud

unread,
Jul 18, 2013, 1:11:21 PM7/18/13
to erlang-i...@googlegroups.com
А там раптом не можна матчити атоми binary та text?
Я не спеціаліст, але сам по прикладу робив так:
websocket_handle({text, Msg}, Req, State) -> ...
websocket_handle({binary, Msg}, Req, State) -> ...

18 июля 2013 г., 18:30 пользователь Сергій Костюшкін
<s.kost...@gmail.com> написал:
> --
> Ви отримали це повідомлення, оскільки підписалися на групу "Erlang в
> Україні" Груп Google.
> Щоб скасувати підписку на цю групу та не отримувати листів із неї, надішліть
> електронний лист на адресу erlang-in-ukra...@googlegroups.com.
> Щоб залишати дописи в цій групі, надішліть електронного листа за адресою
> erlang-i...@googlegroups.com.
> Перейдіть до цієї групи за посиланням
> http://groups.google.com/group/erlang-in-ukraine.
>
>

Сергій Костюшкін

unread,
Jul 18, 2013, 1:33:59 PM7/18/13
to erlang-i...@googlegroups.com
Для websocket-ів на рівні протоколу можна вказувати в якому вигляді ганяти данні, а в http все передається виключно як текст, але питання було не про це.


Четвер, 18 липня 2013 р. 20:11:21 UTC+3 користувач Dmytro Starosud написав:

Игорь Викторович Проць

unread,
Jul 19, 2013, 2:26:59 AM7/19/13
to
Далее по имени атрибута идет поиск в ets таблице. ETS таблица заполняется из внешней БД строками. 

четверг, 18 июля 2013 г., 18:30:47 UTC+3 пользователь Сергій Костюшкін написал:

Сергій Костюшкін

unread,
Jul 19, 2013, 4:13:47 AM7/19/13
to erlang-i...@googlegroups.com
Т.е. у тебя есть выбор конвертить строку в бинарник при заполнении из бд, или бинарник в строку при получении XML.

я бы посоветовал выбрать первое, а дальше ты по ситуации смотри.

Пʼятниця, 19 липня 2013 р. 09:12:21 UTC+3 користувач Игорь Викторович Проць написав:
Далее по имени атрибута идет поиск в ets таблице. ETS таблица заполняется из внешней БД строками. 

четверг, 18 июля 2013 г., 18:30:47 UTC+3 пользователь Сергій Костюшкін написал:
Игорь, а что ты планируешь делать с именем атрибута дальше, так ли нужно его конвертить?
Reply all
Reply to author
Forward
0 new messages