[ejabberd] Pubsub with Ejabberd and exmpp

Boris Okner boris.okner at gmail.com
Fri May 7 22:20:23 MSD 2010


Can't say exactly what is wrong with the XML. One suggestion, though: there
is a handy function exmpp_xml:document_to_list(), which will present your
output in more friendly format, so it will be easier to answer your
question.
Could it be that MSFT node you're referring to, hasn't been created? You'd
need to create this node before you can publish items to it.

Boris

On Fri, May 7, 2010 at 1:14 PM, shahzad bhatti <shahbhat at gmail.com> wrote:

> One more thing, here is the IQ output that is being published:
> Sending : {xmlel,'jabber:client',[],iq,
>               [{xmlattr,undefined,type,<<"set">>},
>                {xmlattr,undefined,to,<<"pubsub.myhost.local">>},
>                {xmlattr,undefined,id,<<"pubsub-1337138231">>}],
>               [{xmlel,'http://jabber.org/protocol/pubsub',[],pubsub,[],
>
>                    [{xmlel,'http://jabber.org/protocol/pubsub',[],publish,
>                         [{xmlattr,undefined,node,<<"MSFT">>}],
>                         [{xmlel,'http://jabber.org/protocol/pubsub
> ',[],item,
>                              [],
>                              [{xmlcdata,
>                                   <<"{'symbol':'MSFT', 'bid':28.66,
> 'ask':28.67, 'bidSize':61, 'askSize':13, 'volume':65488100,
> 'last':28.66}">>}]}]}]}]}
>
> I am not sure if I am missing anything on the XML.
>
>
> On Fri, May 7, 2010 at 9:45 AM, shahzad bhatti <shahbhat at gmail.com> wrote:
>
>> I wrote a simple client using exmpp library to publish JSON structure.
>> Here is how I am initializing:
>>
>>
>> init() ->
>>     ok = application:start(exmpp),
>>     ok = application:start(crypto),
>>     ok = application:start(ssl),
>>     ok = application:start(lhttpc),
>>     exmpp_xml:start_parser(),
>>     MySession = exmpp_session:start({1,0}),
>>     MyJID = exmpp_jid:make(?BOSH_USER, ?XMPP_SERVER, random),
>>     exmpp_session:auth_basic_digest(MySession, MyJID, ?BOSH_PASSWORD),
>>
>>     {ok, _StreamId, _Features} = exmpp_session:connect_BOSH(MySession,
>> ?BOSH_URL,
>>              ?XMPP_SERVER, []),
>>     session(MySession, MyJID).
>>
>> And here is how I am sending message (which is somewhat based on
>> bosh_client in exmpp examples):
>>
>>
>> session(MySession, MyJID) ->
>>     exmpp_session:login(MySession, "PLAIN")
>>
>>     exmpp_session:send_packet(MySession,
>>             exmpp_presence:set_status(
>>         exmpp_presence:available(), "Ready to Publish ")),
>>     loop(MySession, MyJID).
>>
>>
>> loop(MySession, MyJID) ->
>>     receive
>>         stop ->
>>             exmpp_session:stop(MySession);
>>         Record = #received_packet{packet_type=message, raw_packet=_Packet}
>> ->
>>             io:format("message: ~p~n", [Record]),
>>             loop(MySession, MyJID)
>>      after 1000 ->
>>         Json = "{'symbol':'MSFT', 'bid':28.66, 'ask':28.67, 'bidSize':61,
>> 'askSize':13, 'volume':'65488100, 'last':28.66}",
>>
>>         IQ = exmpp_client_pubsub:publish("pubsub." ++ ?XMPP_SERVER,
>> Symbol, exmpp_xml:cdata(Json)),
>>         _PacketId = exmpp_session:send_packet(MySession,
>> exmpp_stanza:set_sender(IQ, MyJID)),
>>         loop(MySession, MyJID)
>>     end.
>>
>>
>> However, I get following error:
>>
>>
>> {received_packet,iq,"error",
>>     {undefined,<<"pubsub.myhost.local">>,undefined},
>>     "pubsub-2485983295",'jabber:client',
>>     {xmlel,'jabber:client',
>>         [{'jabber:client',none}],
>>         iq,
>>         [{xmlattr,undefined,from,<<"pubsub.myhost.local">>},
>>          {xmlattr,undefined,to,
>>              <<"producer at myhost.local/exmpp#1273249497148131">>},
>>          {xmlattr,undefined,type,<<"error">>},
>>          {xmlattr,undefined,id,<<"pubsub-2485983295">>}],
>>         [{xmlel,'http://jabber.org/protocol/pubsub',
>>              [{'http://jabber.org/protocol/pubsub',none}],
>>              pubsub,[],
>>              [{xmlel,'http://jabber.org/protocol/pubsub',[],publish,
>>                   [{xmlattr,undefined,node,<<"MSFT">>}],
>>                   [{xmlel,'http://jabber.org/protocol/pubsub',[],item,[],
>>                        [{xmlcdata,<<"{">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"symbol">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"MSFT">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<", ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"bid">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":28.66, ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"ask">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":28.67, ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"bidSize">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":61, ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"askSize">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":13, ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"volume">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"65488100, ">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<"last">>},
>>                         {xmlcdata,<<"'">>},
>>                         {xmlcdata,<<":28.66}">>}]}]}]},
>>          {xmlel,'jabber:client',[],error,
>>              [{xmlattr,undefined,code,<<"400">>},
>>               {xmlattr,undefined,type,<<"modify">>}],
>>              [{xmlel,'urn:ietf:params:xml:ns:xmpp-stanzas',
>>                   [{'urn:ietf:params:xml:ns:xmpp-stanzas',none}],
>>                   'bad-request',[],[]},
>>               {xmlel,'http://jabber.org/protocol/pubsub#errors',
>>                   [{'http://jabber.org/protocol/pubsub#errors',none}],
>>                   'invalid-payload',[],[]}]}]}}
>>
>>
>>
>>
>> Can someone explain why I am getting invalid-payload/bad-request errors?
>> Thanks in advance.
>>
>>
>
> _______________________________________________
> ejabberd mailing list
> ejabberd at jabber.ru
> http://lists.jabber.ru/mailman/listinfo/ejabberd
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.jabber.ru/pipermail/ejabberd/attachments/20100507/6905ac34/attachment.html>


More information about the ejabberd mailing list