You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Ramit Arora <ra...@gmail.com> on 2008/02/28 16:25:57 UTC

Using http transport from a Perl client

Hi All,
I am experimenting with ActiveMQ 5.0, & my clients are in Perl. While
tinkering around, I managed to get Java clients to communicate with the
broker using http.
It seems that JMS commands are serialized into xml using XStream & sent over
http. The broker deserializes them using XStream.
When I tried sending http messages from Perl (using LWP & simple xml as the
content of the messages), I got the following error on the broker:

ERROR log                            - /topic/fooHTTP
com.thoughtworks.xstream.alias.CannotResolveClassException: person : person
        at
com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:35)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.XmlFriendlyMapper.realClass(XmlFriendlyMapper.java:44)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:49)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:46)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:52)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
        at
com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:28)
        at
com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:95)
        at
com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:12)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:521)
        at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:509)
        at com.thoughtworks.xstream.XStream.fromXML(XStream.java:475)
        at
org.apache.activemq.transport.xstream.XStreamWireFormat.unmarshalText(XStreamWireFormat.java:55)
        at
org.apache.activemq.transport.http.HttpTunnelServlet.doPost(HttpTunnelServlet.java:102)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
        at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
        at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:295)
        at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
        at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:841)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:639)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
        at
org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
        at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

How can I send http messages from Perl?

Thanks,
Ramit Arora
   
-- 
View this message in context: http://www.nabble.com/Using-http-transport-from-a-Perl-client-tp15738834s2354p15738834.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Using http transport from a Perl client

Posted by James Strachan <ja...@gmail.com>.
On 29/02/2008, Ramit Arora <ra...@gmail.com> wrote:
>
>  Hey James,
>  Thanks for the prompt reply. I've already tried Stomp for talking to
>  ActiveMQ, & the performance is quite good. I've even modified the Net::Stomp
>  module available on CPAN to handle transactions & the master/slave topology
>  of ActiveMQ.
>  But we want to explore all possible ways for Perl clients to talk to
>  ActiveMQ, as our choice would have organization wide implications. As far as
>  I can tell, the possible mechanisms are Stomp, HTTP & the REST API. Can you
>  suggest which one will be the most suitable in terms of guaranteed message
>  delivery? Raw performance is not really an issue as we are not looking at
>  message rates beyond a few hundred messages per second. And can you point me
>  to some working Perl code using Http transport & REST?

Stomp is my recommended protocol for Perl/PHP/Python/Ruby.

The current REST API is kinda simple & doesn't offer all of the
various things available in STOMP (e.g. transactions, different ack
modes etc).

The HTTP protocol is currently geared more for HTTP tunnelling the JMS
clients through firewalls to an ActiveMQ broker; its not really
designed for ease-of-client-implementation which STOMP has
-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://open.iona.com

Re: Using http transport from a Perl client

Posted by Ramit Arora <ra...@gmail.com>.
Hey James,
Thanks for the prompt reply. I've already tried Stomp for talking to
ActiveMQ, & the performance is quite good. I've even modified the Net::Stomp
module available on CPAN to handle transactions & the master/slave topology
of ActiveMQ. 
But we want to explore all possible ways for Perl clients to talk to
ActiveMQ, as our choice would have organization wide implications. As far as
I can tell, the possible mechanisms are Stomp, HTTP & the REST API. Can you
suggest which one will be the most suitable in terms of guaranteed message
delivery? Raw performance is not really an issue as we are not looking at
message rates beyond a few hundred messages per second. And can you point me
to some working Perl code using Http transport & REST?

Thanks,
Ramit Arora


James.Strachan wrote:
> 
> To talk to ActiveMQ via Perl, use the Perl Stomp client...
> 
> http://activemq.apache.org/cross-language-clients.html
> 
> On 28/02/2008, Ramit Arora <ra...@gmail.com> wrote:
>>
>>  Hi All,
>>  I am experimenting with ActiveMQ 5.0, & my clients are in Perl. While
>>  tinkering around, I managed to get Java clients to communicate with the
>>  broker using http.
>>  It seems that JMS commands are serialized into xml using XStream & sent
>> over
>>  http. The broker deserializes them using XStream.
>>  When I tried sending http messages from Perl (using LWP & simple xml as
>> the
>>  content of the messages), I got the following error on the broker:
>>
>>  ERROR log                            - /topic/fooHTTP
>>  com.thoughtworks.xstream.alias.CannotResolveClassException: person :
>> person
>>         at
>> 
>> com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:35)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.XmlFriendlyMapper.realClass(XmlFriendlyMapper.java:44)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:49)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:46)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:52)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>>         at
>> 
>> com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:28)
>>         at
>> 
>> com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:95)
>>         at
>> 
>> com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:12)
>>         at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:521)
>>         at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:509)
>>         at com.thoughtworks.xstream.XStream.fromXML(XStream.java:475)
>>         at
>> 
>> org.apache.activemq.transport.xstream.XStreamWireFormat.unmarshalText(XStreamWireFormat.java:55)
>>         at
>> 
>> org.apache.activemq.transport.http.HttpTunnelServlet.doPost(HttpTunnelServlet.java:102)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>>         at
>>  org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
>>         at
>>  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
>>         at
>>  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>>         at
>>  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
>>         at
>>  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>>         at org.mortbay.jetty.Server.handle(Server.java:295)
>>         at
>>  org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
>>         at
>> 
>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:841)
>>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:639)
>>         at
>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
>>         at
>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
>>         at
>> 
>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
>>         at
>> 
>> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
>>
>>  How can I send http messages from Perl?
>>
>>  Thanks,
>>  Ramit Arora
>>
>>
>>  --
>>  View this message in context:
>> http://www.nabble.com/Using-http-transport-from-a-Perl-client-tp15738834s2354p15738834.html
>>  Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> James
> -------
> http://macstrac.blogspot.com/
> 
> Open Source Integration
> http://open.iona.com
> 
> 

-- 
View this message in context: http://www.nabble.com/Using-http-transport-from-a-Perl-client-tp15738834s2354p15752863.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Using http transport from a Perl client

Posted by James Strachan <ja...@gmail.com>.
To talk to ActiveMQ via Perl, use the Perl Stomp client...

http://activemq.apache.org/cross-language-clients.html

On 28/02/2008, Ramit Arora <ra...@gmail.com> wrote:
>
>  Hi All,
>  I am experimenting with ActiveMQ 5.0, & my clients are in Perl. While
>  tinkering around, I managed to get Java clients to communicate with the
>  broker using http.
>  It seems that JMS commands are serialized into xml using XStream & sent over
>  http. The broker deserializes them using XStream.
>  When I tried sending http messages from Perl (using LWP & simple xml as the
>  content of the messages), I got the following error on the broker:
>
>  ERROR log                            - /topic/fooHTTP
>  com.thoughtworks.xstream.alias.CannotResolveClassException: person : person
>         at
>  com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:35)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.XmlFriendlyMapper.realClass(XmlFriendlyMapper.java:44)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:49)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:46)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:52)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:18)
>         at
>  com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:28)
>         at
>  com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:95)
>         at
>  com.thoughtworks.xstream.core.ReferenceByXPathMarshallingStrategy.unmarshal(ReferenceByXPathMarshallingStrategy.java:12)
>         at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:521)
>         at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:509)
>         at com.thoughtworks.xstream.XStream.fromXML(XStream.java:475)
>         at
>  org.apache.activemq.transport.xstream.XStreamWireFormat.unmarshalText(XStreamWireFormat.java:55)
>         at
>  org.apache.activemq.transport.http.HttpTunnelServlet.doPost(HttpTunnelServlet.java:102)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>         at
>  org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
>         at
>  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
>         at
>  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>         at
>  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
>         at
>  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>         at org.mortbay.jetty.Server.handle(Server.java:295)
>         at
>  org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
>         at
>  org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:841)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:639)
>         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
>         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
>         at
>  org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
>         at
>  org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
>
>  How can I send http messages from Perl?
>
>  Thanks,
>  Ramit Arora
>
>
>  --
>  View this message in context: http://www.nabble.com/Using-http-transport-from-a-Perl-client-tp15738834s2354p15738834.html
>  Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>


-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://open.iona.com