I think I have located the problem. At the point when the NM is handed to AMQ with doRouting() it needs a serializable object. The problem is that the datahandler is not serializable. So it looks that in the moment the JMSFlow doesn't support normalized messages with attachments.
Btw I have modified the JMSMarshaler so that it can handle BytesMessages, should I set up a jira? -----Ursprüngliche Nachricht----- Von: Gerdes, Mike Gesendet: Mittwoch, 12. April 2006 10:48 An: [email protected] Betreff: AW: BinaryFileMarshaler btw, it only happens fpr jms flow, the seda flow works correctly, as well as the binaryfilemarshaler, you just have to use the marshaler at the poller and writer side, otherwise you will errors, if you just use it on the writer side, you will get empty messages. -----Ursprüngliche Nachricht----- Von: Gerdes, Mike Gesendet: Mittwoch, 12. April 2006 09:32 An: [email protected] Betreff: AW: BinaryFileMarshaler Hi, I have tried a bit and it looks like the problem is not really fixed. At least in the last snapshot was the serializable class not implemented in the bytearraydatasource, so I added it and got a new error. Here is my sourcecode snippet for my jms-bytes-marshaler: public void toNMS(NormalizedMessage normalizedMessage, Message message) throws JMSException, MessagingException { addNmsProperties(normalizedMessage, message); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; Source source = sourceMarshaler.asSource(textMessage.getText()); normalizedMessage.setContent(source); } if(message instanceof BytesMessage){ BytesMessage b = (BytesMessage) message; byte[] bm = new byte[(int)b.getBodyLength()]; b.readBytes(bm); InputStream in = new ByteArrayInputStream(bm); DataSource ds = new StreamDataSource(in); //DataSource ds = new ByteArrayDataSource(bm); DataHandler handler = new DataHandler(ds); normalizedMessage.addAttachment("content", handler); } // lets add the message to the NMS // Fix SM-178 : the message exchange is not serializable //normalizedMessage.setProperty("org.apache.servicemix.jms.message", message); } So this code (with StreamDataSource or ByteArrayDataSource) throws the same error, which is this: java.lang.RuntimeException: javax.activation.DataHandler at org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:102) at org.apache.activemq.command.ActiveMQObjectMessage.setObject(ActiveMQObjectMessage.java:144) at org.apache.activemq.ActiveMQSession.createObjectMessage(ActiveMQSession.java:351) at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.doRouting(JMSFlow.java:425) at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.doSend(JMSFlow.java:405) at org.apache.servicemix.jbi.nmr.flow.AbstractFlow.send(AbstractFlow.java:121) at org.apache.servicemix.jbi.nmr.Broker.sendExchangePacket(Broker.java:295) at org.apache.servicemix.jbi.container.JBIContainer.sendExchange(JBIContainerjava:683) at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:450) at org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.send(DeliveryChannelImpl.java:490) at org.apache.servicemix.components.jms.JmsInBinding.onMessage(JmsInBinding.java:66) at org.jencks.XAEndpoint.onMessage(XAEndpoint.java:126) at org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:120) at org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxyjava:60) at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:664) at org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:163) at org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Thread.java:595) Caused by: java.io.NotSerializableException: javax.activation.DataHandler at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) at java.util.HashMap.writeObject(HashMap.java:985) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:890) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1333) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) at org.apache.servicemix.jbi.messaging.NormalizedMessageImpl.writeExternal(NormalizedMessageImpl.java:298) at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) at org.apache.servicemix.jbi.messaging.ExchangePacket.writeExternal(ExchangePacket.java:374) at org.apache.servicemix.jbi.messaging.MessageExchangeImpl.writeExternal(MessageExchangeImpl.java:529) at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291) at org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:98) ... 18 more So might the error lay somewhere else or is there something I haven't thought of? cya mike -----Ursprüngliche Nachricht----- Von: Guillaume Nodet [mailto:[EMAIL PROTECTED] Gesendet: Dienstag, 11. April 2006 15:57 An: [email protected] Betreff: Re: BinaryFileMarshaler The NotSerializableException should be fixed in latest svn head. And yes, you have to create your own custom marshaler to handle non-xml data. Cheers, Guillaume Nodet On 4/11/06, Gerdes, Mike <[EMAIL PROTECTED]> wrote: > > hi, > > has anyone tried to use the BinaryFileMarshaler? I have tried to use it with > the file-binding example and as a result I get only empty files. Is this a > configuration error on my side? > Oh I was wondering if it is possible to send BytesMessages from a JMS source > to SM? I was trying it and juggling around with the JMSMarshaller and got a > problem with the DataHandler and a NotSerializableException. > > cya > > mike > > This mail has originated outside your organization, either from an external > partner or the Global Internet. Keep this in mind if you answer this message. > This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message. This mail has originated outside your organization, either from an external partner or the Global Internet. Keep this in mind if you answer this message.
