On Sat, Aug 4, 2012 at 7:09 AM, Pontus Ullgren <[email protected]> wrote: > I am talking about the (spring) jms message converter used by the jms > component to create jms messages is handed the correct session. > See the messageConverter option on the JMS component page. >
Yes you should use a JMS message converter on the JMS component. This is likely the only possible solution as its then tied to the JMS API and the JMS session as Pontus says. Using a DataFormat is not really possible. > Best regards > Pontus > Send from my phone > Den 4 aug 2012 00:35 skrev "Christian Müller" <[email protected]>: > >> I don't think a Converter is the right choice, if you need a JMS connection >> for this. How should the Connector know which broker url should be used? >> You cannot inject dependencies into your converter... >> >> Best, >> Christian >> >> On Fri, Aug 3, 2012 at 8:21 AM, Pontus Ullgren <[email protected]> wrote: >> >> > Hello, >> > >> > Sorry for repeating myself but you should really have a look at doing >> this >> > in a message converter. First you will not have to cast it to a exchange. >> > And second you will then be handed the same session that is used to >> create >> > the producer in the component. So you will participate in the same unit >> of >> > work. Which I doubt is true if you create your own connection/session. >> But >> > I am currently travelling so I can not test this. >> > >> > //Pontus >> > Send from my phone >> > Den 3 aug 2012 00:14 skrev "brenthale" <[email protected]>: >> > >> > > Thanks for all the suggestions. >> > > >> > > I've been trying to create a DataFormat to handle this. I'm stuck >> trying >> > > to >> > > integrate an ActiveMQ ActiveMQBlobMessage with the >> > > org.apache.camel.Exchange >> > > class working with org.apache.camel.Message's. You can't typecast one >> > into >> > > the other. >> > > >> > > Here's my current unmarshal method: >> > > >> > > public Object unmarshal(Exchange exchange, InputStream stream) throws >> > > Exception { >> > > ActiveMQConnection connection; >> > > ActiveMQSession session; >> > > >> > > ActiveMQBlobMessage blobMessage; >> > > >> > > connection = (ActiveMQConnection) >> > > activeMQConnectionFactory.createConnection(); >> > > connection.start(); >> > > >> > > session = (ActiveMQSession) connection.createSession(false, >> > > Session.AUTO_ACKNOWLEDGE); >> > > >> > > blobMessage = (ActiveMQBlobMessage) >> > session.createBlobMessage(stream); >> > > blobMessage.setMessageId(new >> > > MessageId(exchange.getIn().getMessageId())); >> > > >> > > // Get the data uploaded to the ActiveMQ fileserver >> > > blobMessage.getBlobUploader().upload(blobMessage); >> > > >> > > // org.apache.camel.Exchange is a Camel object expecting a >> > > org.apache.camel.Message in the Out. >> > > // BlobMessage is an ActiveMQ >> > > org.apache.activemq.command.ActiveMQBlobMessage. >> > > // This line doesn't work. They don't cast. >> > > // exchange.setOut(blobMessage); >> > > >> > > // And this was a sad attempt at trying to get around it. >> > > // DefaultMessage camelMessage = new DefaultMessage(); >> > > // camelMessage.setExchange(exchange); >> > > // camelMessage.setBody(blobMessage, >> > > org.apache.activemq.command.Message.class); >> > > // camelMessage.setMessageId(blobMessage.getMessageId().toString()); >> > > // exchange.setOut(camelMessage); // kinda by-passes things. >> > > >> > > // if (! (((JmsMessage) message).getJmsMessage() instanceof >> > > BlobMessage)) >> > > { >> > > exchange.setOut((JmsMessage)(BlobMessage)blobMessage); >> > > // ((JmsMessage)exchange.getOut()).setJmsMessage(blobMessage); >> > > >> > > return blobMessage; >> > > } >> > > >> > > >> > > When the setOut() is made I get the following exception. >> > > >> > > exchange.setOut((JmsMessage)(BlobMessage)blobMessage) = Type mismatch >> > Can't >> > > assign org.apache.activemq.command.ActiveMQBlobMessage to >> > > org.apache.camel.Message >> > > >> > > >> > > When working with BlobMessages sent normally (via a producer.send()) I >> am >> > > able to retrieve the BlobMessage this way: >> > > >> > > if (! (((JmsMessage) message).getJmsMessage() instanceof >> > BlobMessage)) >> > > { >> > > throw new CdsMsgException("Error processing batch message: >> > Expected a >> > > BlobMessage"); >> > > } >> > > BlobMessage blobMessage = (BlobMessage) ((JmsMessage) >> > > message).getJmsMessage(); >> > > >> > > But I'm at a loss as to how to change the Message to a BlobMessage >> inside >> > > of >> > > a DataFormat. >> > > >> > > I assume I'm missing something fairly trivial. >> > > >> > > Thanks, >> > > >> > > >> > > >> > > >> > > ----- >> > > >> > > Brent >> > > -- >> > > View this message in context: >> > > >> > >> http://camel.465427.n5.nabble.com/Is-it-possible-to-create-a-custom-DataFormat-to-translate-a-message-into-a-BlobMessage-tp5716679p5716720.html >> > > Sent from the Camel - Users mailing list archive at Nabble.com. >> > > >> > >> -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen
