[ https://issues.apache.org/activemq/browse/CAMEL-3195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=62774#action_62774 ]
Chandra Prakash Joshi edited comment on CAMEL-3195 at 10/22/10 1:28 PM: ------------------------------------------------------------------------ Donald, Thanks for the suggestion. I have attached a patch that serves these requirments: - The component gets triggerd by Presence/PubSub on input - Set a doc header in IN message When doc bool is set to true on endpoint (and it gets set when either pubsub or presence is true) with these changes the below route receives Chat, Presence and PubSub Packets: {code:java} from("xmpp:us...@banl080161/us...@banl080161?password=pass2&pubsub=true&presence=true").process( new Processor(){ public void process(Exchange exchange) throws Exception { Packet pk = (Packet)exchange.getIn().getHeader("doc"); exchange.getIn().setBody(pk.toXML()); } }).to("stream:out"); {code} A pubsub and presence packet can be send like below. camel-xmpp does't take responsibility of creating these packets (we will need too many enpoint parameters for that). Please do let me know if you have a better way to do this. {code:java} //Publish to a topic from("stream:in?promptMessage=Enter something:").process( new Processor(){ public void process(Exchange exchange) throws Exception { String xmlpayLoad = "<entry xmlns='jabber:x:data'><data>" + exchange.getIn().getBody().toString() + "</data></entry>"; String NAMESPACE = "http://jabber.org/protocol/pubsub"; PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>("itemid1", new SimplePayload("data", NAMESPACE, xmlpayLoad)); PubSub p = new PubSub(); p.setTo("pubsub.banl080161"); p.setType(IQ.Type.SET); p.addExtension(new PublishItem<PayloadItem<?>>("topic1", item)); String str = p.toXML(); System.out.println("Publishing to node 'topic1' withp this data: " + str); exchange.getIn().setBody(p); } }) .to("xmpp:us...@banl080161?password=pass1&pubsub=true"); {code} {code:java} //send presence from("stream:in?promptMessage=Enter something:").process( new Processor(){ public void process(Exchange exchange) throws Exception { System.out.println("sending presence with message: " + exchange.getIn().getBody().toString()); Presence p = new Presence(Type.available, exchange.getIn().getBody().toString(), 5, Mode.chat); exchange.getIn().setBody(p); } }) .to("xmpp:us...@banl080161?password=pass1&presence=true"); {code} was (Author: chandraprakashjoshi): Donald, Thanks for the suggestion. I have attached a patch that serves these requirments: - The component gets triggerd by Presence/PubSub on input - Set a doc header in IN message When doc bool is set to true on endpoint (and it gets set when either pubsub or presence is true) with these changes the below route receives Chat, Presence and PubSub Packets: {code:java} from("xmpp:us...@banl080161/us...@banl080161?password=pass2&pubsub=true&presence=true").process( new Processor(){ public void process(Exchange exchange) throws Exception { Packet pk = (Packet)exchange.getIn().getHeader("doc"); exchange.getIn().setBody(pk.toXML()); } }).to("stream:out"); {code} A pubsub and presence can be send like below. camel-xmpp does't take responsibility of creating these packets (we will need too many enpoint parameters for that). Please do let me know if you have a better way to do this. {code:java} //Publish to a topic from("stream:in?promptMessage=Enter something:").process( new Processor(){ public void process(Exchange exchange) throws Exception { String xmlpayLoad = "<entry xmlns='jabber:x:data'><data>" + exchange.getIn().getBody().toString() + "</data></entry>"; String NAMESPACE = "http://jabber.org/protocol/pubsub"; PayloadItem<SimplePayload> item = new PayloadItem<SimplePayload>("itemid1", new SimplePayload("data", NAMESPACE, xmlpayLoad)); PubSub p = new PubSub(); p.setTo("pubsub.banl080161"); p.setType(IQ.Type.SET); p.addExtension(new PublishItem<PayloadItem<?>>("topic1", item)); String str = p.toXML(); System.out.println("Publishing to node 'topic1' withp this data: " + str); exchange.getIn().setBody(p); } }) .to("xmpp:us...@banl080161?password=pass1&pubsub=true"); {code} {code:java} //send presence from("stream:in?promptMessage=Enter something:").process( new Processor(){ public void process(Exchange exchange) throws Exception { System.out.println("sending presence with message: " + exchange.getIn().getBody().toString()); Presence p = new Presence(Type.available, exchange.getIn().getBody().toString(), 5, Mode.chat); exchange.getIn().setBody(p); } }) .to("xmpp:us...@banl080161?password=pass1&presence=true"); {code} > Allow camel to send custom xmpp Presence/PubSub packet to a xmpp endpoint > ------------------------------------------------------------------------- > > Key: CAMEL-3195 > URL: https://issues.apache.org/activemq/browse/CAMEL-3195 > Project: Apache Camel > Issue Type: New Feature > Components: camel-xmpp > Reporter: Chandra Prakash Joshi > Attachments: Camel-xmpp-pubsub-presence.patch > > > Claus Ibsen suggested that I should create a ticket for this new feature > ([http://stackoverflow.com/questions/3645159/can-apache-camel-send-a-xmpp-presence-pubsub-packet-to-an-xmpp-endpoint]) > I need to receive an update published to a JMS topic, convert it to a XMPP > packet (Presence packet or PubSub packet) and route it to an XMPP endpoint. > I am using ActiveMQ as JMS provider and Apache camel as routing engine. given > below is my route in Camel (to make things simple I read from system.in > instead of a jms topic): > {code:java} > from("stream:in?promptMessage=Enter something:").process( new > Processor(){ > public void process(Exchange exchange) throws Exception { > System.out.println("sending presence with message: " + > exchange.getIn().getBody().toString()); > Presence p = new Presence(Type.available, > exchange.getIn().getBody().toString(), 5, Mode.chat); > exchange.getIn().setBody(p); > } > }).to("xmpp:us...@banl080161?password=pass1"); > {code} > Idea is that us...@banl080161 should be able to send a custome presence > packet having status as given from system.in. I am reading from system.in, > making a presence packet, setting this packet in the exchange body and send > this presence on behalf of us...@banl080161. > Problem: nothing gets sent to XMPP server, I use PSI to see packets coming > from us...@banl080161, us...@banl080161 comes online for sure but no custom > presence message is received. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.